MyBatis-Plus是一个Mybatis增强版工具,在MyBatis上扩充了其它功能没有改变基本功能,也就是只做封装增强不做改变,为了简化开发提交效率而存在,不需要写XML等sql语句就可实现。
项目整体结构:
本文基于脚手架系列第一篇的基础上进行改造整合,有需要的同学可以根据需求自取:
Idea创建springBoot+dubbo脚手架(dubo+nacos)- 脚手架系列(一)
本文是脚手架系列的第二篇,有兴趣的同学可以进入导航页进行学习:
从零开始duboo脚手架搭建
CREATE TABLE
USER
(
id INT NOT NULL AUTO_INCREMENT COMMENT '用户编号',
username VARCHAR(64) COLLATE utf8mb4_bin COMMENT '账号',
password VARCHAR(32) COLLATE utf8mb4_bin COMMENT '密码',
create_time DATETIME COMMENT '创建时间',
deleted bit COMMENT '是否删除。0-未删除;1-删除',
PRIMARY KEY (id),
CONSTRAINT idx_username UNIQUE (username)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
我们需要分别对dubbo-api,dubbo-provide,dubbo-consumer
dubbo-api: 公共服务接口
dubbo-provide: 服务提供者
dubbo-consumer: 服务消费者
dubbo-api这边主要加上我们对接的测试接口和数据库实体就可
4.0.0
com.dubboscaffold
dubbo-api
0.0.1-SNAPSHOT
dubbo-api
Demo project for Spring Boot
1.8
UTF-8
UTF-8
2.3.7.RELEASE
com.dubboscaffold
dubboparent
0.0.1-SNAPSHOT
../pom.xml
org.projectlombok
lombok
1.16.10
provided
com.baomidou
mybatis-plus-boot-starter
3.2.0
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
在上一篇的基础上引入了 lombok 和 mybatis-plus-boot-starter。
public interface UserService {
User selectByUsername(String username);
List selectByIds(Collection ids);
IPage selectPageByCreateTime(IPage page, String createTime);
void insertUser(User user);
}
@Data
@TableName(value = "user")
public class User implements Serializable {
/**
* 用户编号
*/
private Integer id;
/**
* 账号
*/
private String username;
/**
* 密码(明文)
*
* ps:生产环境下,千万不要明文噢
*/
private String password;
/**
* 创建时间
*/
private Date createTime;
/**
* 是否删除
*/
@TableLogic
private Integer deleted;
}
@TableLogic 注解,设置该字段为逻辑删除的标记。
dubbo-provide这边涉及到了数据库的连接,需要改造的地方会比其他模块相对多些
4.0.0
com.dubboscaffold
dubbo-provider
0.0.1-SNAPSHOT
dubbo-provider
Demo project for Spring Boot
1.8
UTF-8
UTF-8
2.3.7.RELEASE
com.dubboscaffold
dubboparent
0.0.1-SNAPSHOT
../pom.xml
com.dubboscaffold
dubbo-api
0.0.1-SNAPSHOT
org.projectlombok
lombok
1.16.10
provided
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
5.1.48
com.baomidou
mybatis-plus-boot-starter
3.2.0
org.springframework.boot
spring-boot-starter-test
test
com.alibaba.cloud
spring-cloud-starter-dubbo
org.apache.dubbo
dubbo
2.7.4.1
org.apache.dubbo
dubbo-spring-boot-starter
2.7.4.1
com.alibaba.nacos
nacos-client
1.2.1
org.apache.dubbo
dubbo-registry-nacos
2.7.4.1
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
@SpringBootApplication
@MapperScan(basePackages = "com.dubboscaffold.dubboprovider.mapper")
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
启动类需要加上MapperScan,扫描对应 Mapper 接口所在的包路径
server:
port: 8081
# datasource 数据源配置内容
spring:
application:
name: dubbo-provider
datasource:
url: jdbc:mysql://127.0.0.1:3306/dubbo_master?useSSL=false&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
# mybatis-plus 配置内容
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
global-config:
db-config:
id-type: auto # ID 主键自增
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.dubboscaffold.dubboapi.entity
# logging
logging:
level:
# dao 开启 debug 模式 mybatis 输入 sql
cn:
iocoder:
springboot:
lab12:
mybatis:
mapper: debug
# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:
# Dubbo 应用配置
application:
name: user-service-provider # 应用名
# Dubbo 注册中心配
registry:
address: nacos://192.168.160.128:8848 # 注册中心地址
# Dubbo 服务提供者协议配置
protocol:
port: -1 # 协议端口。使用 -1 表示随机端口。
name: dubbo # 使用 `dubbo://` 协议。更多协议,可见 http://dubbo.apache.org/zh-cn/docs/user/references/protocol/introduction.html 文档
# Dubbo 服务提供者配置
provider:
timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒
TestService:
version: 1.0.0
# 配置扫描 Dubbo 自定义的 @Service 注解,暴露成 Dubbo 服务提供者
scan:
base-packages: com.dubboscaffold.dubboprovider.service.impl
本次新增数据源datasource、mybatis-plus配置、logging日志输出
@Repository
public interface UserMapper extends BaseMapper {
//使用QueryWrapper构造相对灵活的条件,可以避免一些动态Sql的编写
default User selectByUsername(@Param("username") String username) {
return selectOne(new QueryWrapper().eq("username", username));
}
List selectByIds(@Param("ids") Collection ids);
//演示分页组件
default IPage selectPageByCreateTime(IPage page, @Param("createTime") String createTime) {
return selectPage(page,
new QueryWrapper().gt("create_time", createTime));
}
}
Mapper的接口名必须与xml对应上
id, username, password, create_time
@Component
@Service(timeout = 10000)
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User selectByUsername(String username) {
return userMapper.selectByUsername(username);
}
@Override
public List selectByIds(Collection ids) {
return userMapper.selectByIds(ids);
}
@Override
public IPage selectPageByCreateTime(IPage page, String createTime) {
return userMapper.selectPageByCreateTime(page,createTime);
}
@Override
public void insertUser(User user) {
userMapper.insert(user);
}
}
@Service(timeout = 10000)设置接口超时时间
dubbo-consumer消费者这边只需要新增一个controller就行
4.0.0
com.dubboscaffold
dubbo-consumer
0.0.1-SNAPSHOT
dubbo-consumer
Demo project for Spring Boot
1.8
UTF-8
UTF-8
2.3.7.RELEASE
com.dubboscaffold
dubboparent
0.0.1-SNAPSHOT
../pom.xml
com.dubboscaffold
dubbo-api
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
2.5.5
org.springframework.boot
spring-boot-starter
org.apache.dubbo
dubbo
2.7.4.1
org.apache.dubbo
dubbo-spring-boot-starter
2.7.4.1
com.alibaba.nacos
nacos-client
1.2.1
org.apache.dubbo
dubbo-registry-nacos
2.7.4.1
spring:
application:
name: dubbo-consumer
server:
port: 8082
# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:
# Dubbo 应用配置
application:
name: user-service-consumer # 应用名
# Dubbo 注册中心配置
registry:
address: nacos://192.168.160.128:8848 # 注册中心地址
# Dubbo 消费者配置
consumer:
timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒
TestService:
version: 1.0.0
@RestController
@RequestMapping("/user")
public class UserController {
@Reference
private UserService userService;
@RequestMapping("/insertDemo")
public void insertUser(){
User user = new User();
user.setUsername(UUID.randomUUID().toString());
user.setPassword("123");
user.setCreateTime(new Date());
user.setDeleted(0);
userService.insertUser(user);
}
@RequestMapping("/selectByUsername")
public User selectByUsername(String username){
return userService.selectByUsername(username);
}
@RequestMapping("/selectByIds")
public List selectByIds(String ids){
String[] idArr = ids.split(",");
List list = Arrays.asList(idArr);
return userService.selectByIds(list);
}
@RequestMapping("/selectPageByCreateTime")
public IPage selectPageByCreateTime(int currentPage,int pageSize,String createTime){
//int currentPage = 1; //当前页数:显示第一页数据
//Integer pageSize = 2; //每页显示多少:每页显示2条数据
Page page = new Page(currentPage,pageSize);
return userService.selectPageByCreateTime(page,createTime);
}
}
分别先后启动dubbo-provide,dubbo-consumer
通过postman访问/user/insertDemo接口进行数据添加,如果没有报错就是新增成功了
http://127.0.0.1:8082/user/insertDemo
有了数据后可通过/user/selectPageByCreateTime进行分页查询
剩下的根据id和用户名进行查询的接口大家可以自己试试看,这样子整合MyBatis-Plus就算完成。