环境:
- SpringBoot版本:2.2.6.RELEASE
- Mybatis版本:2.1.2
- 逆向工程依赖generator版本:1.3.6
- 分页依赖pagehelper版本:1.2.3
创建一个SpringBoot工程
使用Idea创建SpringBoot工程(过程略)
pom.xml
<dependencies>
<!-- 数据库连接依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mybatis-generator-core: Mybatis逆向工程核心包 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
<!-- 逆向工程依赖的日志包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!-- mybatis的 pagehelper分页插件依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.github.pagehelper</groupId>-->
<!-- <artifactId>pagehelper</artifactId>-->
<!-- <version>5.1.2</version>-->
<!-- </dependency>-->
<!-- 数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- loomBok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
mbg.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>
<!--
targetRuntime="MyBatis3Simple":生成简单版的CRUD
MyBatis3:豪华版
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- jdbcConnection:指定如何连接到目标数据库 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?
serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true"
userId="root"
password="root">
</jdbcConnection>
<!-- -->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- javaModelGenerator:指定javaBean的生成策略
targetPackage="test.model":目标包名
targetProject="\MBGTestProject\src":目标工程
-->
<javaModelGenerator targetPackage="com.liujie.bean"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- sqlMapGenerator:sql映射生成策略: -->
<sqlMapGenerator targetPackage="com.liujie.dao"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- javaClientGenerator:指定mapper接口所在的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.liujie.dao"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 指定要逆向分析哪些表:根据表要创建javaBean -->
<table tableName="dept" domainObjectName="Dept"></table>
<table tableName="employee" domainObjectName="Employee"></table>
</context>
</generatorConfiguration>
application.yml
server:
port: 8080
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
mybatis:
# 指定Mapper文件路径
mapper-locations: classpath:mapping/*Mapper.xml
# 指定PoJo对象路径,并起别名
type-aliases-package: com.liujie.bean
# 配置mybatis的分页插件信息
#数据库
pagehelper:
helperDialect: mysql
reasonable: true
support-methods-arguments: true
page-size-zero: true
params=count: countSql
#showSql
logging:
level:
com:
example:
mapper: debug
创建数据库表:
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`d_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `d_id` (`d_id`),
CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`d_id`) REFERENCES `dept` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8
编写逆向工程代码,自动生成Javabean对象、Mapper文件以及Dao文件:
Generator.java
package com.liujie;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Generator {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
/**指向逆向工程配置文件*/
File configFile = new File("src/main/resources/generationConfig.xml");
// File configFile = new File("src/main/resources/mbg.xml");
ConfigurationParser parser = new ConfigurationParser(warnings);
Configuration config = parser.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
Generator generatorSqlmap = new Generator();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
原始工程目录结构:

运行Generator.java的main方法,生成Mapper文件、Dao文件以及JavaBean后,目录结构

将mapper文件放入到application。yml文件指定的文件夹内后的目录结构

修改JavaBean文件,加入注解
@Data
@AllArgsConstructor
@NoArgsConstructor
该步骤需要依赖LoomBok配置,可以跳过(跳过需要使用手动添加构造方法以及set\get\toString方法)

在生成的Mapper上添加注解:@Mapper(该注解的作用是让Spring额能够扫描到该Dao文件)

编写service层 EmployeeService.java
package com.liujie.service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liujie.bean.Employee;
import com.liujie.bean.EmployeeExample;
import com.liujie.dao.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
public Employee findById(Integer id) {
return employeeMapper.selectByPrimaryKey(id);
}
/**
* 多条件组合查询
* @param example
* @return
*/
public List<Employee> selectByExample(EmployeeExample example) {
example = new EmployeeExample();
EmployeeExample.Criteria criteria = example.createCriteria();
criteria.andEmailLike("%8%");
EmployeeExample.Criteria criteria1 = example.createCriteria();
criteria1.andGenderEqualTo("1");
example.or(criteria1);
return employeeMapper.selectByExample(example);
}
/**
* 多条件组合分页查询
* @param
* @return
*/
public PageInfo<Employee> queryByPage() {
PageHelper.startPage(2, 2);
EmployeeExample example = new EmployeeExample();
EmployeeExample.Criteria criteria = example.createCriteria();
criteria.andEmailLike("%8%");
EmployeeExample.Criteria criteria1 = example.createCriteria();
criteria1.andGenderEqualTo("1");
example.or(criteria1);
List<Employee> employees = employeeMapper.selectByExample(example);
PageInfo<Employee> pageInfo = new PageInfo<Employee>(employees);
System.out.println(pageInfo);
return pageInfo;
}
public PageInfo<Employee> queryByPage1() {
PageHelper.startPage(1, 2);
List<Employee> employees = employeeMapper.selectByExample(null);
PageInfo<Employee> pageInfo = new PageInfo<Employee>(employees);
System.out.println(pageInfo);
return pageInfo;
}
}
编写controller层 EmployeeController.java
package com.liujie.controller;
import com.github.pagehelper.PageInfo;
import com.liujie.bean.Employee;
import com.liujie.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("emp")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@GetMapping("/findById/{id}")
public Employee example(@PathVariable("id") Integer id){
System.out.println("id="+id);
Employee employee = employeeService.findById(id);
System.out.println(employee);
return employee;
}
@GetMapping("/selectByExample")
public List<Employee> findById(){
return employeeService.selectByExample(null);
}
@GetMapping("/queryByPage")
public PageInfo<Employee> queryByPage(){
return employeeService.queryByPage();
}
@GetMapping("/queryByPage1")
public PageInfo<Employee> queryByPage1(){
return employeeService.queryByPage1();
}
}
启动类 Application.java
package com.liujie;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.liujie") //扫描的mappe
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
启动项目访问对应的接口,即可
项目示例已上传到GitHub:https://github.com/liujie1122/mybatis_spring_boot_start.git
6959



被折叠的 条评论
为什么被折叠?



