mybatis学习笔记(二)

传递pojo对象

  1. 新建包装pojo对象QueryVo
    public class QueryVo {
    	
    	//用户对象
    	private User user;
    
    	public User getUser() {
    		return user;
    	}
    
    	public void setUser(User user) {
    		this.user = user;
    	}
    }
  1. 映射文件与sql
    <!-- 1、resultType:如果要返回数据集合,只需设定为每一个元素的数据类型
    		 2、 包装的pojo取值通过 "."来获取
    	-->
    	<select id="getUserByQueryVo" parameterType="queryvo" resultType="com.mybatis.pojo.User">
    		<!-- SELECT * FROM USER WHERE username LIKE #{name} -->
    		SELECT * FROM USER WHERE username LIKE '%${user.username}%'
    	</select>
  1. 新增接口方法
  2. 增加测试方法,完成测试

resultType(输出类型)

  • 输出resultMap
    当数据库中的字段名和实体类中的属性名不同时,使用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>

if标签的使用

当进行用户的多条件查询时,使用 if标签对sql语句进行拼接
注意在where之后加上1=1,或者其他恒等的条件

<!-- 演示动态sql-if标签的使用情景 -->
	<select id="getUserByPojo" parameterType="user" resultType="com.mybatis.pojo.User">
		select `id`,
		`username`,
		`birthday`,
		`sex`,
		`address`
		 from `user` 
		 where 1=1
		 <if test="username != null and username != ''">
			and username like '%${username}%'
		 </if>
		 <if test="sex != null and sex != ''">
		 	and sex=#{sex}
		 </if>
	</select>

where标签的使用

使用where标签将if标签包裹。where标签自动补全了where语句,不用再写恒等条件,并且可以处理多余的and连接

<select id="getUserByPojo" parameterType="user" resultType="com.mybatis.pojo.User">
		select `id`,
		`username`,
		`birthday`,
		`sex`,
		`address`
		 from `user` 
		 <where>
		 <if test="username != null and username != ''">
			and username like '%${username}%'
		 </if>
		 <if test="sex != null and sex != ''">
		 	and sex = #{sex}
		 </if>
		 </where>
	</select>

sql片段的抽取

<!-- 定义 sql片段抽取 -->
	<sql id="user_sql">
		`id`,
		`username`,
		`birthday`,
		`sex`,
		`address`
	</sql>
	<select id="getUserById" parameterType="int" resultType="com.mybatis.pojo.User">
		select 
		<!-- sql片段使用,refid引用定义好的sql片段id -->
		<include refid="user_sql"/>
		 from `user` 
		 where id=#{id}
	</select>

foreach标签

  • foreach循环标签
    collection:要遍历的集合,来源入参
    open:循环开始前的sql
    separator:分隔符
    close:循环结束拼接的sql
<!-- 演示动态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>

一对一关联查询resultType的使用

  1. 新建OrderUser的pojo,继承自Order。
package com.mybatis.pojo;

import java.util.Date;
public class OrderUser extends Order{
	private String username;
	private String address;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "OrderUser [username=" + username + ", address=" + address + ", getId()=" + getId() + ", getUserId()="
				+ getUserId() + ", getNumber()=" + getNumber() + ", getCreatetime()=" + getCreatetime() + ", getNote()="
				+ getNote() + "]";
	}
}
  1. 修改order的映射文件,新增查询方法getOrderUser。
<!-- 一对一关联查询resultType的使用 -->
	<select id="getOrderUser" resultType="orderuser">
		SELECT 	o.`id`,
				o.`user_id`,
				o.`number`,
				o.`createtime`,
				o.`note`,
		        u.`username`,
		        u.`address`
		FROM `order` o
		left join `user` u on u.id=o.user_id;
	</select>
  1. 添加接口,完成测试

一对一关联查询resultMap的使用

  1. 改造order的pojo
  2. 修改order的映射文件
<!-- 一对一关联查询-resultMap -->
	<resultMap type="order" id="order_user_map">
		<!-- 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"/>
		
		<!-- association:配置一对一关联
			 property:绑定的用户属性
			 javaType:属性数据类型,支持别名
		-->
		<association property="user" javaType="com.itheima.mybatis.pojo.User">
			<id property="id" column="user_id"/>
			
			<result property="username" column="username"/>
			<result property="address" column="address"/>
			<result property="sex" column="sex"/>
		</association>
	</resultMap>
	<!-- 一对一关联查询-使用resultMap -->
	<select id="getOrderUser2" resultMap="order_user_map">
		SELECT
		  o.`id`,
		  o.`user_id`,
		  o.`number`,
		  o.`createtime`,
		  o.`note`,
		  u.`username`,
		  u.`address`,
		  u.`sex`
		FROM `order` o
		LEFT JOIN `user` u
		ON u.id = o.`user_id`
	</select>

添加接口方法与测试方法,完成测试。

一对多关联查询resultMap的使用

  1. 改造user的pojo
  2. 修改user的映射文件
    <!-- 一对多关联查询 -->
    	<resultMap type="user" id="user_order_map">
    		<id property="id" column="id" />
    		<result property="username" column="username" />
    		<result property="birthday" column="birthday" />
    		<result property="address" column="address" />
    		<result property="sex" column="sex" />
    		<result property="uuid2" column="uuid2" />
    		
    		<!-- collection:配置一对多关系
    			 property:用户下的order属性
    			 ofType:property的数据类型,支持别名
    		-->
    		<collection property="orders" ofType="order">
    			<!-- id标签用于绑定主键 -->
    			<id property="id" column="oid"/>
    			<!-- 使用result绑定普通字段 -->
    			<result property="userId" column="id"/>
    			<result property="number" column="number"/>
    			<result property="createtime" column="createtime"/>
    		</collection>
    
    	</resultMap>
    	<!-- 一对多关联查询 -->
    	<select id="getUserOrder" resultMap="user_order_map">
    		SELECT
    		u.`id`,
    		u.`username`,
    		u.`birthday`,
    		u.`sex`,
    		u.`address`,
    		u.`uuid2`,
    		o.`id` oid,
    		o.`number`,
    		o.`createtime`
    		FROM `user` u
    		LEFT JOIN `order` o
    		ON o.`user_id` = u.`id`
    	</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值