一、准备
新建Spring Boot项目
1.见文章
2.引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.0</version>
</dependency>
</dependencies>
3.配置application.yml(根据自己的配置调整)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo
username: demo
password: demo
mybatis-plus:
configuration:
#控制台打印完整带参数SQL语句
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#mapper映射文件路径
mapper-locations: mapper/**.xml
4.添加@MapperScan
/**
* @author zhangz1
*/
@MapperScan("com.zhangz1.springbootdemo.mapper")
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SpringBootDemoApplication.class);
springApplication.run(args);
}
}
项目结构:
二、实现
1.数据库表结构:
create table user
(
id int(5) auto_increment
primary key,
username varchar(10) not null,
password varchar(20) not null
);
2.给表赋值
例值
`INSERT INTO user (id, username, password) VALUES (1, 'admin', 'admin');`
`INSERT INTO user (id, username, password) VALUES (2, 'zhangz1', 'zhangz1');`
`INSERT INTO user (id, username, password) VALUES (3, 'zhangz1', '123');`
3.实体类UserEntity.java
package com.zhangz1.springbootdemo.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @author zhangz1
* @date 2022/1/24 14:50
*/
@TableName("user")
public class UserEntity {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UserEntity() {
}
public UserEntity(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
}
4.数据访问层接口UserMapper.java
Mapper通用CRUD封装BaseMapper接口,自动解析实体表关系映射转换为Mybatis内部对象注入容器
package com.zhangz1.springbootdemo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhangz1.springbootdemo.domain.entity.UserEntity;
import java.util.List;
/**
* @author zhangz1
* @date 2022/1/24 15:32
*/
public interface UserMapper extends BaseMapper<UserEntity> {
}
5.业务逻辑层Service
接口类UserService.java
通用Service CRUD封装IService接口
package com.zhangz1.springbootdemo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhangz1.springbootdemo.domain.entity.UserEntity;
import java.util.List;
/**
* @author zhangz1
* @date 2022/1/22 16:02
*/
public interface UserService extends IService<UserEntity> {
}
实现类UserServiceImpl.java
package com.zhangz1.springbootdemo.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhangz1.springbootdemo.domain.entity.UserEntity;
import com.zhangz1.springbootdemo.mapper.UserMapper;
import com.zhangz1.springbootdemo.service.UserService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author zhangz1
* @date 2022/1/22 16:03
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService {
}
6.控制器UserController.java
package com.zhangz1.springbootdemo.controller;
import com.zhangz1.springbootdemo.domain.entity.UserEntity;
import com.zhangz1.springbootdemo.service.UserService;
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;
/**
* @author zhangz1
* @date 2022/1/19 16:46
*/
@RestController
@RequestMapping("/user")
public class UserController {
final
UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping(value = "/getUser")
public UserEntity getUser(Integer id) {
return userService.getById(id);
}
}
三、测试
1.通过ApiPost测试getUser()方法
http://localhost:8080/user/getUser?id=1
输出结果如下:
{
"id": 1,
"username": "admin",
"password": "admin"
}
可以看到,Service、Mapper一个方法都没写的情况下,从表里查出了id为1的信息,省去了MyBatis中xml的sql查询那一步,在官方给出的文档中,可以看到基本上都是基于主键id返回单一实体或实体list。
四、条件构造器QueryWrapper
设计自定义sql语句实现username查询
1.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.zhangz1.springbootdemo.mapper.UserMapper">
<select id="getUserByUserName" resultType="com.zhangz1.springbootdemo.domain.entity.UserEntity">
SELECT *
FROM user
where username = #{username}
</select>
</mapper>
2.UserService.java中添加方法
/**
* 通过名字查询
*
* @param username
* @return
*/
List<UserEntity> getUserByUserName(String username);
3.UserServiceImpl.java中添加方法
@Override
public List<UserEntity> getUserByUserName(String username) {
QueryWrapper<UserEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserEntity::getUsername, username);
return baseMapper.getUserByUserName(username);
}
4.UserMapper.java中添加方法
/**
* 通过名字查询
*
* @param username
* @return
*/
List<UserEntity> getUserByUserName(String username);
5.UserController.java中添加HTTP请求
@RequestMapping(value = "/getUserByUserName")
public List<UserEntity> getUserByUserName(String username) {
return userService.getUserByUserName(username);
}
6.测试getUserByUserName
http://localhost:8080/user/getUserByUserName?username=zhangz1
输出结果如下:
[
{
"id": 2,
"username": "zhangz1",
"password": "zhangz1"
},
{
"id": 3,
"username": "zhangz1",
"password": "123"
}
]
总结
1、MyBatis-Plus是MyBatis的增强版,在MyBatis的基础上只做增强不做改变;
2、MyBatis-Plus官网的条件构造器一节中提供了eq、ne、like、isNull、having等拼接的方法,使用lambda写法使之简洁有效,单表操作的情况下,使用Mapper和Service封装的CURD方法节约代码量和工作量,详见https://baomidou.com/pages/10c804/#abstractwrapper;
3、在多表联合复杂查询的时候就需要在xml文件里写sql语句。
以上就是SpringBoot整合MyBatis-Plus简单demo的学习过程,关于MyBatis-Plus更多操作,后期还需结合官网加以实践,熟练操作。
参考:
版权属于:张子
本文链接:https://www.znzzi.com/articles/209
所有原创文章采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。