文章目錄
本示例項目代碼下載下傳位址:
https://download.csdn.net/download/mouday/12662948使用Spring Initializer建立SpringBoot工程,隻用如下依賴
Web
MySQL
MyBatis

$ tree
.
├── pom.xml
└── src
└── main
├── java
│ └── com
│ └── mouday
│ └── demo
│ ├── Application.java
│ ├── controller
│ │ └── PersonController.java
│ ├── mapper
│ │ ├── PersonMapper.java
│ │ └── PersonMapper.xml
│ ├── pojo
│ │ └── Person.java
│ └── service
│ ├── PersonService.java
│ └── impl
│ └── PersonServiceImpl.java
└── resources
├── application.yml
├── generator
│ └── generatorConfig.xml
├── sql
│ └── person.sql
├── static
└── templates
3個配置檔案和1個建表語句檔案
pom.xml # 項目依賴
application.yml # 項目配置
generatorConfig.xml # 自動代碼生成配置
person.sql # 建表語句
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 https://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.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mouday</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</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-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- 資料庫連接配接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--使用durid連接配接池的依賴-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.1</version>
</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>
<build>
<resources>
<!--編譯src/main/java目錄下的xml檔案-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<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.5</version>
<configuration>
<configurationFile>${basedir}/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.20</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
application.yml
# 設定端口
server:
port: 8080
# 設定資料源
spring:
datasource:
url: jdbc:mysql://localhost:3306/data
username: root
password: 123456
# 連接配接池類型
type: com.alibaba.druid.pool.DruidDataSource
# 驅動
driver-class-name: com.mysql.cj.jdbc.Driver
# 連接配接池配置
druid:
# 最小數
min-idle: 5
# 最大數
max-active: 20
# 初始大小
initial-size: 5
# 配置擷取連接配接等待逾時時間
max-wait: 6000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接配接,機關是毫秒
time-between-eviction-runs-millis: 60000
# 配置一個連接配接在池中最小生存時間 機關為毫秒
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打開 PSCache,并且指定每個連接配接上PSCache的大小
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,wall用于防火牆
filters: stat,wall
# 配置mybatis
mybatis:
# mapper-locations: classpath:mappers/*.xml
# 全局的映射,不用在xml檔案寫實體類的全路徑
# type-aliases-package: com.mouday.demo.pojo
configuration:
# 開啟駝峰映射
map-underscore-to-camel-case: true
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>
<context id="default" targetRuntime="MyBatis3">
<!--建立class時,對注釋進行控制-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- jdbc的資料庫連接配接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/data"
userId="root"
password="123456">
</jdbcConnection>
<!-- 非必需,類型處理器,在資料庫類型和java類型之間的轉換控制 -->
<javaTypeResolver>
<!-- 是否使用BigDecimals,false可自動轉化以下類型(Long Integer Short等) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- Model模型生成器-->
<javaModelGenerator targetPackage="com.mouday.demo.pojo"
targetProject="src/main/java">
<!--是否允許子包,即targetPackage.schemaName.tableName-->
<property name="enableSubPackages" value="true"/>
<!-- 是否對類CHAR類型的列的資料進行trim操作 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- Mapper映射檔案的包名和位置-->
<sqlMapGenerator targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 用戶端代碼-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是資料庫中的表名或視圖名 domainObjectName是實體類名-->
<table tableName="person"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
person.sql
CREATE TABLE `person` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL
)
$ mvn mybatis-generator:generate
生成3個檔案
Person.java # model
PersonMapper.java # mapper接口
PersonMapper.xml # sql映射
Person.java
package com.mouday.demo.pojo;
public class Person {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
PersonMapper.java
package com.mouday.demo.mapper;
import com.mouday.demo.pojo.Person;
public interface PersonMapper {
int deleteByPrimaryKey(Integer id);
int insert(Person record);
int insertSelective(Person record);
Person selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Person record);
int updateByPrimaryKey(Person record);
}
PersonMapper.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.mouday.demo.mapper.PersonMapper">
<resultMap id="BaseResultMap" type="com.mouday.demo.pojo.Person">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="age" jdbcType="INTEGER" property="age" />
</resultMap>
<sql id="Base_Column_List">
id, name, age
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from person
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from person
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.mouday.demo.pojo.Person">
insert into person (id, name, age
)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}
)
</insert>
<insert id="insertSelective" parameterType="com.mouday.demo.pojo.Person">
insert into person
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="age != null">
age,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
#{age,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.mouday.demo.pojo.Person">
update person
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
age = #{age,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.mouday.demo.pojo.Person">
update person
set name = #{name,jdbcType=VARCHAR},
age = #{age,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
對外服務接口
PersonService.java # 接口
PersonServiceImpl.java # 實作
PersonController.java # 控制器
PersonService.java
package com.mouday.demo.service;
import com.mouday.demo.pojo.Person;
public interface PersonService {
int deleteByPrimaryKey(Integer id);
int insert(Person record);
int insertSelective(Person record);
Person selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Person record);
int updateByPrimaryKey(Person record);
}
PersonServiceImpl.java
package com.mouday.demo.service.impl;
import com.mouday.demo.mapper.PersonMapper;
import com.mouday.demo.pojo.Person;
import com.mouday.demo.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
private PersonMapper personMapper;
@Override
public int deleteByPrimaryKey(Integer id) {
return personMapper.deleteByPrimaryKey(id);
}
@Override
public int insert(Person record) {
return personMapper.insert(record);
}
@Override
public int insertSelective(Person record) {
return personMapper.insertSelective(record);
}
@Override
public Person selectByPrimaryKey(Integer id) {
return personMapper.selectByPrimaryKey(id);
}
@Override
public int updateByPrimaryKeySelective(Person record) {
return personMapper.updateByPrimaryKeySelective(record);
}
@Override
public int updateByPrimaryKey(Person record) {
return personMapper.updateByPrimaryKey(record);
}
}
PersonController.java
package com.mouday.demo.controller;
import com.mouday.demo.pojo.Person;
import com.mouday.demo.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/person")
public class PersonController {
@Autowired
private PersonService personService;
@GetMapping("/selectByPrimaryKey")
public Person selectByPrimaryKey(Integer id){
return personService.selectByPrimaryKey(id);
}
}
package com.mouday.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
@MapperScan("com.mouday.demo.mapper") // 指定mapper掃描包
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping("/")
public String index(){
return "hello";
}
}
請求和傳回結果
GET http://localhost:8080/person/selectByPrimaryKey?id=1
{
id: 1,
name: "劉禅",
age: 26
}
參考
SpringBoot內建MyBatis及使用mybatis-generator-plugin生成代碼(完美,步驟巨詳細)