1,使用mybatis必须使用配置或者代码去生产SqlSessionFactory,而mybatis其实提供了SqlSessionFactoryBuilder作为构造器。他提供了一个configuration作为引导,采用builder模式进行创建。具体的步骤就在configuration类里面完成。
注意:在项目里面一般就是采用XML文件的方式进行生产出SqlSessionFactory,当然也可以通过代码的形式去生成,不过不建议。当配置完配置文件之后Mybatis会读XML文件。通过configuration类对象构建整个Mybatis的上下文。
SqlSessionFactory其实是一个接口,他的实现类有SqlSessionManager以及DefaultSqlSessionFactory。。一般是由DefaultSqlSessionFactory去实现Mybatis。而SqlSessionManager主要是用于多线程环境中。
,2,SqlSession是Mybatis整个实现的核心好接口,其中实现类DEfaultSqlSession适用于单线程中的,而SqlSessionManager是用于多线程中的。其实SqlSession就类似于JDBC里面的一个连接对象Connection对象。,其实就是代表一个连接资源的启用。具体而言,它的作用有三个:获取Mapper接口,发送sql给 数据库,控制数据库的事务生成
SqlSession sqlsession=SqlSessionFactory.openSession(); SqlSession里面干活的就是Executor,而sqlsession就是一个门面里面有很多方法的。
3.映射器
(1)它由一个接口以及对应的XML文件组成(或者是注解),他可以配置以下内容:描述映射规则,提供Sql语句,配置缓存,提供动态的SQL。;(Mapper)映射器的主要作用就是讲SQL查询的结果映射为一个POJO,或者将POJO的数据插入到数据库表中,并且可以定义缓存。接口不能运行但是Mybatis运用了动态代理技术生成目标接口的动态代理类也就是生成了目标类。
<mapper …xml>其实就是使用xml文件的方式创建映射器。mapper元素的属性namespace对应的是一个接口的全限定名,于是mybatis就可以通过他找到对应的接口。在配置里面我们并没有配置与pojo对象的关系,他是如何映射的呢,采用的是自动映射的功能,Mybatis在默认情况下采用自动映射。只要sql返回的列名可以与pojo对应起来就可以了。自动映射功能把查询的结果通过自动映射功能映射成为一个pojo。
注意:XML可以相互引入,而注解是不可以的。因此推荐实用XML,比较多。
当然接口呀可以在XML文件中定义,。。当然也可以使用configuration对象注册这个接口。
configuration.addMapper(RoleMapper.class)、。
4,传递多个参数
(1)使用map传递参数,但是map传递参数可读性比较差。不建议使用。
(2)因此,Mybatis提供了使用注解传递参数的方式。
其中使用到的注解是@Param(annotations里面的),我们可以通过它定义映射器的参数名称,使其得到更好的可读性。
5,Mybatis使用ResultMap来映射结果集,因为pojo的属性与数据库表的列属性可能不一样,导致对应不到数据,因此必须使用映射ResultMap来处理。
6.重点:基于内存的分页RowsBounds,,而直接在SQL分页是基于物理分页的。
其实Mybatis不仅仅支持分页,他还内置了一个专门用于分页的类----RowsBounds类。主要的属性就是offset以及limit,,其中offset这个属性就是偏移量,也就是从第几行开始读取记录的。而limit就是限制读取的条数的。。。使用这个也比较简单只要给mapper接口方法里面传入参数—RowsBounds rowsbounds参数就可以了。有趣的事映射文件XML并不需要rowsbounds参数。
原因:RowsBounds是一个Mybatis的附加参数,Mybatis就会自动识别他,据此进行直接分页,。但是需要注意的是RowsBounds只是适用于小数据量的查询。。RowsBounds分页的原理就是执行SQL的查询后,按照偏移量以及限制读取的条数返回查询结果。,所以对于大量的数据其表现不太好,性能不加。此时应该采用分页插件去进行分页。本质就是基于第一次查询结果再分页。也就是说先让SQL查询数据出来再进行分页,显然效率太低。
7,数据量大还是得使用分页插件