持久层框架设计实现及MyBatis源码分析 ---- MyBatis基础回顾及高级应用
创始人
2024-03-05 08:02:24
0

一、基本应用

基本开发步骤:
① 添加MyBatis的坐标
② 创建xxx数据表
③ 编写Xxx实体类
④ 编写sql映射⽂件XxxMapper.xml
⑤ 编写核⼼配置⽂件SqlMapConfig.xml
⑥ 编写测试类

二、配置文件介绍

1. sql映射配置文件 XxxMapper.xml

(1) 基础使用

在这里插入图片描述

(2) 动态SQL

where + if 标签
在这里插入图片描述
where标签 mybatis会 自动添加where语句if标签 根据if条件,如果成立,会为后面多个判断语句 添加and(第一个除外)

foreach 标签
在这里插入图片描述
foreach标签的属性含义如下:
• collection:代表要遍历的集合元素。作为入参,对象为list、array时,collection属性值分别默认用"list"、"array"代替,Map对象没有默认的属性值。但是,在作为入参时可以使@Param(“name”)注解来设置自定义collection属性值,设置name后,list、array会失效
• open:代表语句的开始部分
• close:代表结束部分
• item:代表遍历集合的每个元素,⽣成的变量名
• sperator:代表分隔符

抽取Sql片段
在这里插入图片描述

2. 核心配置文件 SqlMapConfig.xml

在这里插入图片描述

(1) properties标签

实际开发中,习惯将数据源的配置信息单独抽取成⼀个properties⽂件,该标签可以加载额外配置的
properties⽂件
在这里插入图片描述

(2) typeAliases标签

类型别名是为Java 类型设置⼀个短的名字。原来的类型名称配置如下
在这里插入图片描述
在这里插入图片描述
上⾯我们是⾃定义的别名,mybatis框架已经为我们设置好的⼀些常⽤的类型的别名
在这里插入图片描述

(3) environments标签

在这里插入图片描述
数据库环境的配置,⽀持多环境配置

其中,事务管理器(transactionManager)类型有两种:
•JDBC:这个配置就是直接使⽤了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作⽤域。
•MANAGED:这个配置⼏乎没做什么。它从来不提交或回滚⼀个连接,⽽是让容器来管理事务的整个⽣
命周期(⽐如 JEE 应⽤服务器的上下⽂)。 默认情况下它会关闭连接,然⽽⼀些容器并不希望这样,因
此需要将 closeConnection 属性设置为 false 来阻⽌它默认的关闭⾏为。

其中,数据源(dataSource)类型有三种:
•UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
•POOLED:这种数据源的实现利⽤“池”的概念将 JDBC 连接对象组织起来。
•JNDI:这个数据源的实现是为了能在如 EJB 或应⽤服务器这类容器中使⽤,容器可以集中或在外部配
置数据源,然后放置⼀个 JNDI 上下⽂的引⽤。

(4) mapper标签

该标签的作⽤是加载映射的,加载⽅式有如下⼏种:

	•使⽤相对于类路径的资源引⽤,例如:•使⽤完全限定资源定位符(URL),例如:•使⽤映射器接⼝实现类的完全限定类名,例如:•将包内的映射器接⼝实现全部注册为映射器,例如:

三、Mybatis相应API介绍

	String resource = "org/mybatis/builder/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(inputStream);

Resources ⼯具类
这个类在 org.apache.ibatis.io 包中。Resources 类帮助你从类路径下、⽂
件系统或⼀个 web URL 中加载资源⽂件。

SqlSession⼯⼚构建器SqlSessionFactoryBuilder
常⽤API:SqlSessionFactory build(InputStream inputStream)
通过加载mybatis的核⼼⽂件的输⼊流的形式构建⼀个SqlSessionFactory对象

SqlSession⼯⼚对象SqlSessionFactory
SqlSessionFactory 有多个⽅法创建SqlSession 实例。常⽤的有如下两个:
在这里插入图片描述

SqlSession会话对象
SqlSession 实例在 MyBatis 中是⾮常强⼤的⼀个类。在这⾥你会看到所有执⾏语句、提交或回滚事务
和获取映射器实例的⽅法。
执⾏语句的⽅法主要有:

	 T selectOne(String statement, Object parameter) List selectList(String statement, Object parameter)int insert(String statement, Object parameter)int update(String statement, Object parameter)int delete(String statement, Object parameter)

操作事务的⽅法主要有:

	void commit() void rollback()

四、Mybatis复杂映射开发

1. 一对一查询

给定要求:因为一个订单对应着一个用户,所以要求查询出订单的同时将其所属用户也查询出来
sql语句查询结果:
在这里插入图片描述

因为程序当中没有一个指定的实现类能够与查询结果对应,所以我们需要自定义查询结果集类型
使用resultMap来进行封装
在这里插入图片描述
Order.java

public class Order {private int id;private Date ordertime;private double total;//代表当前订单从属于哪⼀个客户private User user;
}

User.java

public class User {private int id;private String username;private String password;private Date birthday;
}

2. 一对多查询

给定要求:因为一个用户可能对应着多个用户,所以要求查询出用户及其所属的订单
sql语句查询结果:
在这里插入图片描述
使用collection标签来配置多的一方的属性,封装为一个集合
在这里插入图片描述
Order.java

public class Order {private int id;private Date ordertime;private double total;//代表当前订单从属于哪⼀个客户private User user;
}

User.java

public class User {private int id;private String username;private String password;private Date birthday;// 代表当前⽤户具备哪些订单private List orderList;
}

3. 多对多查询

给定要求:⽤户表和⻆⾊表的关系为,⼀个⽤户有多个⻆⾊,⼀个⻆⾊被多个⽤户使⽤;查询⽤户同时查询出该⽤户的所有⻆⾊
sql语句查询结果:
在这里插入图片描述
同样使用collection标签
在这里插入图片描述
User.java

public class User {private int id;private String username;private String password;private Date birthday;// 代表当前⽤户具备哪些订单private List orderList;// 代表当前⽤户具备哪些⻆⾊private List roleList;
}

Role.java

public class Role {private int id;private String roleName;private String roleDesc;
}

总结

MyBatis多表配置⽅式:
⼀对⼀配置:使⽤做配置
⼀对多配置:使⽤ + 做配置
多对多配置:使⽤ + 做配置

相关内容

热门资讯

美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...