此处提供IDEA-SpringBoot-总目录链接,可查看整个项目过程其他步骤文章:点击此处跳转至总目录链接
此处提供IDEA-SpringBoot-总目录链接,可查看整个项目过程其他步骤文章:点击此处跳转至总目录链接
此处提供IDEA-SpringBoot-总目录链接,可查看整个项目过程其他步骤文章:点击此处跳转至总目录链接
十、SpringBoot-集成MyBatis
处理思路及开发流程如下:
目标:快速实现查询数据库中某张表数据
- 引用依赖,创建测试数据库
- 配置Generator生成工具环境
- 使用Generator工具生成接口、映射文件以及实体 bean
- 实现代码
1.引用依赖
pom.xml
<!--MyBatis 整合 SpringBoot 的起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
Oracle和MySql根据实际情况选择
<!--Oracle起步依赖-->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
</dependency>
<!--MySQL 的驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
测试数据库如下:
ERROR_CODE | ERROR_MESSAGE |
---|---|
000001 | 信息1 |
000002 | 信息2 |
000003 | 信息3 |
000004 | 信息4 |
000005 | 信息5 |
2.配置Generator
创建 GeneratorMapper.xml 文件在项目根目录下,与src同级目录
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 指定连接数据库的JDBC驱动包所在位置,指定到你本机的完整路径,需确保本地路径下存在该jar -->
<classPathEntry location="Oracle驱动包ojdbc或者MySql驱动包mysql-connector-java的绝对路径地址"/>
<!-- 配置table表信息内容体,targetRuntime指定采用MyBatis3的版本 -->
<context id="tables" targetRuntime="MyBatis3">
<!-- 抑制生成注释,由于生成的注释都是英文的,可以不让它生成 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- Oracle配置数据库连接信息 -->
<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:port/xxxxx"
userId="xxxxx"
password="xxxxx">
</jdbcConnection>
<!-- MySql配置数据库连接信息 -->
<!--
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://xxx.xxx.xxx.xxx:port/xxxxx"
userId="xxxxx"
password="xxxxx">
</jdbcConnection>
-->
<!-- 生成model类,targetPackage指定model类的包名, targetProject指定生成的model放在eclipse的哪个工程下面-->
<javaModelGenerator targetPackage="com.springboot.model" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="false" />
</javaModelGenerator>
<!-- 生成MyBatis的Mapper.xml文件,targetPackage指定mapper.xml文件的包名, targetProject指定生成的mapper.xml放在eclipse的哪个工程下面 -->
<sqlMapGenerator targetPackage="com.springboot.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成MyBatis的Mapper接口类文件,targetPackage指定Dao接口类的包名, targetProject指定生成的Mapper接口放在eclipse的哪个工程下面 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.springboot.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据库表名及对应的Java模型类名 -->
<table tableName="FM_ERROR"
domainObjectName="FmError"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
pom.xml
<!--mybatis Generator 代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>GeneratorMapper.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
3.使用Generator工具生成接口、映射文件以及实体 bean
选择Maven操作窗口,执行生成工具
项目目录下对应文件夹生成文件即可
FmError.java
映射数据库中的字段
public class FmError {
private String errorCode;
private String errorMessage;
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
}
FmErrorMapper.java
默认4种类型6个方法,其中带Selective的方法,SQL会根据传参是否为空选择性地执行
public interface FmErrorMapper {
int deleteByPrimaryKey(String errorCode);
int insert(FmError record);
int insertSelective(FmError record);
FmError selectByPrimaryKey(String errorCode);
int updateByPrimaryKeySelective(FmError record);
int updateByPrimaryKey(FmError record);
}
FmErrorMapper.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="com.springboot.mapper.FmErrorMapper">
<resultMap id="BaseResultMap" type="com.springboot.model.FmError">
<!--包含id及其他result,id必须是库表主键字段-->
<id column="ERROR_CODE" jdbcType="VARCHAR" property="errorCode" />
<result column="ERROR_MESSAGE" jdbcType="VARCHAR" property="errorMessage" />
</resultMap>
<!--默认查询列-->
<sql id="Base_Column_List">
ERROR_CODE, ERROR_MESSAGE
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from FM_ERROR
where ERROR_CODE = #{errorCode,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from FM_ERROR
where ERROR_CODE = #{errorCode,jdbcType=VARCHAR}
</delete>
<insert id="insert" parameterType="com.springboot.model.FmError">
insert into FM_ERROR (ERROR_CODE, ERROR_MESSAGE)
values (#{errorCode,jdbcType=VARCHAR}, #{errorMessage,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.springboot.model.FmError">
insert into FM_ERROR
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="errorCode != null">
ERROR_CODE,
</if>
<if test="errorMessage != null">
ERROR_MESSAGE,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="errorCode != null">
#{errorCode,jdbcType=VARCHAR},
</if>
<if test="errorMessage != null">
#{errorMessage,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.springboot.model.FmError">
update FM_ERROR
<set>
<if test="errorMessage != null">
ERROR_MESSAGE = #{errorMessage,jdbcType=VARCHAR},
</if>
</set>
where ERROR_CODE = #{errorCode,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKey" parameterType="com.springboot.model.FmError">
update FM_ERROR
set ERROR_MESSAGE = #{errorMessage,jdbcType=VARCHAR}
where ERROR_CODE = #{errorCode,jdbcType=VARCHAR}
</update>
</mapper>
4.实现代码
application.properties
#根据实际情况选择连接信息
#Oracle连接配置
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:port/xxxxx
spring.datasource.username=xxxxx
spring.datasource.password=xxxxx
#MySql连接配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxx.xxx.xxx.xxx:port/xxxxx
spring.datasource.username=xxxxx
spring.datasource.password=xxxxx
FmErrorService.java
public interface FmErrorService {
// 获取错误信息
FmError qryMessage(String id);
}
FmErrorServiceImpl.java
@Service // 业务层注解
public class FmErrorServiceImpl implements FmErrorService {
@Autowired // 注入依赖,自动装配
private FmErrorMapper fmErrorMapper;
@Override
public FmError qryMessage(String id) {
return fmErrorMapper.selectByPrimaryKey(id);
}
}
FmErrorController.java
@Controller
public class FmErrorController {
@Autowired
private FmErrorService fmErrorService;
@RequestMapping(value = "/show")
@ResponseBody
public Object show(){
FmError fmError = fmErrorService.qryMessage("000001");
return fmError;
}
}
直到这步之后还需要配置一些注解,有三种方式:
- 在mapper类中配置@Mapper,此注解作用是mybatis 自动扫描数据持久层的映射文件及 DAO 接口的关系
@Mapper
public interface FmErrorMapper {
- 在Application 上加@MapperScan(“com.abc.springboot.mapper”)
@MapperScan("com.springboot.mapper")
public class Application {
- 在Application 上加@MapperScan(basePackages = “com.springboot.mapper”)
@MapperScan(basePackages = "com.springboot.mapper")
public class Application {
因为 SpringBoot 不能自动编译接口映射的 xml 文件,因此有两种解决方式:
- 手动在 pom 文件中指定
<!--Mybatis 的 xml 映射文件编译到指定目录-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
- 将映射文件直接放到 resources/mapper 目录下,并在application.properties中添加配置,指定xml资源位置,
# 指定 Mybatis 映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml