一、核心 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 threadLocal = new
ThreadLocal<>();
private static SqlSessionFactory sqlSessionFactory = null;
static{
//创建 SqlSessionFactory
InputStream is = null;
try{
is = Resources.getResourceAsStream(“mybatis-cfg.xml”);
}catch (IOException e){
e.printStackTrace();
}
sqlSessionFactory = new
SqlSessionFactoryBuilder().build(is);
}
//获取 SqlSession
public static SqlSession getSqlSession(){
SqlSession sqlSession = threadLocal.get();
if(sqlSession == null){
sqlSession = sqlSessionFactory.openSession();
threadLocal.set(sqlSession);
29}
return sqlSession;
}
//关闭 SqlSession
public static void closeSqlSession(){
SqlSession sqlSession = threadLocal.get();
if(sqlSession != null){
sqlSession.close();
threadLocal.set(null);
}
}
}
@Override
public void deleteUsersById(int userid) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
final int delete =
sqlSession.delete(“com.bjsxt.mapper.UserMapper.deleteUsersById”,
userid);
}
五、日志处理
日志处理,线上问题追踪、错误排查、基于日志的业务的逻辑统计分析。常用日志框架Log4J、common Logging 、slf4J
Log4j 的日志级别
Log4j 定义了 8 个日志级别(除去 OFF 和 ALL,可以说分为 6 个级别),优先级从低到高 DEBUG、INFO、WARN、ERROR 四个日志级别。