文章目录
学习目标
-
(1)ResultMap(重要)
查询数据封装的原理 字段名和成员名不一致 ResultMap标签
-
(2)动态sql(重要)
动态sql-if标签 动态sql-foreach标签
-
(3)关联查询(重要)
关联查询-一对一 关联查询-一对多 关联查询-综合案例
一、ResultMap
1、ResultMap有什么用?
建立查询字段与实体类成员变量的映射关系
- 字段名与变量名不一致,可以赋值
如果查询字段和数据库字段不符,mybatis也可以给它赋值
- 实现一对多,多对多的查询
2、字段名和成员名不一致
- (1)为什么id属性能被Mybatis赋值?
》底层使用id生成setId
》使用反射调用setId方法,setId(10) 方法内完成赋值 id = 10 - (2)为什么user_id属性能被Mybatis赋值?
》底层使用user_id生成setUser_id
》使用反射调用setUser_id方法,类中只有setUserId - (3)所以 为什么强调表与类的对应关系?
》 字段名和成员名要一致
3、ResultMap标签映射关系,ResultMap使用
<!--
id是唯一标识,给select 的resultMap属性使用
-->
<resultMap id="OrderMap" type="com.smp.bean.Order">
<!-- 主键部分-->
<id column="id" property="id"/>
<!-- 非主键部分-->
<result column="user_id" property="userId"/>
<!--查询字段名与类的变量名一样的可以不写 -->
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
</resultMap>
<select id="findAll" resultMap="OrderMap">
select * from `order`;
</select>
二、动态标签介绍
- (1)动态标签是什么?
由于mybatis将sql与java代码分离(sql写在xml中)
if标签,forEach标签 - (2)动态标签有什么用?
用来根据数据的不同来生成对应的sql - (3)应用场景
高级搜索功能
搜索有多个条件,不是每个条件输入框都有值 ,此时需根据值来生成where条件
1、动态sql-if标签与where标签
- (1)if标签
if标签:可以判断传入的参数是否为空,如果不为空则拼接sql - (2)where标签:添加了where标签
1:不用在初始sql后边写where 1=1
2: 不用在第一个拼接的sql前写and,但是你也可以手动写and
UserDao.xml
<select id="findByUser" resultType="user">
select * from user
<where>
<if test="username !=null and username !='' ">
and username like #{
username}
</if>
<if test="address !=null and address !='' ">
and address like #{
address}
</if>
<if test="sex !=null and sex !='' ">
and sex = #{
sex}
</if>
</where>
</select>
Test02.java
p