OA系统开发(二)

108 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

1.新建包com.imooc.oa.utils

image.png

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新增配置 image.png
<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配置文件

image.png

<?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&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;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文件 image.png

<?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单元 image.png 可以看到返回了success,说明我们的配置正确