导包,版本什么的我就不说了
第一步:写yml文件
给个端口号
server:
port: 8081
给个数据源
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.47.130:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8
username: root
password: 123456
配mybatisplus驼峰和映射位置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
mapper-locations: classpath:mapper/*Mapper.xml
第二部:写启动类
package com.lindashua.mybatisplus;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
注解要加(@ComponentScan({"com.atguigu.mybatisplus"})这个就别写了,application注解包含)
@SpringBootApplication
public class ServiceMybatisplusApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceMybatisplusApplication.class,args);
}
}
第三步:实体类
package com.lindashua.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
小辣椒不多说了
@Data
@AllArgsConstructor
@NoArgsConstructor
这个可有可无
@TableName("user")
public class User {
这个注解默认雪花算法主键,这里改成了自增
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
这里是游离态
@TableField(exist = false)
private String gender;
这个是insert时开启自动填充,需要配置config
@TableField(fill = FieldFill.INSERT)
LocalDateTime createTime;
这个是insert和update时开启自动填充,需要配置config
@TableField(fill = FieldFill.INSERT_UPDATE)
LocalDateTime updateTime;
}
第四步:写config类(为了开启自动填充)
package com.lindashua.mybatisplus.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
要进行ioc
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
第五步:mapper类
package com.lindashua.mybatisplus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lindashua.mybatisplus.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
这个注解开启通用mapper,可以参考 https://www.jianshu.com/p/3942f6b4fa75
@Mapper
继承BaseMapper
public interface UserMapper extends BaseMapper<User> {
List<User> selectAllUseLike(String s);
}
第六步:service类
package com.lindashua.mybatisplus.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lindashua.mybatisplus.entity.User;
/**
* @author lindashua
* @package com.lindashua.mybatisplus.service
* @date 2021/11/18 20:36
*/
继承IService泛型实体类
public interface UserService extends IService<User> {
}
第七步:service实现类
package com.lindashua.mybatisplus.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lindashua.mybatisplus.entity.User;
import com.lindashua.mybatisplus.mapper.UserMapper;
import com.lindashua.mybatisplus.service.UserService;
import org.springframework.stereotype.Service;
注解开启通用Service
@Service
实现UserService 并继承ServiceImpl泛型mapper和实体类
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
第八步:UserMapper.xml
这个是为了实现自定义mapper,就和mybatis一样写就可以
<?xml version="1.0" encoding="UTF-8" ?>
select * from user
where name like “%”#{name}"%"
第九步:测试类
这里提醒一下,测试类要和我们的启动类在一个位置上,不然注解读不到spring配置
package com.lindashua.mybatisplus;
import com.lindashua.mybatisplus.entity.User;
import com.lindashua.mybatisplus.mapper.UserMapper;
import com.lindashua.mybatisplus.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@SpringBootTest
public class MybatisPlusTest {
@Autowired
private UserMapper userMapper;
@Autowired
private UserService userService;
@Test
public void test1(){
System.out.println("1");
}
@Test
public void FindById(){
Object o = userMapper.selectById(1l);
System.out.println(o);
}
@Test
public void selectAllUseLike(){
List<User> userList = userMapper.selectAllUseLike("j");
for (User user : userList) {
System.out.println(user);
}
}
@Test
public void FindByBatchIds(){
List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
for (User user : users) {
System.out.println(user);
}
}
@Test
public void CountAll(){
int count = userService.count();
System.out.println(count);
}
@Test
public void InsertBatch(){
List<User> userList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setAge(i);
user.setName("clone"+i);
userList.add(user);
}
userService.saveBatch(userList);
}
@Test
public void UpdateFill(){
User user = new User();
user.setId(55l);
user.setAge(100);
userService.updateById(user);
}
}
这样一套拥有自增ID,自动填充创建及修改日期,且支持自定义sql的MQ程序基本功能就完成了
总结:自动填充需要重写MetaObjectHandler方法insertFill和updateFill
this.strictInsertFill(metaObject, “updateTime”, LocalDateTime.class, LocalDateTime.now());
乐观锁和分页需要增加配置类,创建一个bean增强MybatisPlusInterceptor对象, mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());,开启分页或者乐观锁