MyBatis输入映射&输出映射&动态SQL

目录

 

一.parametertype 输入类型

1.1 传递简单类型

1.2 传递pojo对象

1.3 传递pojo包装对象

二.输出类型

2.1 输出简单类型

2.2 输出pojo对象

2.3 输出pojo列表

三.resultMap

四.动态SQL

4.1 if标签的使用

4.2 Where 标签的使用

4.3 sql片段

4.4 Foreach


一.parametertype 输入类型

1.1 传递简单类型

参考 https://blog.csdn.net/qq_30162219/article/details/87522219

1.2 传递pojo对象

参考 https://blog.csdn.net/qq_30162219/article/details/87522219

1.3 传递pojo包装对象

新建包装类

public class QueryVo {
	
	//用户对象
	private User user;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}

需求:根据user对象中的name属性查询对应的user集合

配置xml文件

<!-- 1、resultType:如果要返回数据集合,只需设定为每一个元素的数据类型
		 2、 包装的pojo取值通过 "."来获取
	-->
	<select id="getUserByQueryVo" parameterType="queryvo" resultType="mybatis.pojo.User">
		<!-- SELECT * FROM USER WHERE username LIKE #{name} -->
		SELECT * FROM USER WHERE username LIKE '%${user.username}%'
	</select>

测试类

	@Test
	public void testGetUserByQueryVo() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		//获取接口的代理人实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		QueryVo vo = new QueryVo();
		User user2 = new User();
		user2.setUsername("张");
		
		vo.setUser(user2);
		
		List<User> list = userMapper.getUserByQueryVo(vo);
		for (User user : list) {
			System.out.println(user);
		}
		sqlSession.close();
	}

二.输出类型

2.1 输出简单类型

<!-- 查询用户总记录数,演示返回简单类型 -->
	<select id="getUserCount" resultType="int">
		SELECT COUNT(1) FROM USER
	</select>

2.2 输出pojo对象

参考 https://blog.csdn.net/qq_30162219/article/details/87522219

2.3 输出pojo列表

参考 https://blog.csdn.net/qq_30162219/article/details/87522219

三.resultMap

使用情形:当数据库中的字段与实体类的属性字段不一致。

演示基于完成订单列表的查询,由user_id字段与pojo属性不一致时引出的resultMap。

<!-- resultMap入门
		 type:映射成的pojo类型
		 id:resultMap唯一标识
	-->
	<resultMap type="order" id="orderMap">
		<!-- id标签用于绑定主键 -->
		 <id property="id" column="id"/>
		
		<!-- 使用result绑定普通字段 -->
		<result property="userId" column="user_id"/>
		<result property="number" column="number"/>
		<result property="createtime" column="createtime"/>
		<result property="note" column="note"/>
	</resultMap>
	<!-- 使用resultMap -->
	<select id="getOrderListResultMap" resultMap="orderMap">
		SELECT * FROM `order`
	</select>

四.动态SQL

4.1 if标签的使用

演示基于完成用户列表查询功能,由多查询条件拼装引出if标签。

<!-- 演示动态sql-if标签的使用情景 查询条件id 和 username可能为空-->
	<select id="getUserByWhere" parameterType="user" resultType="mybatis.pojo.User">
		<!-- SELECT * FROM USER WHERE username LIKE '%${username}%' and id = #{id} -->
		SELECT * FROM USER where 1 = 1
		<!-- if标签的使用 -->
		<if test="id != null">
			and id = #{id}
		</if>
		<if test="username != null and username != ''">
			and username LIKE '%${username}%'
		</if>
	</select>

4.2 Where 标签的使用

<!-- 演示动态sql-where标签的使用情景 -->
	<select id="getUserByWhere2" parameterType="user"
		resultType="com.itheima.mybatis.pojo.User">
		<!-- include:引入sql片段,refid引入片段id -->
		SELECT
		*
		FROM USER
		<!-- where会自动加上where同处理多余的and -->
		<where>
			<!-- if标签的使用 -->
			<if test="id != null">
				and id = #{id}
			</if>
			<if test="username != null and username != ''">
				and username LIKE '%${username}%'
			</if>
		</where>
</select>

4.3 sql片段

<!-- 
        演示通过select * 不好引出查询字段名,抽取共用sql片段。
        sql片段 定义,id:片段唯一标识 -->
	<sql id="user_column">
		`id`,
		`username`,
		`birthday`,
		`sex`,
		`address`,
		`uuid2`
	</sql>

SELECT
		<!-- sql片段的使用:include:引入sql片段,refid引入片段id -->
		<include refid="user_column" />
		FROM USER

4.4 Foreach

当查询条件为多个相同类型的值 例如 xxxx in (x,x,x,x);可以使用该标签

修改包装类添加参数集合

public class QueryVo {

	private User user;
	
	private List<Integer> ids;
	
	public List<Integer> getIds() {
		return ids;
	}

	public void setIds(List<Integer> ids) {
		this.ids = ids;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	
	
}
<!-- 演示动态sql-foreach标签的使用情景 -->
	<select id="getUserByIds" parameterType="queryvo"
		resultType="com.itheima.mybatis.pojo.User">
		
		SELECT
		*
		FROM USER
		<!-- where会自动加上where同处理多余的and -->
		<where>
			<!-- id IN(1,10,25,30,34) -->
			<!-- foreach循环标签 
				 collection:要遍历的集合,来源入参 
				 open:循环开始前的sql 
				 separator:分隔符 
				 close:循环结束拼接的sql
			-->
			<foreach item="uid" collection="ids" open="id IN(" separator=","
				close=")">
				#{uid}
			</foreach>		</where>
	</select>

猜你喜欢

转载自blog.csdn.net/qq_30162219/article/details/87539074