前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >02-SQLl映射文件

02-SQLl映射文件

作者头像
软件小生活
发布2021-10-20 15:43:45
6820
发布2021-10-20 15:43:45
举报
文章被收录于专栏:软件小生活软件小生活

第二章SqlMapper映射文件

0.课程内容大纲

1.SqlMapper映射文件简介:

lMyBatis 真正的强大在于映射语句,专注于SQL,功能强大,SQL映射的配置却是相当简单

2.SqlMapper映射文件的节点顺序

2.1.mapper元素的namespace

作用:

使用SqlSession调用mybatis方法直接操作数据库

namespace的命名空间的名称 + sql语句的id名 组合起来,构成一个唯一的id。用于区分不用的mapper

使用mapper接口方式操作数据库

namespace名称 必须等于 接口的全限定类名,保证mybatis能正常找到mapper接口定义方法

2.2.select标签

Select标签专门用来查询数据库表中的信息,用法和普通的sql语句中的select一致

属性名

作用

id

给sql语句取一个别名,方便后续调用

parameterType

用户传入的参数类型

resultType

查询到的数据结果集返回类型

2.2.1.案例一:根据用户名对用户表进行查询
2.2.2.案例二:根据用户名对用户表进行模糊查询
2.2.3.案例三:根据多个条件来查询用户表信息

思路:

u(1)将用户传入的多个参数打包封装成一个对象(User)

u(2)用户传入多个参数

【parameterType】

基础数据类型:

int、String、Date等

只能传入一个,通过#{参数名}即可获取传入的值

复杂数据类型:

Java实体类、Map等

通过#{属性名}或者#{map的keyName}即可获取传入值

【注意点】:

