一个Mybatis的项目,需要负责连接管理的工具类,每次只需要从工具类获取SqlSessionFactory
package com.hj.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class SqlSessionFactoryUtils { private static String RESOURCE = "mybatis.xml"; private static SqlSessionFactory sqlSessionFactory; private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); /** * 初始化SqlSession的方法 在容器初始化的时候应加载 * * 使用示例(使用注解方式添加监听器): * import com.damu.utils.SqlSessionFactoryUtils; * import javax.servlet.ServletContextEvent; * import javax.servlet.ServletContextListener; * import javax.servlet.annotation.WebListener; * @WebListener * public class InitSqlSessionListener implements ServletContextListener { * public void contextInitialized(ServletContextEvent servletContextEvent) { * System.out.println("容器加载中..."); * // 初始化我们的SqlSesionFactory对象 * SqlSessionFactoryUtils.initSqlSessionFactry(); * } * * public void contextDestroyed(ServletContextEvent servletContextEvent) { * System.out.println("容器销毁中..."); * // 关闭SqlSession对象 * SqlSessionFactoryUtils.close(); * } * } */ public static void initSqlSessionFactory(){ try { InputStream is = Resources.getResourceAsStream(RESOURCE); sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { e.printStackTrace(); } } /** * 获取SqlSessionFactory的方法 * @return */ public static SqlSessionFactory getSqlSessionFactory(){ return sqlSessionFactory; } /** * 关闭Session的方法 */ public static void close(){ SqlSession session = threadLocal.get(); if (session != null) { session.close(); threadLocal.set(null); } } }
每次服务器启动时候,也可以直接放在DAO中
package com.damu.listener; import com.damu.utils.SqlSessionFactoryUtils; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class InitSqlSessionListener implements ServletContextListener { public void contextInitialized(ServletContextEvent servletContextEvent) { System.out.println("容器加载中..."); // 初始化我们的SqlSesionFactory对象 SqlSessionFactoryUtils.initSqlSessionFactry(); } public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("容器销毁中..."); // 关闭SqlSession对象 SqlSessionFactoryUtils.close(); } }
UserDao中的使用:
import com.damu.entity.Users; import com.damu.utils.SqlSessionFactoryUtils; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import java.util.List; public class UsersDAO { private SqlSession sqlSession; private List<Users> list; private Users user; private SqlSession getSession() { sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); return sqlSession; } /** * 查询全部用户 * @return */ public List<Users> findAll() { try { list = getSession().selectList("findUsers"); } catch (Exception e) { e.printStackTrace(); } finally { sqlSession.close(); } return list; } }
<select id="findUsers" resultType="com.beans.User"> select * from users </select>
更多操作:
/** * 查询全部用户 * @return */ public List<Users> findAll(){ try { usersList = getSqlSession().selectList("findUsers"); // for (Users user : // usersList) { // System.out.println(user); // } } catch (Exception e) { e.printStackTrace(); } finally { sqlSession.close(); } return usersList; } /** * 查询单个用户 * @return */ public Users findById(Integer id){ try { user = getSqlSession().selectOne("findUsers", new Users(id)); } catch (Exception e) { e.printStackTrace(); } finally { sqlSession.close(); } return user; } /** * 增加用户数据到数据库 * @return */ public Users addUser(Users user){ try { getSqlSession().insert("addUser", user); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } finally { sqlSession.close(); } return user; } /** * 修改用户资料 * @return */ public Users updateUsers(Users user){ try { getSqlSession().update("updateUser",user); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } finally { sqlSession.close(); } return user; }