MyBatis初级

目录

 

1.相关概念

2.MyBatis与Jpa区别

3.MyBatis入门:

4.抽取工具类

5.MyBatis使用细节

   1.保存数据后获取主键值

    2.MyBatis查看sql的日志

导包--->log4j

配置文件log4j.properties

   3.测试

4.datasource的配置信息单独提出到一个配置文件

 5.别名

   1.内置别名

   2.自定义别名

 6.在mapper映射中取值的问题:#{id} 与 ${id}

 7.参数的传递:Long Domain,Domain和map的转换


1.相关概念

        MyBatis:是一个ORM的数据库持久化框架

                是针对数据库交互的一个辅助框架,

        数据库持久化:数据持久化是将内存中的数据模型转换为储存模型

                      常见的有磁盘持久化和数据库持久化,也是对jdbc做了简单的封装,

                      以xml配置代替java代码来管理数据库的交互细节

                      数据库持久化就是把内存中的数据保存到数据库中

        框架:特指为解决一个开放性问题而设计的的具有一定约束性的支撑结构

        ORM:对象关系的映射

             是为了解决面向对象与关系型数据库存在不匹配的现象的技术

2.MyBatis与Jpa区别

           都是ORM的框架,都是对jdbc进行封装,目的都是为了简化对数据库的操作

           不同点:

  1. Jpa是使用全映射,不需要我们写sql语句
  2. MyBatis是半映射,需要写sql语句
  3. MyBatis的性能要高于jpa

3.MyBatis入门:

做domian和数据库表的映射

  1. domian
  2. 数据库对应的表
  3. Dao:接口和实现出来
  4. 导入jar包:MyBatis的核心包和依赖包与musql的驱动包
  5. 测试

      mybatis的测试:

       dao层:接口声明(搞定)===>接口实现:调用sql语句

       sql文件:xml中写,这个文件放在和接口同一层目录;

            xml的名字:DomainMapper.xml

     注意更改:更改jia包依赖的配置

4.抽取工具类

     通过我们的演示:

     我们需要抽取一个获取SqlSession的工具类:

     //通过配置文件获取的:我们应该保证只有一个

        static SqlSessionFactory sessionFactory=null;

        static {

            //读取配置文件,通过SqlSessionFactoryBuilder构建SqlSessionFactory

            //1:通过配置文件获取到一个Reader

            String resource="mybatis-config.xml";

            Reader reader = null;

            try {

                reader = Resources.getResourceAsReader(resource);

                //2:SqlSessionFactoryBuilder==>SqlSessionFactory构造者

                SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();

                //3:获取到一个SqlSessionFactory对象

                 sessionFactory = factoryBuilder.build(reader);

            } catch (IOException e) {

                e.printStackTrace();

            }}

/**

          * 获取一个SqlSession

          * @return

          */

         public static SqlSession getSqlSession(){

return sessionFactory.openSession();

         }

 

   SqlSessionFactoryBuilder:用来构建SqlSessionFactory,用完就完了

   SqlSessionFactory:用来获取SqlSession,应该是一个应用期间只有一个,线程安全的,重.

   SqlSession:线程不安全,每一个方法都应该获取一个,用完了记得关闭.

 

5.MyBatis使用细节

1.保存数据后获取主键值

          useGeneratedKeys="true"  开关打开

          keyColumn="id" 表示数据库设计表的存主键的那个列名(可以省略)

          keyProperty="id" 表示domain中用于存id的属性名

2.MyBatis查看sql的日志

      需要使用log4j日志框架

  1. 导包--->log4j

  2. 配置文件log4j.properties

               log4j.rootLogger=ERROR, stdout

#log4j.rootLogger=NONE

log4j.logger.cn.itsource=TRACE

             //cn.itsource:一定要根据自己的包名情况进行修改

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

 

/**

debug:调试级别

info: 提示级别

warnnig: 警告级别

error:错误级别

 

开发时用debug,上线时使用warnnigerror

**/

     3.测试

 4.datasource的配置信息单独提出到一个配置文件

    <!--引入jdbc.properties配置文件,这个有顺序的-->

        <properties resource="jdbc.properties"></properties>

 5.别名

    很多时候,我们使用全限定名,太长了,用一个短点别名代替.

   1.内置别名

      mybatis已经做好的配置:规律:级别都是大写变小写,

具体看文档的那张表(基本数据类型加_)

     2.自定义别名

        a:定义一个别名==>核心配置文件

        b:使用别名:

         <typeAliases>

                <!--以包的形式定义:这个包下的所有的类都默认使用简单类名做别名-->

                <package name="cn.itsource.mybatis.domain"></package>

 

                <!--

                把cn.itsource.mybatis.domain.Product娶一个别名:Product

                alias:可以省略,不写.默认就是这个类名的简单名字:首字母大写小写都可以,

但是建议大写.

                <typeAlias type="cn.itsource.mybatis.domain.Product"

                           ></typeAlias> -->

            </typeAliases>

 

 6.在mapper映射中取值的问题:#{id} 与 ${id}

    select * from product where id = #{id}

      #:会编译成一个占位符:?

        如果只有一个参数,取值的时候随便写#{id} 或者#{suibian};

        如果只有多个参数,取值的时候不能随便写,写getter属性

 

      $:直接是拼接:

         select * from product where id =${id}

 7.参数的传递:Long Domain,Domain和map的转换

         为什么要用map替代domain:

            登录:

           User

           前台传入用户名和密码:

           select * from t_user where name="xxx" and pwd ="xxx"

猜你喜欢

转载自blog.csdn.net/weixin_44840242/article/details/88979577