(1)parameterType接收用户传入参数的时候,如果只是基本数据类型,那么占位符(#{变量名}),可以随便写。

(2)parameterType接收用户传入参数的时候,如果是复杂类型的时候,那么占位符(#{变量名}),需和entity实体中属性以及数据表中的字段一致。

<< span="">select id="selectUserByNameAndage" parameterType="com.shop.domain.User" resultType="com.shop.domain.User"> select * from tb_user where name like #{name} and age=#{age} select>SqlSession session = sqlSession.openSession(true); UserMapper userMapper = session.getMapper(UserMapper.class); User user = new User(); user.setName("%王%"); user.setAge(100); Listlist = userMapper.selectUserByNameAndage(user); for (User user2 : list) { System.out.println(user2); } session.close(); << span="">select id="selectUserByNameAndage2" parameterType="java.util.Map" resultType="com.shop.domain.User"> select * from tb_user where name like #{name} and age=#{age} select> UserMapper userMapper = session.getMapper(UserMapper.class); MapuserMap = new HashMap(); userMap.put("name", "%王%"); userMap.put("age", 100); Listlist = userMapper.selectUserByNameAndage2(userMap); for (User user2 : list) { System.out.println(user2); } session.close();

2.2.4.订单查询问题

myabtis能帮我们自动将数据提交到数据库中,前提一定是java实体对象中属性名称要数据库表字段名称之间的映射关系是一致的

思考:如果不一致,结果会怎么样?

解决方式1:

<< span="">mapper namespace="com.shop.mapper.OrderMapper"> << span="">select id="selectOrderList" resultType="com.shop.domain.Order"> SELECT id,user_id as userId,number,createtime,note from `order` select>mapper>

解决方式2:

使用resultMap标签进行映射

<< span="">resultMap type="com.shop.domain.Order" id="orderMap"> << span="">id property="id" column="id"/> << span="">result property="userId" column="user_id"/>resultMap> << span="">select id="selectOrderList" resultMap="orderMap"> SELECT id,user_id,number,createtime,note from `order` select>mapper>

思考:既然只有一个字段和实体不一致,那可以不以只映射一个不匹配的呢???

答案:(YES/NO)

2.2.5. resultType 和 resultMap区别?(面试题)

resultType :直接表示返回类型

基本数据类型

复杂数据类型

resultMap :对外部resultMap的引用

应用场景:

数据库字段信息与对象属性不一致

复杂的联合查询,自由控制映射结果

面试题:二者可以同时存在吗???

答案:(YES/NO)

2.3.insert标签

专门用来插入数据到数据库的表中的

lid

lparameterType

注意:

uinsert、update、delete元素均没有resultType属性

uinsert、update、delete元素都需要配合事务进行操作

mybatis默认帮我们自动打开了事物,但是提交事务并没有,所以我们需要自己控制

u手动去commit()提交

u在调用opensession()的时候,设置true或者false,让mybatis帮我们提交

修改mybatisTools -> 封装getSession(boolean isCommit)的重载

2.4.update标签

专门用来更新数据到数据库表中的

lid

lparameterType

2.4.1.案例一:修改用户表的个人信息

2.4.2.案例一:修改用户的密码

思考:用户修改密码功能和上面的修改个人信息功能有什么不同呢?

l用户修改密码功能,参数是比较固定的,就是两个

l用户修改个人信息的功能参数非常之多

解决方案:对于上面的两种功能,我们都可以将所有需要被修改的参数统一打包封装成一个对象(User)来进行操作,但是开发中,一般对于参数较为固定的,我们一般不使用封装到对象中进行处理,而是直接传入多个参数进去

为什么?

过3个以上的参数最好封装成对象入参(特别是在常规的增加和修改操作时,字段较多,封装成对象比较方便)

参数固定的业务方法,最好使用多参数入参

(这种方法比较灵活,代码的可读性高,可以清晰看出来这个接口方法的所需的参数是什么

并且对于固定的接口方法,参数一般是固定的,所以可以使用直接参数入参即可,无需封装对象,

比如修改个人密码的方法,根据ID删除用户的方法,根据id查看用户明细的方法,都可以采取这种方式)

如果要一次传入多个参数,就需要使用mybatis中提供的注解 - @Param

如何使用@param注解

1.在mapper接口方法中的每一个参数类型前面 加上@Param(“注解名”)

2.Mapper文件中的sql语句中的占位符参数名也要和注解名称一致

2.5.delete标签

专门用来从数据库表中删除数据的

lid

lparameterType

2.5.1.案例一:根据用户的id删除用户的个人信息

3.ResultMap标签

3.1. ResultMap 基本用法

3.2.ResultMap的高级映射

案例1:根据用户角色id查询该角色下用户列表信息

association

复杂的类型关联,一对一

学员操作:

案例2: 获取指定用户的相关信息及其地址列表

Collection

复杂类型集合,一对多

内部嵌套

映射一个嵌套结果集到一个列表

学员操作:

4.mybatis的自动映射级别

在association和collection两个演示示例的基础上进行测试

在控制台输出没有在resultMap中进行匹配的属性,并观察输出结果

resultMap自动映射(autoMappingBehavior)的三个匹配级别

NONE

禁止自动匹配

PARTIAL(默认)

自动匹配所有属性,内部嵌套除外

FULL

自动匹配所有

5.mybatis在dao数据层使用技巧(小结)

uMyabtis是操作数据库的一种框架技术-是dao层的u使用mybatis操作数据库的方式有两种: (1)使用内置的增删改查方法 (2)使用mapper接口方式uMyBatis参数入参 @Param注解参数 封装成对象入参uDAO层接口方法常见的返回类型 Map、List等复杂数据类型 int(增删改)更新操作时,影响的数据行数

6.mybatis和hibernate框架应用场景?

Mybatis需要自己写Sql,可以自己优化性能,一般用于大型互联网电商

Hibetrnate完全自动映射,不需要写任何Sql,性能的不是很好,一般用于内网系统

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第二章SqlMapper映射文件
  • 0.课程内容大纲
  • 1.SqlMapper映射文件简介:
  • 2.SqlMapper映射文件的节点顺序
    • 2.1.mapper元素的namespace
      • 作用:
    • 2.2.select标签
      • 2.3.insert标签
        • 2.4.update标签
          • 2.4.1.案例一:修改用户表的个人信息
          • 2.4.2.案例一:修改用户的密码
        • 2.5.delete标签
          • 2.5.1.案例一:根据用户的id删除用户的个人信息
      • 3.ResultMap标签
        • 3.1. ResultMap 基本用法
          • 3.2.ResultMap的高级映射
            • 案例1:根据用户角色id查询该角色下用户列表信息
              • 学员操作:
                • 案例2: 获取指定用户的相关信息及其地址列表
                  • 学员操作:
                  • 4.mybatis的自动映射级别
                  • 5.mybatis在dao数据层使用技巧(小结)
                  • 6.mybatis和hibernate框架应用场景?
                  相关产品与服务
                  数据库
                  云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档