MyBatis解析(三)------动态sql与通过mapper接口加载映射文件
1.动态sql
我们可以用mybatis执行sql的形式来对数据的表进行增删改查操作,不过遇到比较复杂的业务需要写复杂的sql时(比如说sql的条件不确定,可能有一个条件或者多个),
我们就需要动态sql来提高sql的灵活性。
1.1if 语句(
图中的sql,
a.当username不为空sex为空时执行:select * from user where username=#{username}
b.当sex不为空username为空时执行:select * from user where and sex=#{sex}
c.当sex与username都为空时执行:select * from user where
当然,bc两种情况都是不允许的,我们可以配合着where标签解决。
1.2if+where语句
1.3if+set 语句
1.4动态SQL:choose(when,otherwise) 语句
此时:如果id不为空则执行select * from user where id=?
如果 id 为空username不为空则执行select * from user where username=?
如果 id 与username都为空则执行select * from user where sex=?
1.5定义sql片段
如果有某一段sql我们经常用,就可以把它提炼出来以减少代码的重用性:
下图引用上图的sql片段。
2.通过mapper接口加载映射文件
以前的做法,在全局配置文件 mybatis-configuration.xml 通过
如果映射文件足够多,有很多映射文件呢,难道我们每一个映射文件都这样加载吗,这样肯定是不行的,那么我们就需要使用 mapper 接口来加载映射文件
改进做法:不使用使用全局配置文件 mybatis-configuration.xml 加载映射文件,利用mapper接口来加载映射文件
2.1定义 userMapper 接口
2.2在全局配置文件 mybatis-configuration.xml 文件中加载 UserMapper 接口(单个加载映射文件)
2.3编写UserMapper.xml 文件
2.4测试
2.5批量加载映射文件
这样全局配置文件 mybatis-configuration.xml 中的代码量会大大的减少。
此时有几点需要注意:
1、UserMapper.xml 文件中的namespace是UserMapper接口的全类名
2、UserMapper接口中的方法名和 UserMapper.xml 文件中定义的 id 一致
3、UserMapper接口输入参数类型要和 UserMapper.xml 中定义的 parameterType 一致
4、UserMapper接口返回数据类型要和 UserMapper.xml 中定义的 resultType 一致