mybatis笔记与回顾(三)

来源:互联网 发布:js判断a显示隐藏 编辑:程序博客网 时间:2024/06/05 15:37

6.输入映射

通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型。

6.1传递pojo对象

6.1.1需求

完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息、其它信息,比如商品、订单的)

6.1.2定义包装类型pojo

针对上边需求,建议使用自定义的包装类型的pojo。

在包装类型的pojo中将复杂的查询条件包装进去。


6.1.3mapper.xml

在UserMapper.xml中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)。


6.1.4mapper.java



6.15测试代码


7.映射输出

7.1resultType

使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。

只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。

7.1.1输出简单类型

7.1.1.1需求

用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页。

7.1.1.2mapper.xml


7.1.1.3mapper.java

//用户信息综合查询总数
public int findUserCount(UserQueryVo userQueryVo)throws Exception

7.1.1.4测试代码


7.1.1.5总结

查询出来的结果集只有一行且一列,可以使用简单类型进行输出映射。


7.1.2输出pojo对象和pojo列表

不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。

在mapper.java指定的方法返回值类型不一样:

         1、输出单个pojo对象,方法返回值是单个对象类型


//根据id查询用户信息
public User findUserById(int id) throws Exception;

 2、输出pojo对象list,方法返回值是List<Pojo>
//根据用户名列查询用户列表
public List<User> findUserByName(String name)throws Exception

生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用).

7.2resultMap

mybatis中使用resultMap完成高级输出结果映射。

7.2.1resultMap使用方法

如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

1、定义resultMap

2、使用resultMap作为statement的输出映射类型

7.2.2将下边的sql使用User完成映射

SELECT id id_,username username_ FROM USERWHERE id=#{value}

User类中属性名和上边查询列名不一致。

7.2.2.1定义resultMap


7.2.2.2使用resultMap作为statement的输出类型映射


7.2.2.3mapper.java

//更具id查用户信息,使用resultMap输出
public User findUserByIdResyltMap(int id) throws Exception;

7.2.2.4测试


7.3小结

使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

8.动态sql

8.1什么是动态sql

mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接和组装。

8.2需求

用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。

对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

8.3mapper.xml




8.4测试代码


8.5sql片段

8.5.1需求

将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。

方便程序员进行开发。

8.5.2定义sql片段


8.5.3引用sql片段

在mapper.xml中定义的statement中引用sql片段:



8.6foreach

向sql传递数组或List,mybatis使用foreach解析


8.6.1需求

在用户查询列表和查询总数的statement中增加多个id输入查询。

sql语句如下:

两种方法:

SELECT * FROM USER WHERE id=1 OR id=10 ORid=16

SELECT * FROM USER WHERE id IN(1,10,16)

8.6.2在输入参数类型中添加List<Integer> ids传入多个id

public class UserQueryVo{
//传入多个id
private List<Integer> ids;
}

8.6.3修改mapper.xml

WHERE id=1 OR id=10 OR id=16

在查询条件中,查询条件定义成一个sql片段,需要修改sql片段。


8.6.4测试代码


8.6.5另外一个sql实现


0 0
原创粉丝点击