一、基本应用
基本开发步骤:
 ① 添加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标签
该标签的作⽤是加载映射的,加载⽅式有如下⼏种:
	•使⽤相对于类路径的资源引⽤,例如:
	<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
	•使⽤完全限定资源定位符(URL),例如:
	<mapper url="file:///var/mappers/AuthorMapper.xml"/>
	•使⽤映射器接⼝实现类的完全限定类名,例如:
	<mapper class="org.mybatis.builder.AuthorMapper"/>
	•将包内的映射器接⼝实现全部注册为映射器,例如:
	<package name="org.mybatis.builder"/>
 
三、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> T selectOne(String statement, Object parameter)
	<E> List<E> 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<Order> orderList;
}
 
3. 多对多查询
给定要求:⽤户表和⻆⾊表的关系为,⼀个⽤户有多个⻆⾊,⼀个⻆⾊被多个⽤户使⽤;查询⽤户同时查询出该⽤户的所有⻆⾊
 sql语句查询结果:
 
 同样使用collection标签
 
 User.java
public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;
    // 代表当前⽤户具备哪些订单
    private List<Order> orderList;
    // 代表当前⽤户具备哪些⻆⾊
    private List<Role> roleList;
}
 
Role.java
public class Role {
    private int id;
    private String roleName;
    private String roleDesc;
}
 
总结
MyBatis多表配置⽅式:
 ⼀对⼀配置:使⽤做配置
 ⼀对多配置:使⽤ + 做配置
 多对多配置:使⽤ + 做配置






![[附源码]Python计算机毕业设计Django房产中介管理系统](https://img-blog.csdnimg.cn/92fcfebc94f34686920f9fd90a5164e9.png)
![[附源码]计算机毕业设计springboot路政管理信息系统](https://img-blog.csdnimg.cn/32cf592261904523843dd7c8525ee211.png)





![[附源码]Python计算机毕业设计SSM辽宁科技大学二手车交易平台(程序+LW)](https://img-blog.csdnimg.cn/05f51247fafc41f7b459d329a0613e80.png)




