欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot 2.x 整合 MyBatis (简单优雅)

程序员文章站 2024-01-26 15:09:04
...

创建项目

两种方式创建SpringBoot工程。
方式一:IDEA中创建SpringBoot工程,依次选择要添加的模块。
方式二:通过访问 Spring Initializr 在线创建,再本地导入。这里我们选用第二种方式。

SPRING INITIALIZR网址,直接创建Maven项目

SpringBoot 2.x 整合 MyBatis (简单优雅)

自行添加自己需要的模块即可,说明
1、(必选)MySql和MyBatis模块就不用说了。
2、(必选)web:里面会将Tomcat和SpringMVC依赖导入。后期直接运行项目即可在浏览器中访问。
3、(可选)devtools:选后让我们开发更方便,如代码变更时只需重新编译此文件即可,无需重启服务器。
4、(可选)Aspect:面向切面编程需要的依赖,系统日志等功能会用上。
5、(可选)Thymeleaf:Java模板引擎,注意SpringBoot1.5以上已经抛弃了Velocity,我们直接用thymeleaf。

之后点击Generate Project,下载到本地解压,在IDEA中选择此项目导入。

其实这部分所做的操作本质上是新建一个SpringBoot工程,在pom.xml文件里添加各种依赖。这里如果我们已经有SpringBoot工程了,我们直接在pom.xml文件里添加如下依赖即可:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bowen</groupId>
    <artifactId>BWQASystem</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>BWQASystem</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
        </dependency>
        <!--SpringBoot1.5以上已经抛弃了Velocity,我们直接用thymeleaf-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

集成MyBatis

总体步骤:
1、SpringB工程中的application.properties总配置文件中增加如下配置信息
(数据库连接信息配置)

spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
# 指明mybatis的配置文件所在位置
mybatis.config-location=classpath:mybatis-config.xml

2、在以上的application.properties配置文件中指定的mybatis-config.xml的配置文件里面需要填入的配置信息如下:
(关于mybatis的详细策略配置信息)
更多配置细节参考MyBatis映射配置文件

<?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="cacheEnabled" value="true"/>
        <!-- 设置超时时间,它决定驱动等待数据库响应的秒数。 -->
        <setting name="defaultStatementTimeout" value="3000"/>
        <!-- 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 允许 JDBC 支持自动生成主键 -->
        <setting name="useGeneratedKeys" value="true"/>
    </settings>
</configuration>

至此,MyBatis已经集成完毕。

使用

DAO层开发

我们直接定义一个由@Mapper注解标注的接口即可,因为MyBatis会扫描由@Mapper注解标注的类,把里面的@INSERT、@SELECT等注解都解析好,之后实现一些代理的类,通过接口调用即可。

一般在DAO层开发中,为了能集中管理表名和字段等信息,我们将它们提取出来。定义为TABLE_NAME、INSERT_FIELDS等常量。

插入、查询、更新方法如下:

@Repository
@Mapper
public interface UserDAO {

    String TABLE_NAME = "user";
    String INSET_FIELDS = " username, password ";
    String SELECT_FIELDS = " id, username, password ";

    @Insert({"insert into ", TABLE_NAME, "(", INSET_FIELDS, ") values (#{userName},#{passWord})"})
    int addUser(User user);

    @Select({"select ", SELECT_FIELDS, " from ", TABLE_NAME, " where userName = #{userName}"})
    User selectUserByUserName(String userName);

    @Update({"update ", TABLE_NAME, " set password = #{passWord} where username = #{userName}"})
    void updateUserPsdByName(User user);

}

测试DAO层

写个简单的测试用例:

@Test
public void testOperation(){
    User user1 = new User();
    user1.setUserName("jbw1");
    user1.setPassWord("123456");
    User user2 = new User();
    user2.setUserName("jbw2");
    user2.setPassWord("123456");

    userDAO.addUser(user1);
    userDAO.addUser(user2);

    User resultUser1 = userDAO.selectUserByUserName("jbw1");
    Assert.assertEquals("123456", resultUser1.getPassWord());

    User resultUser2 = userDAO.selectUserByUserName("jbw2");
    resultUser2.setPassWord("233333");
    userDAO.updateUserPsdByName(resultUser2);
    Assert.assertEquals("233333", userDAO.selectUserByUserName("jbw2").getPassWord());

    }

SpringBoot 2.x 整合 MyBatis (简单优雅)
跑一下,ok,没毛病,完成。