mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach

1 输入映射

  传递pojo包装对象 

   需求 

用户综合条件查询功能。 

使用mybatis实现用户查询列表,有很多查询条件(比如:商品信息、订单信息)。

如何将综合查询条件传到mybatisstatement中,要使用包装对象传这些参数。

 

1.1.2 定义一个包装对象

简单理解为:pojo包装了pojo

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第1张图片

 mapper.xml

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第2张图片

mapper.java

传递hashmap
Sql映射文件定义如下:

	

上边红色标注的是hashmap的key。

测试:
Public void testFindUserByHashmap()throws Exception{
		//获取session
		SqlSession session = sqlSessionFactory.openSession();
		//获限mapper接口实例
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//构造查询条件Hashmap对象
		HashMap map = new HashMap();
		map.put("id", 1);
		map.put("username", "管理员");
		
		//传递Hashmap对象查询用户列表
		Listlist = userMapper.findUserByHashmap(map);
		//关闭session
		session.close();
	}


1 输出映射 

1.1 resultTyperesultMap介绍 

 resultType

指定输出映射类型,包括:java简单类型 string/int/float...、包括自定义的pojo

如果指定自定义pojo,表示单条记录所映射pojo类型。

映射规则要求:sql查询列名和pojo的属性名一致方可映射成功。 

通过测试发现:当所有列名和pojo属性名不一致,映射的对象为null

只要有一个 列名和pojo属性名一致,映射的对象不为null

重点掌握:只要一个列名和一个属性名一致,该列就可以映射成功。

 

 

 resultMap 

当列名和pojo属性名不一致时,可以通过resultMap定义列名和属性名的一个对应关系,完成映射。 

 resultType

 输出简单类型

需求:

用户综合查询功能,要分页显示需要获取符合查询条件的记录总数

实现mybatis查询结果映射成int型。

当查询结果集只有一条记录且一列时可以将结果集映射为一个java简单基本类型。


mapper.xml

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第3张图片

mapper.java


 总结

输出pojo对象和输出pojo列表在sql中定义的resultType是一样的。

返回单个pojo对象要保证sql查询出来的结果集为单条,内部使用session.selectOne方法调用,mapper接口使用pojo对象作为方法返回值。

返回pojo列表表示查询出来的结果集可能为多条,内部使用session.selectList方法,mapper接口使用List对象作为方法返回值。

resultMap

当列名和pojo属性名不一致时,可以通过resultMap定义列名和属性名的一个对应关系,完成映射

 

resultMap 还可以实现一些高级映射(一对一、一对多。)。


mapper.xml

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第4张图片

resultMap定义

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第5张图片


注意:定义resultMap也要指定一个映射的pojo类型。

mapper.java


动态sql

什么是动态sql

mybatis重点是对sql语句是灵活的组织,由程序员编写sql语句,通过配置方式完成输入、输出映射。

mybatis通过标签拼接sql语句,去组织sql 语句。

 

需求

对用户综合查询statement定义进行优化,使用动态sql

1、用户查询条件可以灵活拼接,当用户输入查询条件再拼接到sql中。

2、对mapper.xml中重复的sql抽取统一维护。

 

 if判断

解决:用户查询条件可以灵活拼接,当用户输入查询条件再拼接到sql

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第6张图片


 sql片段

解决:对mapper.xml中重复的sql抽取统一维护

 定义

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第7张图片


引用 sql片段

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第8张图片
mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第9张图片

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传递多个id

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第10张图片

mapper.xml

mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach_第11张图片


你可能感兴趣的:(框架-mybatis,mybatis)