目录
一、什么是SQL映射文件?
SQL映射xml文件是所有sql语句放置的地方,不同于JDBC连接的方法,需要构造方 法、写statement和resultset语句才可以调用指定的sql语句,SQL映射文件只需要把所有的 sql语句写在配置文件中,根据不同的id,可以在类中直接调用这些语句。 文件需要定义 一个workspace,一般定义为对应的接口类的路径。 Note:写好的SQL映射文件,需要在 Mybatis主配置文件标签mapper中引用。
二、SQL映射文件中的几个顶级元素
- mapper:SQL映射文件的根元素。只有一个namespace,用于区分不同的mapper,必须全局唯一。
- cache:为给定命名空间配置缓存。
- cache-ref:引用其他命名空间中的缓存配置。
- resuitMap:用来描述查询结果集中的字段和Java实体类属性的对应关系。
- sql:定义可重用的SQL语句块,可以在其他语句映射中引用,提高代码编写和维护SQL语句的效率。
- insert: 映射insert语句。
- select: 映射select语句。
- update:映射update语句。
- delete :映射delete语句。
三、命名规则
1. SQL映射文件与Mapper接口同名(实体类名+Mapper),并放置在同一个包路径下。文件类型不一样
2. mapper的namespace一般是要映射的Mapper接口的完全限定名。
3. 接口中的方法名与映射文件中SQL语句的ID一一对应。MyBatis通过namespace+ID确定和接口方法绑定的SQL语句ID。这也就是为什么可以不通过Mapper接口直接用selectOne 和selectList来读取值。
4. 不同的SQL映射文件中,子元素ID可以相同。(因为命名空间唯一,使用时是命名空间加上ID也就唯一了)。
四、mapper
接口namespace属性
区别不同的mapper,namespace和子元素的id联合保证唯一
绑定DAO接口(关键)
namespace的命名必须跟某个接口同名
接口中的方法与映射文件中SQL语句id一一对应
示例:
userDao接口中有个selectAll方法,那么在同级目录下要创建一个userDao.xml配置文件,其中该文件的mapper的namespace为userDao的完整路径(包名+文件名),
同时在该xml文件中有一个< selelct id=“selectAll”>< /select>元素标签
MyBatis框架的条件查询
1. 实现单一条件查询
如果仅传入一个简单数据类型的查询条件,如一个基本数据类型或其包装类型,或一个String类型等,MyBatis框架的处理方式也非常简单。以实现根据用户的真实姓名模糊匹配来查询用户信息为例,关键代码如示例1所示。
2. 实现多条件查询
在实际应用中,数据查询经常会综合多种条件,如724系统用户管理模块中的查询用户功能,查询条件包括用户名(模糊匹配)和用户角色,如图2.2所示。对于多条件查询,MyBatis框架提供了多种方法实现条件赋值。
1. 将查询条件封装成Java对象作为入参
2. 将查询条件封装成Map对象作为入参
3 使用@Param注解实现多参数入参
MyBatis框架的结果映射
MyBatis框架会获取结果集中的列名称并 查找具有相同名称的属性进行赋值。但实际开发中的情况会更加复杂,如数据库与应用程序的命名规则不统一、列名和属性名不同,或使用连接查询时需要封装来自多张表的数据,这时域对象要如何设计?针对这些问题可以有不同的解决方案,如在SQL语句中使用select子句别名、修改域模型设计以包含关联字段等。但是,这些方法都有明显的弊端,使用select子句别名会大大增加SQL语句的开发工作量,烦琐且易错,改变域模型设计规则会破坏面向对象的设计原则,导致混乱。为此,MyBatis框架提供了Result Map机制来自定义结果映射,简单灵活而又功能强大。
MyBatis框架的缓存
MyBatid框架缓存分为两个级别:
一级缓存:
MyBatis框架的一级缓存是基于P erpetualCache和HashMap本地缓存,默认是SqlSession级别的缓存,在SqlSession的一个生命周期内有效。当SqlSession关闭后,该SqlSession中的所有一级缓存会被清空。MyBatis框架的一级缓存默认是开启的。二级缓存:
二级缓存是SqlSessionFactory级别的,其作用域超出了一个SqlSession的范围,缓存中的数据可以被所有SqlSession共享。MyBatis框架的二级缓存默认是关闭的,使用时需要在Mybatis框架的核心配置文件中设置开启。
二级缓存使用方法
1.在MyBatis核心配置文件中设置全局开启二级缓存
2.即使开启了二级缓存,默认情况下也是不使用的,可以根据需要在SQL映射文件中配置缓存,为当前namespace启用二级缓存,
总结