🛫更多ssm知识见SSM_面向CRUD编程专栏
🚕本博客总结自黑马程序员的ssm框架视频
🚒博主对于该知识尚在学习阶段
🚄如果发现存在问题请毫不吝啬的指出
🚀🚀扎哇太枣糕的博客主页🚀🚀
1 MyBatis初识
**下面都是官方的解答有些过于的生硬,按我个人理解就是MyBatis框架就是用来代替jabcTmplate的一个巨巨巨好用的持久层框架,其底层封装的东西比较多,所以开发起来就比较快速。**MyBatis是一个基于Java的持久层框架,它的内部封装了jdbc使得开发者只需要关注于SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。MyBatis通过xml或者注解的方式将要执行的各种statement配置起来,并通过Java对象和statement中的SQL的动态参数进行映射生成需要执行的SQL语句。最后MyBatis框架执行SQL语句并将结果映射成Java对象并返回,采用ORM(将实体类与数据库表进行映射)思想解决了实体与数据库映射的问题,对jdbc进行封装屏蔽了jdbc底层访问的细节直接完成数据库持久化操作。
1.1 MyBatis的开发步骤
MyBatis后期结合spring框架进行开发还是有一些小不同的,以下的开发步骤知识为了快速入门而学习,由简入难的学习步骤更加有利于知识点进行掌握。
第一步:导入相关依赖
第二步:创建实体类
第三步:创建mapper映射文件
** 第四步:**创建核心配置文件
测试类及结果:
1.2 mapper映射文件:
**映射文件包含的内容 **
增删改查操作
原始的jdbc默认事务完成之后进行提交,MyBatis的事务默认完成之后不提交。所以当数据进行增删改操作时,必须使用sqlsession.commit()进行手动提交。或者调用openSession方法创建sqlSession对象的时候传参为true,意味着每次更改自动提交。
1.3 核心配置文件
🤔environments标签
- transactionManager标签的Type值 - JDBC:直接使用JDBC的提交和回滚设置,依赖于从数据源得到的连接来进行事务的管理- MANAGED:几乎不用,了解即可
- dataSource标签的Type值 - UNPOOLED:不使用连接池,数据库的连接随着使用创建和释放- POOLED:使用连接池,创建一次,随用随取- JNDI:几乎不用,了解即可
😏Properties标签
用于加载外部的properties文件,获得数据源参数信息${}进行引用,配合上面的DataSource标签进行使用
😑typeAliases标签
为java类定义一个别名,这样的话就可以在mapper映射文件中使用别名指定参数类型和结果类型了,方便操作。
⚠ 核心配置文件中那么多标签是有顺序的,如果不按照规定的顺序配置标签的话,就会导致文件报错!!!
⚠ 除了自定义别名以外,MyBatis框架已经为一些常用类型设置好了别名,比如int、string、long、double………
😲mappers标签
用于加载mapper映射文件,暂时只用学习相对路径加载的这一种![](https://img-blog.csdnimg.cn/06f9e8a7f19748c8827f186540dc5e23.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5omO5ZOH5aSq5p6j57OV,size_18,color_FFFFFF,t_70,g_se,x_16)
2 MyBatis的dao层(mapper层)实现
2.1 代理开发方式
Mapper代理开发方式只需要编写Mapper接口,由MyBatis框架根据接口中定义的方法通过反射创建出相应的代理对象和接口的实现类方法。要想完成以上开发,需要遵循以下规范:
- 接口的全限名和mapper映射文件中的namespace相同
- 接口中方法名和mapper映射文件中的每个mapper标签的子标签的id相同
- 接口中方法的参数类型和mapper映射文件中的每个mapper标签的子标签的parameterType相同
- 接口中方法的返回值和mapper映射文件中的每个mapper标签的子标签的resultType相同
开发步骤:
** 🥓代理开发最主要的就是上面的四个规范,只要将理解并完成规范之后,开发就会异常的快且方便**
第一步:导依赖坐标
第二步:编写实体类
第三步:编写核心配置文件和数据源配置的properties文件
第四步:对比着接口配置mapper映射文件
测试类及其测试结果:
2.2 映射文件进阶之动态sql
上面的这种SQL语句写法相当一一个精确匹配,但凡三个参数少任意一个都会造成这么一个问题,就是没有匹配的结果输出。但是一般的业务情况下如果参数少了一个的话就认为这个参数可以是任意值,也就相当于模糊匹配的概念。要想完成这个功能就需要使用动态SQL语句,也就是使用标签进行。
🍕<where>和<if>标签
<if>标签实际上就是对test属性值的条件判断,只有当条件满足了才会将标签内部的语句拼接到上面的select语句中,如果都不满足就会查询所有,有几个条件满足都会拼接到where条件限制,where条件限制不固定就是动态SQL语句的由来。
🍔<foreach>标签
<foreach>标签实际上就是可以拼接SQL语句,有前后的SQL语句成分,有中间的字段值(集合或数组)和分隔符
🌭<sql>片段抽取标签
2.3 核心配置文件进阶
🌮typeHandlers标签
一些情况下我们会有这样的一个业务需求:java中的数据类型与要存放到数据库中的类型不一致,或者数据库中的数据类型和我们需要获取的类型不一致,这时候就需要我们使用自定义的类型处理器了。typeHandlers标签就是用于在核心配置文件中对自定义的类型处理器进行注册使用,于是自定义类型处理器的使用就有两个比较重要的步骤定义处理器类和核心配置文件注册。
下面的案例就是java中是一个Date类型的数据,需要将date转成时间毫秒值存储到数据库中,从数据库中取出时还必须是Date类型。
定义****处理器类
核心配置文件注册
🍜plugins标签
MyBatis可以使用第三方的插件进行功能的拓展,plugins标签就是对拓展功能的注册
比如说使用分页插件查询数据库信息
第一步:导入分页插件的相关依赖
第二步:核心配置文件配置分页插件第三步:测试类中设置分页参数,并获取相关参数
核心配置文件中的标签配置是遵循以下顺序的,如果顺序改变的话会导致报错,且红框框住的是相比较而言重要的,且前面都讲过![](https://img-blog.csdnimg.cn/e9af55ca9cf14f4aa264804e19ec3b3f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5omO5ZOH5aSq5p6j57OV,size_20,color_FFFFFF,t_70,g_se,x_16)
3 MyBatis多表操作
表与表之间有三种对应关系:一对一、一对多、多对多,加下来让我们依次学习一下这三种关系该的表查询如何操作
🥩一对一
一张订单唯一对应着一个用户
第一步:首先要有两个表和对应的实体类,两个表之间还要有一个外键进行表之间的连接
第二步:对应着mapper接口写mapper映射文件** 第三步:配置核心配置文件 第四步:**测试及结果
⚠ 还有一种映射关系的配置方式,使用<association>标签可读性更加好
🍗多对一
一个用户对应着多张订单
第一步:首先要有两个表和对应的实体类,两个表之间还要有一个外键进行表之间的连接。仔细看,这个案例使用的表还是那两张表,但是实体类就不是上一个案例的实体类了。
第二步:对应着mapper接口写mapper映射文件
** 第三步:**配置核心配置文件,这里的加载mapper映射文件和上一个案例不一样,其他配置都一样
第四步:测试及结果,这里只查询用户id为1的订单,查询出来的所有订单在后面进行拼接,无法全部展示
🍖多对多
一个用户扮演多个角色,一个角色被多个用户扮演
** 第一步:**首先要有三个表和除了连接表之外的实体类,两个表之间还要有一个连接表进行角色表和用户表之间的连接。
第二步:对应着mapper接口写mapper映射文件
第三步:配置核心配置文件,这里的别名role1不一样,其他配置都一样
第四步:测试及结果
学到这MyBatis基本上已经够用了,下面的注解开发只做了解,可以不学,注解开发与xml配置开发的不一样的地方就是,注解开发使用注解将mapper映射文件取而代之,在核心配置文件里mapper映射文件的加载换成包下注解扫描。
4 MyBatis实现注解开发
简单的CRUD注解开发
第一步:创建表和实体类、导入依赖 都不再演示
第二步:配置核心配置文件,加载配置文件、配置数据库、扫描包下注解
第四步:接口方法上加注解,省去mapper映射文件
第五步:和xml开发一样直接调用方法
多表查询的注解开发
一对一
一张订单唯一对应着一个用户
第一步:创建user、order表和实体类、导入依赖 都不再演示
第二步:配置核心配置文件,加载配置文件、配置数据库、扫描包下注解,和上面的一样不再演示
第三步:接口方法上加注解,省去mapper映射文件
第四步:和xml开发一样直接调用方法
⚠ 还有一种注解开发方法,和下面要学习的一对多的开发一样,提前了解一下
一对多
一个用户对应着多张订单
** 第一步:**创建user、order表和实体类、导入依赖 都不再演示
第二步:配置核心配置文件,加载配置文件、配置数据库、扫描包下注解,和上面的一样不再演示
第三步:一对多和一对一的拓展方法一样,需要借助其它方法进行查询,在rolemapper创建一个通过id查询的方法
第四步:usermapper接口方法上加注解,省去mapper映射文件
第五步:和xml开发一样直接调用方法
多对多
一个用户扮演多个角色,一个角色被多个用户扮演
** 第一步:**创建user、sys_user_role、sys_role表和User、Role实体类、导入依赖 都不再演示
** 第二步:**配置核心配置文件,加载配置文件、配置数据库、扫描包下注解
第三步:一对多和一对一的拓展方法一样,需要借助其它方法进行查询,在ordermapper创建一个通过id查询的方法
第四步:usermapper接口方法上加注解,省去mapper映射文件
第五步:和xml开发一样直接调用方法
至此,SSM框架的所有知识点都已经到达入门级别了,接下来就是将前面学的所有的知识点或者说框架进行一个整合,形成一个完整的ssm知识体系了。整合完成之后就是进行一个ssm框架项目的实操,让我们一起加油吧🤑🤑
上一篇:【SSM面向CRUD编程专栏 7】springAop 事务控制_
下一篇:
版权归原作者 扎哇太枣糕 所有, 如有侵权,请联系我们删除。