Mybatis-Plus
1.依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
2.配置
spring.application.name = itcast-mp-springboot
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=123456
# 设置Mapper接口所对应的XML文件位置,如果你在Mapper接口中有自定义方法,需要进行该配置
mybatis-plus.mapper-locations = classpath*:mapper/*.xml
# 设置别名包扫描路径,通过该属性可以给包中的类注册别名
mybatis-plus.type-aliases-package =com.cyrus.mptest.pojo
3.条件查询
1.比较操作
- eq :
=
- ne:
!=
- gt:
>
- ge:
>=
- lt:
<
- le:
<=
- between :
BETWEEN 值1 AND 值2
- notBetween :
NOT BETWEEN 值1 AND 值2
- in :
字段 IN (value.get(0), value.get(1), ...)
- notIn :
字段 NOT IN (v0, v1, ...)
2.模糊查询
- like:
like("name", "王") ---> name like '%王%'
- notlike:
notLike("name", "王") ---> name not like '%王%'
- likeLeft:
likeLeft("name", "王") ---> name like '%王'
- likeRight:
likeRight("name", "王") ---> name like '王%'
3.排序
- orderBy:
orderBy(true, true, "id", "name") ---> order by id ASC,name ASC
- orderByAsc:
orderByAsc("id", "name") ---> order by id ASC,name ASC
- orderByDesc:
orderByDesc("id", "name") ---> order by id DESC,name DESC
4.逻辑查询
- or
- and
其他
- last: 自行拼接语句
4.分页
1.配置
@Configuration
@MapperScan("com.cyrus.mptest.mapper") //设置mapper接口的扫描包
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
2.例子
IPage<User> userPage = // count:当前页 size:每页多少数据
userMapper.selectPage(new Page<User>(1, 4), new QueryWrapper<User>().like("name", ""));
5.实例
1.数据库映射
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("tb_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
@TableField("user_name")
private String userName;
@TableField("password")
private String passWord;
@TableField("name")
private String name;
@TableField("age")
private Integer age;
@TableField("email")
private String email;
}
1.关于主键
@TableId(type = IdType.AUTO)
private Long id;
public enum IdType {
/**
* 数据库ID自增
*/
AUTO(0),
/**
* 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
*/
NONE(1),
/**
* 用户输入ID
* <p>该类型可以通过自己注册自动填充插件进行填充</p>
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 分配ID (主键类型为number或string),
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
*
* @since 3.3.0
*/
ASSIGN_ID(3),
/**
* 分配UUID (主键类型为 string)
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
*/
ASSIGN_UUID(4),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
...
}
2.service层
//继承IService<T>接口
public interface UserService extends IService<User> {
}
//继承ServiceImpl<M extends BaseMapper<T>, T>实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
3.mapper层
public interface UserMapper extends BaseMapper<User> {
}
4.启动
@SpringBootApplication
@MapperScan("com.cyrus.mptest.mapper")
public class MptestApplication {
public static void main(String[] args) {
SpringApplication.run(MptestApplication.class, args);
}
}
5.测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisPlusTest {
@Autowired
private UserService userService;
@Test
public void test1() {
List<User> users = userService.list(new QueryWrapper<User>().like("name", "").eq("user_name", "zxc").gt("age", 18));
for (User user : users) {
System.out.println(user);
}
}
@Test
public void test2() {
IPage<User> page = userService.page(new Page<User>(1, 2), new QueryWrapper<User>().eq("user_name", "zxc"));
System.out.println("总页数:"+page.getPages());
System.out.println("总记录数:" + page.getTotal());
List<User> records = page.getRecords();
for (User record : records) {
System.out.println(record);
}
}
}
6.逻辑删除
@Configuration
public class EduConfig {
/**
* 逻辑删除插件
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}
@TableLogic //逻辑删除字段上添加该注解
private Boolean isDeleted;
自动填充
配置类
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("gmtCreate", new Date(), metaObject);
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
}
在对应字段上添加注解
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
rivate Date gmtModified;