mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach
2018-03-26 14:35
861 查看
1 输入映射
传递pojo包装对象
需求
用户综合条件查询功能。使用mybatis实现用户查询列表,有很多查询条件(比如:商品信息、订单信息)。
如何将综合查询条件传到mybatis的statement中,要使用包装对象传这些参数。
1.1.2 定义一个包装对象
简单理解为:pojo包装了pojo。mapper.xml
mapper.java
传递hashmap Sql映射文件定义如下: <!-- 传递hashmap综合查询用户信息 --> <select id="findUserByHashmap" parameterType="hashmap" resultType="user"> select * from user where id=#{id} and username like '%${username}%' </select> 上边红色标注的是hashmap的key。 测试: Public void testFindUserByHashmap()throws Exception{ //获取session SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapper userMapper = session.getMapper(UserMapper.class); //构造查询条件Hashmap对象 HashMap<String, Object> map = new HashMap<String, Object>(); map.put("id", 1); map.put("username", "管理员"); //传递Hashmap对象查询用户列表 List<User>list = userMapper.findUserByHashmap(map); //关闭session session.close(); }
1 输出映射
1.1 resultType和resultMap介绍
resultType:指定输出映射类型,包括:java简单类型 string/int/float...、包括自定义的pojo。
如果指定自定义pojo,表示单条记录所映射pojo类型。
映射规则要求:sql查询列名和pojo的属性名一致方可映射成功。
通过测试发现:当所有列名和pojo属性名不一致,映射的对象为null
只要有一个 列名和pojo属性名一致,映射的对象不为null。
重点掌握:只要一个列名和一个属性名一致,该列就可以映射成功。
resultMap
当列名和pojo属性名不一致时,可以通过resultMap定义列名和属性名的一个对应关系,完成映射。
resultType
输出简单类型
需求:用户综合查询功能,要分页显示需要获取符合查询条件的记录总数
实现mybatis查询结果映射成int型。
当查询结果集只有一条记录且一列时可以将结果集映射为一个java简单基本类型。
mapper.xml
mapper.java
总结
输出pojo对象和输出pojo列表在sql中定义的resultType是一样的。返回单个pojo对象要保证sql查询出来的结果集为单条,内部使用session.selectOne方法调用,mapper接口使用pojo对象作为方法返回值。
返回pojo列表表示查询出来的结果集可能为多条,内部使用session.selectList方法,mapper接口使用List<pojo>对象作为方法返回值。
resultMap
当列名和pojo属性名不一致时,可以通过resultMap定义列名和属性名的一个对应关系,完成映射resultMap还可以实现一些高级映射(一对一、一对多。)。
mapper.xml
resultMap定义
c0a4
注意:定义resultMap也要指定一个映射的pojo类型。
mapper.java
动态sql
什么是动态sql
mybatis重点是对sql语句是灵活的组织,由程序员编写sql语句,通过配置方式完成输入、输出映射。mybatis通过标签拼接sql语句,去组织sql 语句。
需求
对用户综合查询statement定义进行优化,使用动态sql。1、用户查询条件可以灵活拼接,当用户输入查询条件再拼接到sql中。
2、对mapper.xml中重复的sql抽取统一维护。
if判断
解决:用户查询条件可以灵活拼接,当用户输入查询条件再拼接到sql中sql片段
解决:对mapper.xml中重复的sql抽取统一维护定义
引用 sql片段
foreach
mybatis使用foreach循环遍历输入的参数。需求
根据用户多个id查询用户信息。实现方式:
SELECT * FROM USER WHERE sex = '1' AND id IN (1,10,16)
也可以:
SELECT * FROM USER WHERE sex = '1' AND (id=1 OR id=10 OR id=16)
po类修改
使用queryUserVo包括对象使用List传递多个idmapper.xml
相关文章推荐
- Mybatis (五)输入映射 HashMap输出 传递pojo包装 resultType resultMap 动态sql
- Mybatis输入映射parameterType与输出映射ResultMap是Map类型的解决方案
- MyBatis之输入与输出(resultType、resultMap)映射
- Mybatis - SqlMapConfig.xml , 输入映射 ,输出映射 ,动态sql ,sql片段
- MyBatis之输入(parameterType)与输出(resultType、resultMap)映射
- MyBatis输入映射、输出映射、动态SQL、关联关系、Spring集成加强笔记
- 【Mybatis框架】输出映射-resultType与resultMap
- Mybatis 输出映射-- resultType resultMap
- 【Mybatis框架】输出映射-resultType与resultMap
- 动态sql片段 resultMap map多个参数 if拼接 注解 where set 分页查询
- Mybatis学习(4)输入映射、输出映射、动态sql
- mybatis的动态sql-if和sql片段 foreach的使用
- 输入(parameterType)与输出(resultType、resultMap)映射
- 【Mybatis框架】输出映射-resultType与resultMap
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
- MyBatis(三)配置文件,输入输出映射,动态SQL
- MyBatis学习笔记(五)输入(parameterType)与输出(resultType、resultMap)映射
- 后台(40)——MyBatis输出映射resultType以及resultMap
- Mybatis中输出映射resultType与resultMap的区别
- Mybatis中输出映射-resultType与resultMap的区别