文章目录
- 1 system 模块集成 Mybatis
- 1.1 建立数据库
- 1.2 导入mybatis 包
- 1.3 增加数据库连接
- 1.4 测试 Mybatis 集成情况
- 2 测试 Mybatis 集成情况
- 2.1 java文件
- 2.2 Mybatis xml文件
- 3 搭建服务模块 Server
- 3.1 新建 server 模块
- 3.2 system 集成 server 模块
- 3.3 集中部署
- 4 集成 mybatis generator
- 4.1 添加 IDEA 插件
- 4.2 添加配置文件
- 4.3 添加 Maven 命令
- 4.4 使用 selectByExample 例子
- tip 集成热部署步骤
1 system 模块集成 Mybatis
1.1 建立数据库
首先建立一个数据库 course ,在数据库中新建一个表 test 来测试后面 mybatis 持久层的配置情况。
create database courseuse courseCREATE TABLE `test` (`id` varchar(255) NOT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;insert into test (id , name) values (1,'admin')
也可以用 navicat 来创建数据库和表。
1.2 导入mybatis 包
在父 Maven 项目中的 pom.xml 文件添加 mybatis 和 mysql 的包,同时在 system 中的 pom.xml 文件中添加(版本管理全部放在父项目的xml文件中),代码如下。
<!--父项目中的pom.xml--><!--集成mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!--system中的pom.xml--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
1.3 增加数据库连接
在 system 模块的 application.properties 文件中添加数据库的连接,代码如下。
spring.datasource.url=jdbc:mysql://localhost:3306/course?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
spring.datasource.username= root
spring.datasource.password= 123456spring.datasource.driver-class-name=com.mysql.jdbc.Driver
由于一个小错误导致后面运行时数据库一直报错,查了许多原因也看到了许多坑。有时用户的密码设置会导致明文的密码不被允许,这时可以添加allowPublicKeyRetrieval=true
。mysql 数据库到8.0版本之后需要设置时区,IDEA 中连接数据库如果不设置时区是连接不上的。
1.4 测试 Mybatis 集成情况
2 测试 Mybatis 集成情况
新建如图的包结构和文件。controller 为请求的入口,即调用 service 中方法;service负责逻辑,即调用 mapper 进行查询;mapper 负责持久层,其中 TestMapper.java 文件中的 list 方法和后面的 TestMapper.xml 文件中的 sql 语句进行合作,在数据库进行查询。各类代码如下。
2.1 java文件
test.java
package com.course.system.controller;import com.course.system.domain.Test;
import com.course.system.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.List;@RestController
public class test {@Resourceprivate TestService testService;@RequestMapping("/test")public List<Test> test(){return testService.list();}
}
Test.java
package com.course.system.domain;public class Test {private String id;private String name;public Test() {}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() { return name; }public void setName(String name) {this.name = name;}
}
TestMapper.java
package com.course.system.mapper;import com.course.system.domain.Test;
import java.util.List;public interface TestMapper {public List<Test> list();
}
TestService.java
package com.course.system.service;import com.course.system.domain.Test;
import com.course.system.mapper.TestMapper;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;@Service
public class TestService {@Resourceprivate TestMapper testMapper;public List<Test> list(){return testMapper.list();};
}
2.2 Mybatis xml文件
resources 包结构和代码如下。
TestMapper.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"><!-- namespace为命名空间,应该是mapper接口的全称-->
<mapper namespace="com.course.system.mapper.TestMapper"><select id="list" resultType="com.course.system.domain.Test">select id, name from test</select></mapper>
同时需要在 system 启动文件中添加注解@MapperScan("com.course.system.mapper")
扫描所有mapper文件夹下的文件,告诉 spring boot 此文件夹下是 mybatis 的 mapper 文件,在 application.properties 文件中添加 mybatis.mapper-locations=classpath:/mapper/*.xml
说明 mapper 的路径是 mapper 所有文件夹中的 xml 文件。
此时,进入 http://127.0.0.1:9001/system/test 可以看到查询返回的数据。
3 搭建服务模块 Server
为了应对业务扩展之后的复杂程度,这里将 system 的部分分离到新的模块 server 中,这样如果新建一个类似的模块就只需要引入 server 的包而不需要重新写,并且修改会简单许多。
3.1 新建 server 模块
新建 server 模块,将 system 中的 com.course.system 包复制到 server 的 java 包中,重构 rename 包的路径为 com.course.server,因为 server 模块不会单独启动,所以可以将 controller 包和 启动类 删掉。如果有报红一般为路径问题,修改正确后即可。
3.2 system 集成 server 模块
首先将 system 模块中的 service 包、domain 包、mapper 包和 resource 中的 mapper 包删掉,此时因为缺少许多类会报错。
在父项目的 pom.xml 文件中导入 server 包,并且在 system 模块中也添加进去。代码如下,其中版本管理在父项目。
<dependency><groupId>com.course</groupId><artifactId>server</artifactId><version>0.0.1-SNAPSHOT</version>
</dependency>
修改 controller 包中文件代码路径 system 包为 server 包,在启动类中添加注解@ComponentScan("com.course")
和@MapperScan("com.course.server.mapper")
此时运行成功,表示 system 模块成功集成 server 模块。
3.3 集中部署
将 java 包都集中管理之后,application.properties 文件也有许多公共的地方,此时如果直接将 properties 文件放到 server 的 resources 包下的话,因为 system 模块下面也有 application.properties 文件,所以只会读取自己本身的文件。此时可以在 resources 文件下新建 config 文件夹,将公共设置放到 config 中,这样就可以生效啦。
其中,修改后的 system 中的 properties 文件代码和 server 中 config 包中的 properties 文件代码如下。
#system 下的 application.properties
spring.application.name=system
server.port=9001server.servlet.context-path=/systemeureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#server 下的 application.properties
#数据库连接
#url 连接端口 数据库名
#username 登陆用户名
#password 登陆密码
spring.datasource.url=jdbc:mysql://localhost:3306/course?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
spring.datasource.username= root
spring.datasource.password= 123456spring.datasource.driver-class-name=com.mysql.jdbc.Drivermybatis.mapper-locations=classpath:/mapper/*.xmllogging.level.com.course.server.mapper=trace
4 集成 mybatis generator
4.1 添加 IDEA 插件
在父项目的 pom.xml 文件中添加
<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.7</version><configuration><configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile><overwrite>true</overwrite><verbose>true</verbose></configuration><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency></dependencies>
</plugin>
4.2 添加配置文件
然后在 server 的 resources 文件夹下面添加 generator 包,并在包中添加 generatorConfig.xml 文件,代码如下。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat"><!-- 添加后sql语句中的关键字和表用``区分--><property name="beginningDelimiter" value="`"/><property name="endingDelimiter" value="`"/><!-- 生成xml文件自动覆盖之前的文件 --><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/><!-- 生成实例类的tostring方法 --><plugin type="org.mybatis.generator.plugins.ToStringPlugin"/><!-- 删除所有注释--><commentGenerator><property name="suppressAllComments" value="true"/></commentGenerator><!--连接数据库,修改自己的数据库名用户名密码--><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/course"userId="root"password="123456"></jdbcConnection><!-- domain类的位置 --><javaModelGenerator targetProject="src/main/java"targetPackage="com.course.server.domain"/><!-- mapper xml的位置 --><sqlMapGenerator targetProject="src/main/resources"targetPackage="mapper"/><!-- mapper类的位置 --><javaClientGenerator targetProject="src/main/java"targetPackage="com.course.server.mapper"type="XMLMAPPER" /><table tableName="test" domainObjectName="Test"></table></context>
</generatorConfiguration>
在这里需要注意 domain 等 targetProject 的地址,因为我是 mac ,所以这里的路径是 src/main/java
,如果是 windows 电脑的话,需要将路径中的 /
改为 \
, 即 src\main\java
。
其中 mapper 的生成方式有三中,一般采用的是 XMLMAPPER 方式,将 Java 代码和 XML 代码分离。1.ANNOTATEDMAPPER,生成的 SQL 全在 Java 中;2.MIXEDMAPPER,生成的 SQL 部分在 Java 中;3.XMLMAPPER,生成的 SQL 全部在 XML 文件中。
4.3 添加 Maven 命令
到这里就完成了 mybatis generator 的配置,运行 mybatis-generator 会自动生成 TestExample 和 TestMapper 文件,此时因为之前设置了 mybatis-generator 插件为 overwrite 模式,所以会将之前的 TestMapper 文件覆盖,这样 TestService 文件就会报错。运行 mybatis-generator 插件后的 warning 不需要管。
4.4 使用 selectByExample 例子
现在来修改之前报错的 TestService 文件,之前的 list 方法查询表中所有的记录,可以使用新增的 selectByExample 方法,在下面生成的 TestMapper.xml 文件中可以看到,selectByExample 可以使用方法包含 distinct、order 和 xml 文件自己定义的方法。下面仅介绍一些简单的用法,详细的用法可以看这个文章写的mybatis中关于example类详解。
修改 TestService.java 文件中的 return testMapper.list();
,改为return testMapper.selectByExample(null);
,这样就可以实现之前 list 方法的查询所有记录。
public List<Test> list(){TestExample testExample = new TestExample();testExample.setOrderByClause("id desc");return testMapper.selectByExample(testExample);};
将 list 方法修改为上图后可以实现将查询结果用 id 的降序输出。
public List<Test> list(){TestExample testExample = new TestExample();testExample.createCriteria().andIdEqualTo("1");return testMapper.selectByExample(testExample);};
将 list 方法修改为上图后可以实现查询 id 为 “1” 的记录。
tip 集成热部署步骤
导入 Maven 包=》打开自动编译设置=》打开运行时编译设置
<!-- 热部署devtools --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>
以上就是本章将 mybatis 整合到 spring boot 项目的内容。