MyBatis精品教程资料:2.SQL映射文件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
</select>
表示查询出来的属性对应的值赋 给实体对象的哪个属性
从数据库中查询的列名或者 别名
一个外部resultMap的id,表示返回结 果映射到哪一个resultMap上
演示示例3:使用resultMap实现用户信息查询
(用户表和角色表查询)
10/42
select 7-6
resultType :直接表示返回类型
parameterType
传入SQL语句的参数类型
resultType
SQL语句返回值类型的完整类名或别名
演示示例1:根据用户名对用户表进行模糊查询
6/42
select 7-2 按条件查询用户表,若多条件情况下如何处理?
问题
提示 传入多个参数进行入参? 封装成User对象进行入参?
7/42
基本数据类型 复杂数据类型
resultMap :对外部resultMap的引用
应用场景:
数据库字段信息与对象属性不一致 复杂的联合查询,自由控制映射结果
二者不能同时存在,本质上都是Map数据结构
11/42
select 7-7
问题 使用resultMap如何实现自由灵活的控制映射结果,从而达 到只对关心的属性进行赋值填充?
select 7-3
parameterType
基础数据类型
int、String、Date等 只能传入一个,通过#{参数名}即可获取传入的值
复杂数据类型
Java实体类、Map等 通过#{属性名}或者#{map的keyName}即可获取传入值
演示示例2:改造用户表的查询操作-封装对象入参
SQL映射文件
本章任务 完成超市订单系统-用户管理功能模块之用户的增删改 查实现
2/42
本章目标 掌握通过SQL映射文件进行增删改查 掌握参数的使用 掌握resultMap 了解Cache的使用
3/42
SQL映射的XML文件
MyBatis 真正的强大在于映射语句,专注于SQL,功能强大,SQL 映射的配置却是相当简单
</resultMap> <select id="getUserList" resultMap="userList" parameterType="User">
select u.*,r.roleName from smbms_user u,smbms_role r where u.userName like CONCAT (‘%’,#{userName}, ‘%’) and u.userRole = #{userRole} and u.userRole = r.id
8/42
select 7-4
问题
按条件查询得到用户表列表,需要显示指定字段,并显示用户角色(中文表述) 用户表中的userRole字段记录的是角色id,不是其对应的名称,如何解决? 修改User的属性,增加userRoleName属性 修改查询SQL语句,连表查询 resultMap-自定义映射结果
禁止自动匹配
演示示例3:使用resultMap实现用户信息查询
(用户表和角色表查询)
12/42
学员操作—实现订单表的查询
需求说明:
练习
实现按条件查询订单表,查询条件如下
商品名称(模糊查询)
供应商(供应商id)
是否付款
查询结果列显示:订单编码、商品名称、供应商名称、账单 金额、是否付款、创建时间
SQL映射文件的几个顶级元素(按照定义的顺序)
mapper – namespace cache – 配置给定命名空间的缓存 cache-ref – 从其他命名空间引用缓存配置 resultMap –用来描述数据库结果集和对象的对应关系 sql – 可以重用的SQL块,也可以被其他语句引用 insert – 映射插入语句 update – 映射更新语句 delete – 映射删除语句 select – 映射查询语句
示例
<select id="getUserList" …
…… </select>
</mapper>
5/42
select 7-1
select是MyBatis中最常用的元素之一 select语句有很多属性可以详细配置每一条语句
id
命名空间中唯一的标识符 接口中的方法与映射文件中的SQL语句id一一对应
提示 修改Bill.java,增加属性providerName 编写SQL查询语句(连表查询) 创建resultMap-自定义映射结果,并在select中引用
完成时间:30分钟
13/42
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
提示
9/42
select 7-5
resultMap
示例 描述如何将结果集映射到Java对象
<resultMap type="User" id="userList"> <result property="id" column="id"/> <result property="userCode" column="userCode"/> <result property="userName" column="userName"/> <result property="userRole" column=“userRole"/> <result property="userRoleName" column="roleName"/>
分析 resultMap自动映射匹配前提:字段名与属性名一致
resultMap的自动映射级别-autoMappingBehavior
PARTIAL(默认):自动匹配所有
<settings> <setting name="autoMappingBehavior" value="NONE"/>
</settings>
4/ห้องสมุดไป่ตู้2
mapper元素 mapper
namespace:命名空间
namespace和子元素的id联合保证唯一,区别不同的 mapper
绑定DAO接口
namespace的命名必须跟某个接口同名 接口中的方法与映射文件中SQL语句id一一对应
<mapper namespace="cn.smbms.dao.user.UserMapper">
表示查询出来的属性对应的值赋 给实体对象的哪个属性
从数据库中查询的列名或者 别名
一个外部resultMap的id,表示返回结 果映射到哪一个resultMap上
演示示例3:使用resultMap实现用户信息查询
(用户表和角色表查询)
10/42
select 7-6
resultType :直接表示返回类型
parameterType
传入SQL语句的参数类型
resultType
SQL语句返回值类型的完整类名或别名
演示示例1:根据用户名对用户表进行模糊查询
6/42
select 7-2 按条件查询用户表,若多条件情况下如何处理?
问题
提示 传入多个参数进行入参? 封装成User对象进行入参?
7/42
基本数据类型 复杂数据类型
resultMap :对外部resultMap的引用
应用场景:
数据库字段信息与对象属性不一致 复杂的联合查询,自由控制映射结果
二者不能同时存在,本质上都是Map数据结构
11/42
select 7-7
问题 使用resultMap如何实现自由灵活的控制映射结果,从而达 到只对关心的属性进行赋值填充?
select 7-3
parameterType
基础数据类型
int、String、Date等 只能传入一个,通过#{参数名}即可获取传入的值
复杂数据类型
Java实体类、Map等 通过#{属性名}或者#{map的keyName}即可获取传入值
演示示例2:改造用户表的查询操作-封装对象入参
SQL映射文件
本章任务 完成超市订单系统-用户管理功能模块之用户的增删改 查实现
2/42
本章目标 掌握通过SQL映射文件进行增删改查 掌握参数的使用 掌握resultMap 了解Cache的使用
3/42
SQL映射的XML文件
MyBatis 真正的强大在于映射语句,专注于SQL,功能强大,SQL 映射的配置却是相当简单
</resultMap> <select id="getUserList" resultMap="userList" parameterType="User">
select u.*,r.roleName from smbms_user u,smbms_role r where u.userName like CONCAT (‘%’,#{userName}, ‘%’) and u.userRole = #{userRole} and u.userRole = r.id
8/42
select 7-4
问题
按条件查询得到用户表列表,需要显示指定字段,并显示用户角色(中文表述) 用户表中的userRole字段记录的是角色id,不是其对应的名称,如何解决? 修改User的属性,增加userRoleName属性 修改查询SQL语句,连表查询 resultMap-自定义映射结果
禁止自动匹配
演示示例3:使用resultMap实现用户信息查询
(用户表和角色表查询)
12/42
学员操作—实现订单表的查询
需求说明:
练习
实现按条件查询订单表,查询条件如下
商品名称(模糊查询)
供应商(供应商id)
是否付款
查询结果列显示:订单编码、商品名称、供应商名称、账单 金额、是否付款、创建时间
SQL映射文件的几个顶级元素(按照定义的顺序)
mapper – namespace cache – 配置给定命名空间的缓存 cache-ref – 从其他命名空间引用缓存配置 resultMap –用来描述数据库结果集和对象的对应关系 sql – 可以重用的SQL块,也可以被其他语句引用 insert – 映射插入语句 update – 映射更新语句 delete – 映射删除语句 select – 映射查询语句
示例
<select id="getUserList" …
…… </select>
</mapper>
5/42
select 7-1
select是MyBatis中最常用的元素之一 select语句有很多属性可以详细配置每一条语句
id
命名空间中唯一的标识符 接口中的方法与映射文件中的SQL语句id一一对应
提示 修改Bill.java,增加属性providerName 编写SQL查询语句(连表查询) 创建resultMap-自定义映射结果,并在select中引用
完成时间:30分钟
13/42
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
提示
9/42
select 7-5
resultMap
示例 描述如何将结果集映射到Java对象
<resultMap type="User" id="userList"> <result property="id" column="id"/> <result property="userCode" column="userCode"/> <result property="userName" column="userName"/> <result property="userRole" column=“userRole"/> <result property="userRoleName" column="roleName"/>
分析 resultMap自动映射匹配前提:字段名与属性名一致
resultMap的自动映射级别-autoMappingBehavior
PARTIAL(默认):自动匹配所有
<settings> <setting name="autoMappingBehavior" value="NONE"/>
</settings>
4/ห้องสมุดไป่ตู้2
mapper元素 mapper
namespace:命名空间
namespace和子元素的id联合保证唯一,区别不同的 mapper
绑定DAO接口
namespace的命名必须跟某个接口同名 接口中的方法与映射文件中SQL语句id一一对应
<mapper namespace="cn.smbms.dao.user.UserMapper">