MyBatis注意事项总结
1. 增删改必须要提交事务。(事务自动开启,手动提交模式)
2. 参数绑定情况
实体类型 #{属性名}
(单个参数)基本数据类型+包装类型+String #{随便}
没有参数
多个参数
3. mapper文件转义字符。
MyBatisUtil的封装
MyBatis核心API
SqlSession: 1. 相当于connection sqlSession.commit();//提交事务 sqlSession.rollback();//回滚事务 sqlSession.close();//将连接还回连接池。 2. 获得XXxDAO接口的对象。 轻量级对象,每次操作创建一个新的。 比如: Action SqlSession Connection SqlSessionFactory 作用: 封装mybatis-config配置文件的信息。 重量级对象,web应用只创建一个。对象的创建消耗资源。
package com.baizhi.demo4;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil2 {
private static SqlSessionFactory factory = null;
private static ThreadLocal<SqlSession> tdl = new ThreadLocal<SqlSession>();
static{
InputStream is = null;
try {
is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
throw new RuntimeException("mybatis配置文件加载异常",e);
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 获得SqlSession
* @throws IOException
*/
public static SqlSession getSqlSession(){
//1. 获得DAO对象 sqlSession
SqlSession session = null;
//从当前线程中获得session
try {
session = tdl.get();
if(session == null){
//当前线程如果没有sqlSEssion
session = factory.openSession();
//将session存入当前线程
tdl.set(session);
}
} catch (Exception e) {
throw new RuntimeException("获得SqlSession的异常",e);
}
return session;
}
/**
* 根据接口的类对象,获得dao的对象。
* @param clazz
* @return
*/
public static <T> T getMapper(Class<T> clazz){
//获得sqlSession
SqlSession session = getSqlSession();
//调用session.getMapper(clazz);
T t = session.getMapper(clazz);
return t;
}
/**
* 提交事务+释放资源
*/
public static void commit(){
//sqlSession.commit();
try{
SqlSession session = getSqlSession();
session.commit();
}catch(RuntimeException e){
throw e;
}finally{
close();
}
}
/**
* 回滚事务+释放资源
*/
public static void rollback(){
try{
SqlSession session = getSqlSession();
session.rollback();
}catch(RuntimeException e){
throw e;
}finally{
//释放资源
close();
}
}
/**
* 释放session资源
*/
public static void close(){
//session.close();
SqlSession session = getSqlSession();
if(session != null){
session.close();
//从当前线程中移除该session
tdl.remove();
}
}
}
浙公网安备 33010602011771号