SpringBoot整合MyBatis
原创
©著作权归作者所有:来自51CTO博客作者WongKyunban的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.环境配置
软件名称
| 版本
| 备注
|
idea
| 2019 linux 社区版
| 下载 |
Maven
| 3.6.0
| idea要设置使用安装的这个,否则idea会用自带的maven
|
SpringBoot
| 2.2.6
| |
MySQL Workbench
| 8.0
| 数据库的可视化操作工具
|
jdk
| 1.8
| |
MyBatis
| 2.1.1
| |
MySQL
| 8.0.20
| 教程 |
2.在数据库中创建MyDB库和在Person表
- 利用MySQL Workbench创建MyDB库:
- 创建person表
3.新建Springboot项目
参考:
《纯手工创建SpringBoot项目》
3.1.项目目录结构
这个是一个可运行的MyBatis Demo的结构。接下来,我们会把每个文件的创建和作用都作详细说明。
~/Desktop/MyBatisDemo$ tree -L 8
.
├── pom.xml
└── src
└── main
├── java
│ └── com
│ └── wong
│ ├── MainApplication.java
│ ├── controller
│ │ └── PersonController.java
│ └── mybatis
│ ├── bean
│ │ └── Person.java
│ ├── mapper
│ │ └── PersonMapper.java
│ └── service
3.2.项目配置信息
3.2.1. pom.xml文件添加必要依赖
我们pom.xml至少要添加如下这些依赖:
- SpringBoot开发web项目的起步依赖;
- MySQL的jdbc驱动;
- 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>
<groupId>com.wong</groupId>
<artifactId>GroceryDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!--springboot开发web项目的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 去掉内嵌tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--mysql的jdbc驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--MyBatis整合到springboot项目-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!--日志框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<!--jetty容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>Demo</finalName>
<plugins>
<!--maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.2.2. application.yml配置数据库
通过pom.xml我们已经将工具或依整包含进项目,在通过MyBatis使用MySQL数据库前必须做一些配置:
配置文件中很必要的配置包括:
spring:
datasource:
# 基本配置
url: jdbc:mysql://127.0.0.1:3306/MyDB
username: root
password: 1qaz@4321
driver-class-name: com.mysql.jdbc.Driver
# 数据源其他配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计的filters,去掉后监控界面sql无法统计,wall用于防火墙
filters: stat,wall,slf4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties:
3.3.项目Java源码
3.3.1.创建实体类Person
package com.wong.mybatis.bean;
/**
* 人员类
*/
public class Person {
private int id;
private String name;
private int age;
//TODO getter和setter方法
@Override
public String toString() {
return "\""+this.id+"="+this.name+"="+this.age+"\"";
}
}
3.3.2.创建实体类映射器
映射器是一个接口,要使用其成为映射器必须在加上@Mapper注解,标注的映射器将交给Spring容器管理,Spring会自动创建映射器并放入Spring容器中。要使用这个映射器只需要使用@Autowired注解将Spring容器中的实例注入到本地变量中即可。本demo是使用注解的方式来使用MyBatis的,可以将其转换成使用xml的方式。
package com.wong.mybatis.mapper;
import com.wong.mybatis.bean.Person;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface PersonMapper {
// 增加
@Insert("insert into person(id,name,age) values(#{id},#{name},#{age})")
int insert(Person person);
// 删除
@Delete("delete from person where id = #{id}")
int deleteByPrimaryKey(Integer id);
// 修改
@Update("update person set name = #{name},age = #{age} where id = #{id}")
int updateByPrimaryKey(Person person);
// 查询
@Select("select id,name,age from person where id=#{id}")
Person selectByPrimaryKey(Integer id);
@Select("select id,name,age from person")
List<Person> selectAllPerson();
}
3.3.3.创建服务
根据面向接口编程的原则,我们先定义一个接口PersonService:
package com.wong.mybatis.service;
import com.wong.mybatis.bean.Person;
import java.util.List;
public interface PersonService {
// 增加
int insertPerson(Person person);
// 删除
int deletePersonById(Integer id);
// 修改
int updatePersonById(Person person);
// 查询
Person selectPersonById(Integer id);
List<Person> selectAllPerson();
}
再创建服务的实现类:可以在此类中实现复杂的业务
在实现类使用@Service注解,标注的实现类将交给Spring容器管理,spring容器会为其创建对象。可以使用@Autowired将Spring容器中的对象注入到本地变量。
@Autowired注解是用来修饰变量的,写在变量上面,并且由系统底层代理创建这个变量的实例,并注入到这个类中,就不用我们自己手动去创建对象。
package com.wong.mybatis.service;
import com.wong.mybatis.bean.Person;
import com.wong.mybatis.mapper.PersonMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PersonServiceImpl implements PersonService{
@Autowired
private PersonMapper personMapper;
@Override
public int insertPerson(Person person) {
return personMapper.insert(person);
}
@Override
public int deletePersonById(Integer id) {
return personMapper.deleteByPrimaryKey(id);
}
@Override
public int updatePersonById(Person person) {
return personMapper.updateByPrimaryKey(person);
}
@Override
public Person selectPersonById(Integer id) {
return personMapper.selectByPrimaryKey(id);
}
@Override
public List<Person> selectAllPerson() {
return personMapper.selectAllPerson();
}
}
3.3.4.创建Controller使用服务
package com.wong.controller;
import com.wong.mybatis.bean.Person;
import com.wong.mybatis.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class PersonController {
// 通过@Autowired将PersonService的实例注入进来,其实就是PersonServiceImpl实例
@Autowired
private PersonService personService;
// add
@RequestMapping(value = "/add")
public String addStudents(){
Person student = new Person();
student.setName("Tom");
student.setAge(12);
int rs = personService.insertPerson(student);
return "插入结果:"+rs;
}
// select
@RequestMapping(value = "/findAll")
public String findAllStudents(){
List<Person> students = personService.selectAllPerson();
students.stream().forEach(System.out::println);
return students.toString()+"";
}
}
4.运行项目并测试
4.1.运行项目
~/Desktop/MyBatisDemo$ mvn clean spring-boot:run
4.2.测试
添加记录:
查询记录:
Demo下载