<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.0.5version>
dependency>
创建mybatis-plus数据库,并建表如下。然后插入一些测试数据。
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
@Component
public interface UserMapper extends BaseMapper<User> {
}
@SpringBootApplication
@MapperScan("com.lk.mybatisplus.mapper")
public class MybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusApplication.class, args);
}
}
@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
}
}
@Test
void test1(){
List<User> users = userMapper.selectList(null);
System.out.println(users);
}
@Test
void testInsert(){
User user=new User();
user.setName("ha");
user.setAge(20);
user.setEmail("[email protected]");
userMapper.insert(user);
}
从数据库中可以看出已经插入了数据,但主键却是随机生成的一串数字,因为其默认使用了自带的主键生成策略,该策略可以在实体类中进行修改。其次,创建时间和修改时间也都为空。
@Test
public void testUpdate(){
User user=new User();
user.setId(1L);
user.setName("xiugai");
userMapper.updateById(user);
}
可以看到只有姓名发生了改变,其余内容仍保持原样
@Test
public void testById(){
User user = userMapper.selectById(1306960166407401481L);
System.out.println(user);
}
@Test
public void testByBatchId(){
List<Long> longs = Arrays.asList(1306960166407401481L,1306960166407401482L);
List<User> users = userMapper.selectBatchIds(longs);
System.out.println(users);
}
@Test
public void testByMap(){
Map<String,Object> map=new HashMap<>();
map.put("name","张三");
map.put("age",11);
List<User> users = userMapper.selectByMap(map);
System.out.println(users);
}
@Test
public void testDel(){
int count = userMapper.deleteById(1L);
System.out.println(count);
}
@Test
public void testMulDel(){
int count = userMapper.deleteBatchIds(Arrays.asList(2L,3L));
System.out.println(count);
}
之前插入数据时,主键是随机生成的一串字符,也是mybatis-plus自带的主键生成策略。那么可以通过注解来修改其主键生成策略。就是在实体类上用注解@TableId(type = IdType.AUTO),表明主键是自增长的。
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
主键增长策略 | 说明 |
---|---|
AUTO | 自增长 |
UUID | 随机一个UUID |
INPUT | 需要自己输入主键 |
NONE | 无策略,也是自己输入主键 |
ID_WORKER | mp自带,主键是数字类型,则用这个 |
ID_WORKER_STR | mp自带,主键是字符串类型,则用这个 |
添加数据时,当插入的user的创建时间为空时,数据库中插入的数据也为空,通过mybatis-plus可以实现自动填充的效果。
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT) //表示插入时填充
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //表示插入和更新时填充
private Date updateTime;
}
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override //插入时填充
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override //更新时填充
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
@Configuration
public class MybatisPlusConfig {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
@Test
void testInsert(){
Page<User> page=new Page<User>(1,5);
userMapper.selectPage(page,null);
//当前页数
System.out.println(page.getCurrent());
//当前页的记录
System.out.println(page.getRecords());
//所有记录数
System.out.println(page.getTotal());
//每页显示的记录数
System.out.println(page.getSize());
//是否有下一页
System.out.println(page.hasNext());
//是否有上一页
System.out.println(page.hasPrevious());
}
@TableLogic
private Integer deleted;
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
@Bean
@Profile({"dev","test"}) //只对开发和测试环境生效
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor=new PerformanceInterceptor();
performanceInterceptor.setMaxTime(100);
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
spring:
profiles:
active: dev
@Test
void testInsert(){
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
//查询年龄等于20的
queryWrapper.eq("age",20);
userMapper.selectList(queryWrapper);
}
wrapper后还有许多的方法
方法 | 说明 |
---|---|
ge、gt | 大于等于、大于 |
le、lt | 小于等于、小于 |
eq、nq | 等于、不等于 |
between | 在…之间 |
like | 模糊查询 |
orderByDesc、orderByAsc | 按某字段降序、升序 |
select | 标注查询的列 |
last | 要在最后拼接的sql语句 |
public class CodeGenerator {
@Test
public void run(){
AutoGenerator mpg=new AutoGenerator();
GlobalConfig gc = new GlobalConfig();
//设置代码输出路径
gc.setOutputDir("D:\\IDEA-project\\education\\service\\service_edu"+"/src/main/java");
gc.setAuthor("lk");
gc.setOpen(false);
gc.setFileOverride(false);
gc.setServiceName("%sService");
gc.setIdType(IdType.ID_WORKER_STR);
gc.setSwagger2(true);
mpg.setGlobalConfig(gc);
//数据库配置
DataSourceConfig dsc=new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUrl("jdbc:mysql://localhost:3306/education?serverTimezone=UTC");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
//包配置
PackageConfig pc=new PackageConfig();
pc.setParent("com.lk");
pc.setModuleName("eduservice");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
//策略配置
StrategyConfig sc=new StrategyConfig();
sc.setInclude("edu_teacher");
sc.setNaming(NamingStrategy.underline_to_camel);
sc.setTablePrefix(pc.getModuleName()+"_");
sc.setColumnNaming(NamingStrategy.underline_to_camel);
sc.setEntityLombokModel(true);
sc.setRestControllerStyle(true);
sc.setControllerMappingHyphenStyle(true);
mpg.setStrategy(sc);
//执行
mpg.execute();
}
}