准备工作
- IntelliJ IDEA旗舰版2019.3.2
- MySQL 8.0.19
创建一个表
在数据库demo中创建一个user表,包含字段id,name,gender
想偷懒的话在MySQL命令行粘贴下面的内容:
create database if not exists demo character set utf8;
use demo;
create table user(id int,name varchar(20),gender varchar(1));
insert into user(id,name,gender) values(01,'张三','男');
insert into user(id,name,gender) values(02,'李四','女');
insert into user(id,name,gender) values(03,'王五','男');
select id,name from user;
返回如下信息
mysql> select id,name from user;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+------+------+
3 rows in set (0.00 sec)
搭建Spring Boot框架
参照上一篇文章
pom.xml中添加如下依赖,注意自己的MySQL版本
<!-- 添加 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>
<!-- 我的版本是8.0.19 -->
<version>8.0.19</version>
</dependency>
resources\application.properties中添加下列语句连接数据库
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.type-aliases-package=com.example.demo.mapper
- spring.datasource.url 数据库连接字符串,3306是MySQL的端口,demo是表所在的库,后面的参数直接复制就好了,之前有个时区参数忘记加上去总是报错
- spring.datasource.username 数据库用户名
- spring.datasource.password 数据库密码
- spring.datasource.driver-class-name 驱动类型(注意MySQL 8.0的值是com.mysql.cj.jdbc.Driver和之前不同)
- mybatis.type-aliases-package 配置mapper包名,这个到看后面就知道了
源文件编写
简单一些,我们分为三部分:实体类、Mapper接口、Controller类,Controller类直接调用Mapper接口进行数据持久化处理
实体类
新建一个entity包,新建一个User类
package com.example.demo.entity;
public class User {
private int id;
private String name;
private String gender;
//全都是private那咋处理嘛,不要着急,往下看
}
右键-Generate…-Getter and Setter
或
Alt
+Insert
+Getter and Setter
全都选上点击OK
,IDEA就是这么舒服
Mapper接口
我们新建一个mapper包
在这个包新建一个UserMapper接口,利用注解实现SQL指令
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
@Select("SELECT * FROM user")
@Results({
@Result(property = "name", column = "name")
})
List<User> getAll();
@Select("select * from user where id=#{id}")
User getById(int id);
@Insert({"insert into user(id,name,gender) values(#{id},#{name},#{gender})"})
void install(User user);
@Update({"update user set name=#{name},gender=#{gender} where id=#{id}"})
void Update(User user);
@Delete("delete from user where id=#{id}")
void delete(int id);
}
@Select 查询注解
@Result 结果集标识,用来对应数据库列名的,如果实体类属性和数据库属性名保持一致,可以忽略此参数
@Insert 插入注解
@Update 修改注解
@Delete 删除注解
Controller类
package com.example.demo.web;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/getAll")
public List<User> getAll(){
return userMapper.getAll();
}
@GetMapping("/install")
public List<User> install(User user){
userMapper.install(user);
return userMapper.getAll();
}
@GetMapping("/delete")
public List<User> delete(int id){
userMapper.delete(id);
return userMapper.getAll();
}
@GetMapping("/update")
public List<User> update(User user){
userMapper.Update(user);
return userMapper.getAll();
}
@GetMapping("/get")
public User get(int id){
return userMapper.getById(id);
}
}
测试
查询所有数据
http://localhost:8080/getAll
为了美观其实可以写个toString方法变成换行输出,这里纯粹偷懒
增加数据
http://localhost:8080/install?id=4&name=孙六&gender=男
删除数据
http://localhost:8080/delete?id=4
修改数据
http://localhost:8080/update?id=3&name=王六&gender=女
后续可以完善模糊查找之类的