Mybatis复习笔记(sql)

Mapper

insert
1.parameterType: 参数类型,对象和可以直接取内部属性
2.useGeneratedKeys: 使用自增主键
3.keyProperty="id" : 返回自增主键 id, id为返回对象属性键名
4.selectKey返回非自增主键
	使用mysql的uuid()函数生成主键,需要修改表中di字段类型为String,长度设置成35位。
	执行顺序:
		先通过UUID()查询到主键,将主键输入到sql语句中
	执行uuid()顺序相对于insert语句之前执行
	<selectKey keyProperty="id" order="before" resultType="java.lang.String">
		select uuid()
	</selectKey>
	insert into  *******
select
1.返回对象 : resultType="对象全类名"
2.返回集合 : resultType="对象全类名"  //mybatis会自动返回对象集合
3.返回Map单条记录 :resultType="map"
4.返回Map多条记录 : 需要使用注解@MapKey()指定查询出来的数据哪个为map的key
resultMap:自定义结果集,不能和resultType一起用
用来指定数据库数据的映射规则
# 普通resultMap查询
<resultMap type="返回类型全类名" id="被其他标签引用的id">
	<id column="数据库列名" property="对应实体类属性名"/>
	<result column="数据库列名" property="对应实体类属性名"/>
</resultMap>

# 关联查询 之 级联查询
# 查询时联表查询
<resultMap type="返回类型全类名" id="被其他标签引用的id">
	<id column="数据库列名" property="对应实体类属性名"/>
	<result column="数据库列名" property="对应实体类属性名"/>
	<result column="数据库列名" property="对应实体类对象属性.属性名"/>
</resultMap>

# 关联查询 之 association
<resultMap type="返回类型全类名" id="被其他标签引用的id">
	<id column="数据库列名" property="对应实体类属性名"/>
	<result column="数据库列名" property="对应实体类属性名"/>
	<association property="联合对象属性名" javaType="联合对象全类名">
		<id column="数据库列名" property="对应实体类属性名"/>
		<result column="数据库列名" property="对应实体类属性名"/>
	</association>
</resultMap>

# 关联查询 之 association分布查询
# 查询时分布查询 association查询第二步
<resultMap type="返回类型全类名" id="被其他标签引用的id">
	<id column="数据库列名" property="对应实体类属性名"/>
	<result column="数据库列名" property="对应实体类属性名"/>
	<association property="联合对象属性名" select="查询方法(另外一个有<select标签的查询方法>)">
		<id column="数据库列名" property="对应实体类属性名"/>
		<result column="数据库列名" property="对应实体类属性名"/>
	</association>
</resultMap>

# 关联查询 之 association分布查询延迟加载
全局配置文件中 settings标签中开启延迟加载和按需加载
lazyLoadingEnabled:延迟加载的全局开关
aggressiveLazyLoading:开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载

# 关联查询之 collection 查询内置对象集合
# 也可以开启分布查询延迟加载 使用select属性传入查询方法,map集合需要指定mapKey  column属性
# fetchType属性指定是否开启延迟加载   eager立即  lazy延迟
<resultMap type="返回类型全类名" id="被其他标签引用的id">
	<id column="数据库列名" property="对应实体类属性名"/>
	<result column="数据库列名" property="对应实体类属性名"/>
	<collection property="联合集合属性名" ofType="指定集合中的对象全类名">
		<id column="数据库列名" property="对应实体类属性名"/>
		<result column="数据库列名" property="对应实体类属性名"/>
	</association>
</resultMap>

# 鉴别器
discriminator mybatis可以根据鉴别器判断某列的值,根据值改变封装行为
	比如,查出来是男就显示名字,女就显示部门
	在resultMap中使用
	<discriminator javaType="string" column="gender">
		<case value="0" resultType="全类名">
			<result>
		</case>
	</discriminator>

动态sql

动态拼接sql

# if 根据参数判断 是否添加语句
<if test="id!=null">
	id=#{id}
</if>
# where 自动删除每个动态sql开头多出来的and或者or
# trim自定义字符串截取
	属性 
	prefix 前缀 包含体中所有语句组合之后的语句前加个前缀
	prefixOverrides 前缀覆盖,用来覆盖每条语句前多余的字符
	suffix	后缀,包含体中所有语句组合之后的语句后加个后缀
	suffixOverrides	后缀覆盖,用来覆盖每条语句后多余的字符

# choose (when otherwise)  "=="  switch (case default)
<choose>
	<when test="id!=null">
		id = #{id}
	</when>
	<otherwise>
	</otherwise>
</choose>

# set 修改方法中使用,结合if
	<set>
		<if test="">
		</if>
	</set>
	where id = #{id}
	
# foreach
	属性
	collection 指定要遍历的集合,list参数会被特殊处理为map,map的key就是list
	item 定义每次遍历取出值赋值的名称
	separator 定义每个元素之间的分隔符
	open 将open中的值拼接到遍历的属性之前
	close 将close中的值拼接到遍历的属性之后
	index 索引
	#{item}
	in
	<foreach collection="ids" item="id" separator="," open="(" close=")">
	#{id}
	</foreach>

	批量查询
	values(),()

# bind标签可以在select等标签中定义属性
<bind name="" value="" />  value中可以使用ognl表达式,就像el表达式的值一样
可以使用#{name}使用

concat函数可以拼接模糊查询  concat("%",#{id},"%")

# 公共sql
<sql id="">
</sql>
## 引用公共sql
<include refid="sqlid">
	<property name="" value="">  //可以在sql中使用#{name}调用
</include>
	

mybatis内置参数

1._parameter:
	如果只有一个参数
		_parameter就是这个参数
	如果是一个对象
		_parameter就是对象自动封装的map
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值