javaEE框架课程
4.2.4 resultType总结:
输出pojo对象和输出pojo列表在sql中定义的resultType是一样的。
返回单个pojo对象要保证sql查询出来的结果集为单条,内部使用session.selectOne方法调用,mapper接口使用pojo对象作为方法返回值。
返回pojo列表表示查询出来的结果集可能为多条,内部使用session.selectList方法,mapper接口使用List
4.2.5 输出hashmap
输出pojo对象可以改用hashmap输出类型,将输出的字段名称作为map的key,value为字段值。
4.3 resultMap
resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。 如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系,resultMap实质上还需要将查询结果映射到pojo对象中。 resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
4.3.1 Mapper.xml定义
使用resultMap指定上边定义的personmap。
javaEE框架课程
4.3.2 定义resultMap
由于上边的mapper.xml中sql查询列和Users.java类属性不一致,需要定义resultMap:userListResultMap将sql查询列和Users.java类属性对应起来
Property:表示person类的属性。 Column:表示sql查询出来的字段名。
Column和property放在一块儿表示将sql查询出来的字段映射到指定的pojo类属性上。
4.3.3 Mapper接口定义
public List
4.4 动态sql(重点)
通过mybatis提供的各种标签方法实现动态拼接sql。
javaEE框架课程
4.4.1 If
注意要做不等于空字符串校验。
4.4.2 Where
上边的sql也可以改为:
4.4.3 foreach
向sql传递数组或List,mybatis使用foreach解析,如下:
javaEE框架课程
4.4.3.1 通过pojo传递list
? 需求
传入多个id查询用户信息,用下边两个sql实现:
SELECT * FROM USERS WHERE username LIKE '%张%' AND (id =10 OR id =89 OR id=16) SELECT * FROM USERS WHERE username LIKE '%张%' id IN (10,89,16)
? 在pojo中定义list属性ids存储多个用户id,并添加getter/setter方法
? mapper.xml
? 测试代码:
List
ids.add(1);//查询id为1的用户 ids.add(10);//查询id为10的用户 queryVo.setIds(ids);
List
javaEE框架课程
4.4.3.2 传递单个List
传递List类型在编写mapper.xml没有区别,唯一不同的是只有一个List参数时它的参数名为list。
如下:
? Mapper.xml
select * from user
? Mapper接口
public List
? 测试:
Publicvoid testselectUserByList()throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class); //构造查询条件List
List
userlist.add(user); user = new User(); user.setId(2);
userlist.add(user);
//传递userlist列表查询用户列表
List