SpringBoot整合mybatis技术
MyBatis是一款优秀的持久层框架,支持定制化SQL、存储过程以及高级映射。在Spring Boot 中,MyBatis 官方提供了一套自动化配置方案,可以做到MyBatis开箱即用。以下是SpringBoot整合Mybatis技术的实施步骤。
1.在pom.xml中添加mybatis起步依赖
<!-- Mybatis依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
2.在pom.xml中添加数据库驱动
<!-- MySql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
3.配置数据库连接信息
在resources/application.yml中添加数据库的连接信息
spring:
#数据库配置
datasource:
url: jdbc:mysql://localhost:3306/myshop?serverTimezone=Asia/Shanghai&allowMultiQueries=true #设置mysql支持批量操作
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
dbcp2:
min-idle: 5
initial-size: 5
max-total: 5
max-wait-millis: 150
4.创建数据库和表对象
4.1新建数据库 myshop
建议在本机安装phpStudy这样的集成开发工具,选择安装mysql5.7(不建议用高版本),启动mysql。
再在本机安装Navicat这样的数据库客户端工具,连接mysql后新建数据库myshop
注意
新建的数据库字符集和排序规则选utf8。
4.2新建user表
通过Navicat这样的数据库客户端工具,在myshop数据库中创建user表。
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(32) NOT NULL DEFAULT '' COMMENT '用户名',
`password` varchar(32) NOT NULL DEFAULT '' COMMENT '密码',
`salt` varchar(32) NOT NULL DEFAULT '' COMMENT '密码salt',
`gender` tinyint(1) NOT NULL DEFAULT '1' COMMENT '性别',
`email` varchar(100) NOT NULL DEFAULT '' COMMENT '邮箱',
`phone` varchar(32) NOT NULL DEFAULT '' COMMENT '电话',
`avatar` varchar(128) DEFAULT NULL COMMENT '头像',
`nick_name` varchar(128) DEFAULT NULL COMMENT '昵称',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(256) DEFAULT NULL COMMENT '备注',
`status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4;
INSERT INTO `user` VALUES ('7', 'dingding', '9fb4c2e34fcbd2fc5008a8de5e5c931c', 'ba822567fe8505e2dfffe81e578e1d0c', '0', 'watchping@163.com', '15958880027', 'http://zjffxxmt.oss-cn-hangzhou.aliyuncs.com/upload/client/2365d1b803c5474385704e4bf7e18330.png', '238', '2021-05-30 12:33:31', '2022-10-02 13:00:30', '123456', '0');
INSERT INTO `user` VALUES ('8', 'dangdang', '9fb4c2e34fcbd2fc5008a8de5e5c931c', 'ba822567fe8505e2dfffe81e578e1d0c', '0', 'watch@163.com', '15958880027', '/images/user_default.png', 'dangdang', '2021-06-07 21:46:29', null, '123456', '0');
INSERT INTO `user` VALUES ('9', 'dingding2', '9fb4c2e34fcbd2fc5008a8de5e5c931c', 'ba822567fe8505e2dfffe81e578e1d0c', '1', 'watchping@163.com', '15958880027', '/images/user_default.png', '', '2021-06-11 14:51:37', null, '123456', '0');
INSERT INTO `user` VALUES ('10', 'dingding4', '9fb4c2e34fcbd2fc5008a8de5e5c931c', 'ba822567fe8505e2dfffe81e578e1d0c', '1', 'Wabc@13.com', '13968290224', '/images/user_default.png', 'show-password', '2021-11-30 12:12:05', null, '123456', '0');
INSERT INTO `user` VALUES ('13', 'admin', '9fb4c2e34fcbd2fc5008a8de5e5c931c', 'ba822567fe8505e2dfffe81e578e1d0c', '1', 'admin@163.com', '13438080338', '/images/admin_default.png', null, '2021-12-01 19:19:40', null, '123456', '0');
5.创建实体Bean
在项目包路径下,新建一个entity包,创建user表对应的实体类User.java。
package com.zjff.myshop.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class User {
private Integer id;//编号
private String name;//用户名
private String password;//密码
private String salt;//加密佐料
private Boolean gender;//性别
private String email;//邮箱
private String phone;//手机号
private String avatar;//头像
private String nickName;//昵称
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;//创建时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;//更新时间
private String remark;//备注
}
在类上添加@Data注解后,类属性自动添加对应的set\get的方法。为此需要在pox.xml文件中添加依赖。
<!-- Lombok插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
Lombok插件的具体使用,请自行百度
6.创建UserMapper接口类。
新建包com.zjff.myshop.mapper,在包中创建UserMapper接口类。代码如下:
package com.zjff.myshop.mapper;
import com.zjff.myshop.entity.User;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
List<User> selectAll();
}
@Mapper注解标记该类是一个mybatis的mapper接口,可以被SpringBoot自动扫描到Spring上下文中。
7.配置Mapper映射文件
在src\main\resources\mapper路径下新建UserMapper.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.zjff.myshop.mapper.UserMapper">
<!-- 查询所有用户记录-->
<select id="selectAll" resultType="com.zjff.myshop.entity.User">
select * from user
</select>
</mapper>
8.在application.yml中添加mybatis的信息
# Spring集成Mybatis环境
mybatis:
# pojo别名扫描包
typeAliasesPackage: com.zjff.**.entity
# 加载Mybatis映射文件
mapperLocations: classpath:mapper/**/*Mapper*.xml
9.编写Controller
新建包com.zjff.myshop.api.front,在包中创建UserController类。代码如下:
package com.zjff.myshop.api.front;
import com.zjff.myshop.entity.User;
import com.zjff.myshop.mapper.UserMapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/app/v1/user")
public class UserController {
@Resource
private UserMapper userMapper;
@GetMapping("/selectAll")
public List<User> selectAll() {
List<User> userList = userMapper.selectAll();
return userList;
}
}
用到几个注解,说明如下:
注解 | 说明 |
---|---|
@RestControllers | 是@controller和@ResponseBody 的结合。@Controller 将当前修饰的类注入SpringBoot IOC容器,@ResponseBody 指该类中所有的API接口返回的数据,会以Json字符串的形式返回给客户端 |
@RequestMapping | 用来处理地址映射请求的注解,可以用于方法或者类上以产生对应的路径 |
@Resource | @Autowride是先到容器查找类型,如果该类型只有一个那么就直接注入,有多个时再根据名字找。@Resource是先到容器按照名字查找,同一名字只有一个则直接注入,同名不同类时则再按照类型查找。 |
@GetMapping | @GetMapping用于处理GET类型的请求方法 |
10.测试
启动项目后。浏览器中上输入:localhost:5050/app/v1/user/selectAll
浏览器显示所有用户的信息数据,如图所示。
到此整合mybatis就成功了。
重要说明
这里UserController层直接注入的是数据层的UserMapper接口,不是很规范,最佳实践应该是再新建UserService接口和实现类UserServiceImpl,在UserController中注入UserService。