发表于: 2018-06-10 00:36:49
2 896
今天完成的事情
1.MyBatis中mapper.xml配置文件中的输入映射和输出映射
1.1输入映射(parameterType)
昨天输入映射用过了基本类型和pojo对象,现在输入映射要用对象包装类QueryVo
所谓对象包装类指的是该类上面的其中一个字段就是pojo对象
需求:根据用户名id查询用户,查询条件在包装类上
步骤一:先搞一个包装类出来
可见对象User是包装类的一个字段
步骤二: 写Mapper接口
步骤三:配置Mapper
一样的,要遵循一些约定(昨天的日报里有)。
步骤四 配到SqlMapConfig中
这里只截了跟昨天不同的部分,昨天是在<mapper>标签里设置resource属性值来确定mapper.xml的位置,但是这样只能确定一个mapper文件
而实际开发中可能有很多mapper文件需要加进来,一个个配太麻烦,所以就直接用<package>标签把整个mapper包下面的文件一次性配进来
步骤五 测试
1.2 输出映射
一般就只有三种:
基本类型
pojo对象
pojo对象列表
昨天都已经写过了
1.3 resultMap
查询订单
步骤不再赘叙
注意,当pojo中的字段和数据表中的字段不对应会发生什么情况?
这是pojo中的字段
这是数据表中的字段
用户id不一致,pojo中的是userId,而数据表中的字段是user_id,如果在mapper.xml文件中任然采用<resultType>标签来作为输出标签的话,得到以下结果:
userId字段的值为null
而在数据表中该字段是有数据的:
也就是说,如果pojo的字段名称和数据表的字段对应不上的话,会丢失字段信息
那怎么办呢?
在配置mapper.xml时用<resultMap>标签
红圈圈出来的部分跟前面配置不同
然后执行结果:
userId有值了
2.动态sql
动态sql的标签有如下几种:
<if><where><sql><foreach>,下面详细写写他们的用法
2.1 if标签
根据性别和姓名查询用户
写接口:
配置mapper.xml文件
写测试
这里要用if标签是由原因的,因为如果不用if标签的话,当在测试时没有为user中的sex字段赋值的话,那么查询语句将会变成这样:select * from user where sex=null and username like "%小%";
这样查出来的结果是0条数据,这显然不是我们要查的东西,我们的本意是没有为sex赋值,就是只要根据username来模糊查询用户
所以为了决解这个问题就加了判断语句
2.2 where标签
前面的sql语句中的where后面多了一个1=1这个条件,看起来还是很别扭,直接用where 标签就不用这个1=1条件了,因为where标签可以自动把前and给去掉
2.3 sql标签
sql标签主要作用是把一些常用的语句块单独拿出来放进标签里面,下次直接引用就好了,避免写重复的语句片段
如果要引用其他mapper.xml文件的sql片段的话,refid的值要加上那个片段的namepace
2.4 foreach标签
当我要用一条sql语句查多个用户,譬如下面这条sql语句:
select * from user where id in (1,2,3)
这时候就要用到foreach标签
写接口
配置mapper
在QueryVo对象上加上List<Integer>字段,用来接收我要传递的id值
测试
明天计划的事情
完成MyBatis的以下内容
1.表与表的一对一和一对多的连接
2.mybatis和spring的整合
3.mybatis的逆向工程
遇到的问题
暂无
收获
完整的输入的映射有基本类型和自己定义的对象,对象包装类
输出映射也一样,这里要注意resultMap的使用
动态sql的使用
评论