MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
现在搭建一个简单的demo,通过mybatis配置获取数据库数据。
项目结构:
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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sinosoft</groupId>
<artifactId>mybatis-generator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis-generator</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</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>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!--允许移动生成的文件 -->
<verbose>true</verbose>
<!-- 是否覆盖 -->
<overwrite>true</overwrite>
<!-- 自动生成的配置文件路径。启动插件时,插件会根据这里配置的路径去找到generatorConfig.xml配置文件,
根据配置文件里的配置,去自动生成Mapper接口(可以理解为Dao层)、实体类、Mapper.xml文件
-->
<configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
application.properties配置文件如下:
server.port=8888
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/scott?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=123456
#映射到dao层(即mapper生成的位置)
mybatis.type-aliases-package=com.sinosoft.mybatisgenerator.dao
#mapper.xml文件生成位置
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
接下来重点查看自动生成所需的配置文件generatorConfig.xml的配置:
<?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>
<!--加载配置文件,为下面读取数据库信息准备-->
<properties resource="application.properties"/>
<!--defaultModelType="flat" 大数据字段,不分表 -->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="utf-8"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
<property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳-->
</commentGenerator>
<!--数据库链接地址账号密码,这里是读取application.properties配置文件的。
如果你的项目配置文件用的是yml格式的,则如下写法是读取不到,需手动填写完整
-->
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
</jdbcConnection>
<!-- 类型转换 -->
<javaTypeResolver>
<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成Model类存放位置,即实体类存放路径 -->
<javaModelGenerator targetPackage="com.sinosoft.mybatisgenerator.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成mapper.xml文件,mapper.xml存放路径 -->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 生成mapper.xml对应得接口,也就是dao层 -->
<javaClientGenerator targetPackage="com.sinosoft.mybatisgenerator.dao" targetProject="src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!--以下就是需自动生成mapper.xml文件等表,配置哪些表,就自动生成哪些表那些文件。-->
<table tableName="auth_client" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
<table tableName="auth_client_service" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
</context>
</generatorConfiguration>
注:数据库链接地址账号密码,这里是读取application.properties配置文件的。如果你的项目配置文件用的是yml格式的,则如下写法是读取不到,需手动填写完整。
在这里会使用插件mybatis-generator根据表结构自动生成mybatis xml文件和mapper、实体类。插件如下:
右键–>点击Run mybatis-generator:generate就会自动生成如下图所示的文件
:
启始类中配置如下:
@SpringBootApplication
@MapperScan(basePackages = "com.sinosoft.mybatisgenerator.dao")
public class MybatisGeneratorApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisGeneratorApplication.class, args);
}
}
添加标签@MapperScan(basePackages = “com.sinosoft.mybatisgenerator.dao”)
在启动得时候,会自动去扫描com.sinosoft.mybatisgenerator.dao路径下mapper接口,即dao层。
在自动生成mapper接口类中添加标签@Mapper
@Mapper
public interface AuthClientMapper {
int deleteByPrimaryKey(Integer id);
int insert(AuthClient record);
AuthClient selectByPrimaryKey(Integer id);
List<AuthClient> selectAll();
int updateByPrimaryKey(AuthClient record);
}
再写一个service,定义mapper接口中的所有方法。
public interface AuthClientService {
int deleteByPrimaryKey(Integer id);
int insert(AuthClient record);
AuthClient selectByPrimaryKey(Integer id);
List<AuthClient> selectAll();
int updateByPrimaryKey(AuthClient record);
}
接着写一个实现类,实现service中所有的方法:
@Service
public class AuthClientServiceImpl implements AuthClientService {
/*在实现类中必须引用mapper接口,通过接口的方法映射到mapper.xml文件
中配置的方法来获取数据库表的数据
*/
@Autowired
private AuthClientMapper mapper;
@Override
public int deleteByPrimaryKey(Integer id) {
return 0;
}
@Override
public int insert(AuthClient record) {
return 0;
}
@Override
public AuthClient selectByPrimaryKey(Integer id) {
return mapper.selectByPrimaryKey(id);
}
@Override
public List<AuthClient> selectAll() {
return null;
}
@Override
public int updateByPrimaryKey(AuthClient record) {
return 0;
}
}
注:注意添加标签@Service。在实现类中必须引用mapper接口,通过接口的方法映射到mapper.xml文件中配置的方法来获取数据库表的数据。
最后写一个controller,向外暴露一个访问接口,来实现对数据库表时间的读取:
@RestController
public class AuthClientControl {
@Autowired
private AuthClientServiceImpl mapper;
@RequestMapping("/getAuthClient")
public String getAuthClient(@RequestParam(value = "id") Integer id){
AuthClient authClient = mapper.selectByPrimaryKey(id);
return authClient.getSecret();
}
}
最后运行项目,访问http://localhost:8888/getAuthClient?id=1
页面打印出所有数据:
至此 表明成功!