整合MyBatis Plus之前
先用IDEA创建一个基本的Spring Boot项目,删除含mvn名称的文件。
然后引入MyBatis Plus依赖和MyBatis Plus多数据源依赖以及MySQL的连接驱动。
<?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.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.evanosc</groupId>
<artifactId>bling-spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>bling-spring</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>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
开始编写项目配置文件
由于我个人比较习惯yml格式的配置,所以我将resources目录下的application.properties重命名为application.yml,在该配置文件中编写如下内容:
spring:
datasource:
dynamic:
hikari:
connection-timeout: 30000
max-lifetime: 1800000
max-pool-size: 15
min-idle: 5
connection-test-query: select 1
pool-name: DataHikariCP
primary: master
datasource:
master:
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/data_user?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
这里数据库连接池使用的是Hikari,SpringBoot2.0后官方推荐使用该连接池,特点是响应速度快。这里只配置了一个名称为master的数据源,如果要继续添加数据源的话只需要在spring.datasource.dynamic.datasource下继续添加即可。
配置MyBatis Plus
在application.yml里添加如下配置:
mybatis-plus:
type-aliases-package: com.evanosc.spring.entity
mapper-locations: classpath:mapper/*.xml
configuration:
jdbc-type-for-null: null
global-config:
banner: false
创建数据库表
使用的库表:
CREATE TABLE `t_user` (
`USER_ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`USERNAME` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
`PASSWORD` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
`DEPT_ID` bigint(20) NULL DEFAULT NULL COMMENT '部门ID',
`EMAIL` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
`MOBILE` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系电话',
`AVATAR` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像',
`DESCRIPTION` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
`STATUS` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '状态 0锁定 1有效',
`CREATE_TIME` datetime(0) NOT NULL COMMENT '创建时间',
`MODIFY_TIME` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`USER_ID`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
新建实体类User
@Data
@TableName("t_user")
public class User implements Serializable {
private static final long serialVersionUID = -4352868070794165001L;
/**
* 用户 ID
*/
@TableId(value = "USER_ID", type = IdType.AUTO)
private Long userId;
/**
* 用户名
*/
@TableField("USERNAME")
private String username;
/**
* 密码
*/
@TableField("PASSWORD")
private String password;
/**
* 部门 ID
*/
@TableField("DEPT_ID")
private Long deptId;
/**
* 邮箱
*/
@TableField("EMAIL")
private String email;
/**
* 联系电话
*/
@TableField("MOBILE")
private String mobile;
/**
* 头像
*/
@TableField("AVATAR")
private String avatar;
/**
* 描述
*/
@TableField("DESCRIPTION")
private String description;
/**
* 状态 0锁定 1有效
*/
@TableField("STATUS")
private String status;
/**
* 创建时间
*/
@TableField("CREATE_TIME")
private Date createTime;
/**
* 修改时间
*/
@TableField("MODIFY_TIME")
private Date modifyTime;
@Data 注解注解为了简化代码量。
@TableName(“t_user”)注解用于指定对应数据表的表名;@TableField用于指定数据表字段名称;@TableField(exist = false)表示非数据表字段,非数据表字段一般用于拓展查询结果;@TableId表示该字段为数据表主键。
创建Dao层
新建一个mapper包,然后在该包下新建UserMapper接口:
public interface UserMapper extends BaseMapper<User> {
}
通过继承BaseMapper,我们的Mapper接口已经包含了基础的单表增删改查方法。
定义好Dao层后,我们还需要在入口类上使用@MapperScan(“com.evanosc.spring.mapper”)注解标注:
@MapperScan("com.evanosc.spring.mapper")
@SpringBootApplication
public class BlingSpringApplication {
public static void main(String[] args) {
SpringApplication.run(BlingSpringApplication.class, args);
}
}
作用为将路径下的Mapper类都注册到IOC容器中。
创建Service层
新建一个service包,然后在该包下新建UserService接口:
public interface UserService extends IService<User> {
User queryUserByUsername(String username);
}
然后再service包下新建impl包,在该包下新建UserServiceImpl类实现UserService接口:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public User queryUserByUsername(String username) {
return baseMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getUsername, username));
}
}
创建controller层
新建一个controller包,然后在该包下新建UserController类:
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/query/user")
public User queryUserByUsername(@RequestParam("username") String username) {
return this.userService.queryUserByUsername(username);
}
}
完整的项目目录如下图所示:
启动项目访问:http://127.0.0.1:8080/query/user?username=evanosc