持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
1.新建包com.imooc.oa.utils
2.包下新增MybatisUtils类文件
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 {
private static SqlSessionFactory sqlSessionFactory = null;
static {
Reader reader = null;
try{
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}catch (IOException e){
throw new ExceptionInInitializerError(e);
}
}
// 执行查询操作
public static Object executeQuery(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){
SqlSession sqlSession = sqlSessionFactory.openSession(false);
try {
Object obj = func.apply(sqlSession);
sqlSession.commit();
return obj;
}catch (RuntimeException e){
sqlSession.rollback();
throw e;
}finally {
sqlSession.close();
}
}
}
代码说明:
- reader = Resources.getResourceAsReader("mybatis-config.xml"):
读取配置文件 - sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
通过该方法赋值给sqlSessionFactory - Object executeQuery(Function<SqlSession,Object> func):
编程式函数,这边会报错,因为maven默认编译的版本是1.5,所以我们要给它调整一下插件配置,设置成1.8版本
解决方案:pom.xml新增配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
- Object executeUpdate:首先sqlSessionFactory.openSession(false)设置成false,关闭自动提交。用来执行新增,删除和更新的操作,这些操作可能会产生异常,所以我们要新增事务处理,如果失败,进行回滚操作
3.resources下新增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">
<property name="driver" value="com.mysql.cj.jdbc.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="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
代码说明:
- setting name="mapUnderscoreToCamelCase" value="true":把数据库字段映射为驼峰式的字段
- environments default="dev":表示默认使用的dev数据库
- environment id="dev":表示当前配置的dev数据库
- property name="driver" value="com.mysql.cj.jdbc.Driver":设置数据库驱动
- property name="url" value="jdbc:mysql://localhost:3306:数据库连接信息
- property name="username" value="root":设置用户名
- property name="password" value="123456":设置密码
4.新建mappers
作用:数据库操作语句的xml文件
新建test.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!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>
代码说明:执行简单的查询语句 select 'success'
5.mybatis-config.xml文件配置test.xml数据库操作文件
<mappers>
<mapper resource="mappers/test.xml"/>
</mappers>
7.单元测试
在test/java新建包com.imooc.oa.utils并且新增MybatisUtilsTestor类文件
package com.imooc.oa.utils;
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);
}
}
执行testCase1单元
可以看到返回了success,说明我们的配置正确