发表于: 2018-06-10 00:36:49

2 891


今天完成的事情

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的使用



返回列表 返回列表
评论

    分享到