MyBatis解析(三)------动态sql与通过mapper接口加载映射文件

1.动态sql
我们可以用mybatis执行sql的形式来对数据的表进行增删改查操作,不过遇到比较复杂的业务需要写复杂的sql时(比如说sql的条件不确定,可能有一个条件或者多个),
我们就需要动态sql来提高sql的灵活性。
1.1if 语句(标签可以判断if中的条件是否成立,成立则执行if表中的sql,反之不执行。)

图中的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语句
:(where标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。)

1.3if+set 语句
:>:(where标签会知道如果它包含的标签中有返回值的话,它就插入一个‘set’)

1.4动态SQL:choose(when,otherwise) 语句
: 当对于sql中可能出现的多种条件但是只想选择其中的一个时,使用 choose 标签可以解决此类问题。

此时:如果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 一致

posted @ 2019-05-23 17:28  小小短腿儿  阅读(537)  评论(0)    收藏  举报