MyBatis框架(3.0)
日志处理
1,将log4j.properties文件拷贝到src目录下:
2,将log4j,slf4j开发包导入WEB-INF中:
3,修改log4j.properties文件:
log4j.logger.cn.mldn.mapping=TRACE
此时只要在“cn.mldn.mapping"命名空间下的内容都可以进行日志输出;
自定义MyBatisSessionFactory
范例:定义工厂操作类:
package cn.mldn.util;
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;
/**
* 本类主要负责SqlSessionFactory与SqlSession接口对象的取得,
* 而且可以负责重新连接以及关闭的处理操作
* @author mldn
*/
public class MyBatisSessionFactory {
// 主要的功能定义公共资源文件的名称,方便Resources类的读取操作
private static final String CONFIG_FILE = "mybatis.cfg.xml" ;
// 定义ThreadLocal类的对象,可以保存的是SqlSession接口对象,主要被不同的层做引用操作
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>() ;
// 定义SqlSessionFactory接口对象,用于通过它操作二级缓存以及重新取得SqlSession的配置
private static SqlSessionFactory factory = null ;
// 主要是读取mybatis.cfg.xml文件
private static InputStream input = null ;
static {
rebuildSessionFactory(); // 在类加载的时候创建SqlSessionFactory接口对象
}
/**
* 取得当前连接的SqlSession对象,如果当前没有SqlSession,则需要通过SqlSessionFactory创建新的Session对象
* 如果当前已经存在有SqlSession对象,则通过ThreadLocal取得返回
* @return 返回SqlSession对象
*/
public static SqlSession getSession() {
SqlSession session = threadLocal.get() ; // 通过ThreadLocal取得SqlSession
if (session == null) { // 现在没有保存对象
if (factory == null) { // 没有工厂接口
rebuildSessionFactory() ; // 创建SqlSessionFactory
}
session = factory.openSession() ; // 创建新的session对象
threadLocal.set(session);
}
return session ;
}
public static SqlSessionFactory getSessionFactory() {
return factory ;
}
/**
* 重新建立新的SqlSessionFactory接口对象
*/
public static void rebuildSessionFactory() { // 重新建立新的SqlSessionFactory接口对象
try {
input = Resources.getResourceAsStream(CONFIG_FILE) ; // 读取配置文件
factory = new SqlSessionFactoryBuilder().build(input) ; // 创建SqlSessionFactory接口对象
} catch (Exception e) {
e.printStackTrace();
}
}
public static void close() { // 关闭当前的Session
SqlSession session = threadLocal.get() ; // 通过ThreadLocal取得SqlSession
threadLocal.set(null); // 清空ThreadLocal原始保存的数据
if (session != null) {
session.close();
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
范例:利用工厂类处理
package cn.mldn.test;
import java.util.Date;
import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
public class TestInsertDemo2 {
public static void main(String[] args) throws Exception {
Member vo = new Member() ;
vo.setMid("mldn-30");
vo.setAge(15);
vo.setName("小王吧");
vo.setBirthday(new Date());
vo.setSalary(89999.09);
System.out.println(MyBatisSessionFactory.getSession().insert(
"cn.mldn.mapping.MemberNS.doCreate", vo));
MyBatisSessionFactory.getSession().commit();
MyBatisSessionFactory.close();
}
}