1、导入maven依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
2、构建Druid连接池
package com.imooc.oa.datasource;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
import javax.sql.DataSource;
import java.sql.SQLException;
// 要使用Druid作为连接池,我们必须要继承UnpooledDataSourceFactory
public class DruidDataSourceFactory extends UnpooledDataSourceFactory {
// 这个方法就是为了在我们要执行getDataSource()方法时,进行数据源初始化
@Override
public DataSource getDataSource() {
try {
((DruidDataSource)this.dataSource).init();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return this.dataSource;
}
public DruidDataSourceFactory() {
this.dataSource = new DruidDataSource();
}
}
3、mybatis核心配置文件 mybatis-config.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>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<!-- <dataSource type="POOLED"> 这是mybatis自带的连接池-->
<dataSource type="com.imooc.oa.datasource.DruidDataSourceFactory">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <!--mybatis的驱动名为driver-->
<property name="url" value="jdbc:mysql://localhost:3306/imooc_oa?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"/>
<property name="username" value="root"/>
<property name="password" value="@G52yj"/>
<property name="initialSize" value="10"/>
<property name="maxActive" value="20"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/test.xml"/>
</mappers>
</configuration>
4、mybatis映射配置文件 test.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--MyBatis的DTD约束-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<select id="sample" resultType="String"> <!--查询语句-->
select "success"
</select>
</mapper>
5、MybatisUtils 建立mybatis连接
package com.imooc.oa.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.Reader;
import java.util.function.Function;
public class MybatisUtils {
// 利用static(静态)属于类不属于对象,且全局唯一
private static SqlSessionFactory sqlSessionFactory = null;
// 利用静态块在初始类时实例化sqlSessFactory
static {
Reader reader = null;
try {
// 读取mybatis-config.xml
reader = Resources.getResourceAsReader("mybatis-config.xml");
// 构建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
// 初始化错误时,通过抛异常ExceptionInitializerError通知调用
throw new ExceptionInInitializerError(e);
}
}
/**
* 执行SELECT 查询sql
*
* @param func 要执行查询语句的代码块
* @return 查询结果
*/
public static Object executeQuery(Function<SqlSession, Object> func) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
Object obj = func.apply(sqlSession);
return obj;
} finally {
sqlSession.close();
}
}
/**
* 执行INSERT/UPDATE/DELETE写操作SQL
* @param func 要执行的写操作代码
* @return 写操作返回后的结果
*/
public static Object executeUpdate(Function<SqlSession, Object> func) {
// openSession传入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();
}
}
}
6、测试类
import com.imooc.oa.utils.MybatisUtils;
import org.junit.Test;
public class MybatisUtilsTestor {
@Test
public void testCase1() {
String result = (String) MybatisUtils.executeQuery(sqlSession -> {
String out = sqlSession.selectOne("test.sample");
return out;
});
System.out.println(result);
}
@Test
public void testCase2() {
String result = (String) MybatisUtils.executeQuery(sqlSession -> sqlSession.selectOne("test.sample"));
System.out.println(result);
}
}