1.MybatisUtils连接工具类
帮助快速创建一个sqlSession以及开启和关闭。
excuteQuery是帮助查询操作的Lambda表达式方法,可以帮助屏蔽查询操作的相关细节,这样很轻松的就可以启动查询操作了,不用再担心忘记开启和关闭回收资源
public void testTestCase2() {
System.out.println("---------------");
String result=(String)MybatisUtils.excuteQuery(sqlSession -> sqlSession.selectOne("test.sample"));
System.out.println(result);
}
public void testTestCase1() {
String result= (String) MybatisUtils.excuteQuery(sqlSession -> {
String s = (String) sqlSession.selectOne("test.sample");
return s;
});
System.out.println(result);
}
executeUpdate帮助使用者操作数据库的更新等操作,如增删改,内置了rollback方法。
源码如下
public class MybatisUtils {
//创建全局唯一的sqlSessionFactory
private static SqlSessionFactory sqlSessionFactory=null;
static {
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
//抛出:类初始化时产生的错误
throw new ExceptionInInitializerError(e);
}
}
//使用这个函数式接口,传入SqlSession参数,和返回值Object,方法参数名func
//这个函数式接口的好处是,不需要再后续自己书写open和close了,使用这个接口就一定可以触发这两个
//利用function屏蔽查询的细节
public static Object excuteQuery(Function<SqlSession,Object> func){
SqlSession sqlSession=sqlSessionFactory.openSession();
try {
Object obj=func.apply(sqlSession);
return obj;
} finally {
sqlSession.close();
}
}
public static Object executeUpdate(Function<SqlSession,Object> func){
//传入false代表手动提交/回滚事务
SqlSession sqlSession=sqlSessionFactory.openSession(false);
try {
Object obj=func.apply(sqlSession);
sqlSession.commit();
return obj;
} catch (Exception e) {
sqlSession.rollback();
throw e;
}finally {
sqlSession.close();
}
}
}
2.Druid连接池
首先需要导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
然后更改xml代码如下即可
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 开启驼峰命名转换-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 设置默认指向的数据库dev-->
<environments default="dev">
<!-- 配置环境,不同的环境不同的id名字-->
<environment id="dev">
<!-- 采用JDBC方式对数据库事务进行commit/rollback-->
<transactionManager type="JDBC"></transactionManager>
<!-- 采用连接池方式管理数据库连接-->
<!-- <dataSource type="POOLED">-->
<dataSource type="com.imooc.oa.datasource.DruidDataSourceFactory">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/imooc_oa?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="1644661573"/>
<property name="initialSize" value="10"/>
<property name="maxActive" value="20"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/test.xml"/>
</mappers>
</configuration>