MyBatis核心API测试

来源:互联网 发布:arduino 网络模块 编辑:程序博客网 时间:2024/06/14 06:58


@Test
public void testMybatis() throws Exception {
    // 读取mybatis-config配置文件
    InputStream stream = Resources.getResourceAsStream("mybatis-config.xml");
    // 创建SqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
    // 创建SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 创建DAO的实现类
    UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
    // 调用DAO中相关方法
    User user = userDAO.selectByID(1);
    System.out.println(user);
}


MyBatisUtil工具类的封装

对于MyBatis三种类对象的分析 
Resources类 
特点:读取MyBatis-config配置文件 IO 
建议:一次性通过IO读取所有的数据 
SqlSessionFactory类 
特点:创建SqlSession 重量级的资源 内存占用多 功能多 
建议:每一个应用只创建一个 线程安全 
SqlSession类 
特点:清零及资源 不能被多线程共享 
1.创建DAO接口的实现类(动态代理设计思想 动态字节码技术) 
2.SqlSession内部封装Connnection 一个SqlSession对应一个Connection 
3.事务控制 
SqlSession.commit 
SqlSession.rollback


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 mybatisutils {
    public static SqlSessionFactory sqlSessionFactory;
    public static ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>();


    /* 静态代码块加载基础信息 */
    static {
        InputStream stream = null;
        try {
            // 读取mybatis-config配置文件
            stream = Resources.getResourceAsStream("mybatis-config.xml");
            // 创建SqlSessionFactory对象
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
        } catch (IOException e) {
            // TODO: handle exception
            e.printStackTrace();
            throw new RuntimeException("读取配置文件失败");
        } finally { // 关闭流
            try {
                stream.close();
            } catch (Exception e2) {
                // TODO: handle exception
                e2.printStackTrace();
            }
        }
    }


    /* 获取SqlSession对象 */
    public static SqlSession opSqlSession() {
        SqlSession sqlSession = tl.get();


        // 非空判断
        if (null == sqlSession) {
            sqlSession = sqlSessionFactory.openSession();
            tl.set(sqlSession);
        }


        return sqlSession;
    }


    /* 关闭SqlSession对象 */
    public static void closeSqlSession() {
        // 获取SqlSession
        SqlSession sqlSession = opSqlSession();
        sqlSession.close();
        tl.remove();
    }


    /* 事务提交 */
    public static void commit() {
        SqlSession sqlSession = opSqlSession();
        sqlSession.commit();
        closeSqlSession();
    }


    /* 事务回滚 */
    public static void rollback() {
        SqlSession sqlSession = opSqlSession();
        sqlSession.rollback();
        closeSqlSession();
    }


    /* 获取DAO实现 */
    public static Object getMapper(Class clazz) {
        SqlSession sqlSession = opSqlSession();
        return sqlSession.getMapper(clazz);
    }


}
原创粉丝点击