一、核心 API 介绍
1、Mapper映射器。由一个 Java 接口和 XML 文件(或者注解构成)
2、SqlSession 就相当于一个数据库连接(Connection 对象),可以在一个事务里面执行多条 SQL,然后通过commit、rollback 方法提交或者回滚事务。
3、SqlSessionFactory 可以被认为是一个数据库连接池,里面存储SqlSession对象。单例模式的对象,在应用中被共享。
4、SqlSessionFactoryBuilder 的作用是使用构建者模式创建 SqlSessionFactory 接口对象。
二、全局配置文件、配置文件
三、Mybatis 中的参数绑定
在映射配置文件中向 SQL 语句中绑定参数的语法结构为#{ }和${ }。
#{ } 和 ${ }的区别:
#{ } 解析为一个 JDBC 预编译语句(PreparedStatement)的参数标记符占位符 ?。使用该方式可避免 SQL 注入。
仅 仅 为 一 个 纯 碎 的 S t r i n g 替 换 , 在 M y b a t i s 的 动 态 S Q L 解 析 阶 段 将 会 进 行 变 量 替 换 。 { } 仅仅为一个纯碎的 String 替换,在 Mybatis 的动态 SQL 解析阶段将会进行变量替换。 仅仅为一个纯碎的String替换,在Mybatis的动态SQL解析阶段将会进行变量替换。{ } 在预编译之前已经被变量替换了,这会存在 SQL 注入问题
四、使用 ThreadLocal 存储 SqlSession
如果多个 DML 操作属于一个事务,因为 commit()和 rollback()都是由 SqlSession 完成的,所以必须保证使用一个 SqlSession。但是多个不同的 DML 操作可能在不同类的不同方法中,每个方法中要单独的获取 SqlSession。比如商城下订单时,其实涉及商品库存变化、订单添加、订单明细添加、付款、日志添加等多个 DML 操作,分布在不同类中。如何在多个 DML 操作之间使用同一个 SqlSession 呢,可以使用 ThreadLocal 来存储。保证一个线程中的操作使用的都是一个 SqlSession。
创建 Mybatis 工具类
public class MybatisUtils {
private static ThreadLocal<SqlSession> threadLocal = new
ThreadLocal<>();
private static SqlSessionFactory sqlSessionFactory = null;
static{
//创建 SqlSessionFactory
InputStream is = null;
try{
is = Resources.getResourceAsStream("mybatis-cfg.xml");
}catch (IOException e