Mybatis-plus
mybatis-plus简单使用:
-
创建数据库
-
DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) ); DELETE FROM user; INSERT INTO user (id, name, age, email) VALUES (1, 'Jone', 18, 'test1@baomidou.com'), (2, 'Jack', 20, 'test2@baomidou.com'), (3, 'Tom', 28, 'test3@baomidou.com'), (4, 'Sandy', 21, 'test4@baomidou.com'), (5, 'Billie', 24, 'test5@baomidou.com');
导入完成后开始创建项目
-
-
创建项目
-
创建一个springboot项目
-
引入pom依赖,刷新maven等待加载完成
<!--mybatis-plus依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!--数据库依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
-
配置数据库
spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver
-
创建实体类 com.example.demo.pojo.User.java
注:实体类的名字要和查询的表名字要一致,如果不一致要注解
-
@TableName(“stu_work”) name 名字,表名注解
-
@TableId(value = “id”, type = IdType.AUTO) ID 自增,自增注解
-
@TableField(“class”) 别名,字段注解
@Data public class User { private Long id; private String name; private Integer age; private String email; }
-
-
-
创建接口 com.example.demo.mapper.java
BaseMapper基础映射器的意思
user泛型是刚创建实体类的名字
@Mapper public interface UserMapper extends BaseMapper<User> { }
-
配置MapperScan注解 com.example.mybatisplus.MybatisPlusApplication.java
@SpringBootApplication @MapperScan("com.example.mybatisplus.dao") public class MybatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusApplication.class, args); } }
-
测试
创建测试类com.example.demo.SampleTest.java
@SpringBootTest public class SampleTest { @Autowired private UserMapper userMapper; @Test void print(){ //查询他的所有方法 List<User> users = userMapper.selectList(null); //遍历 users.forEach(System.out::println); } }
注解
-
@TableName(value=“”)表名注解
-
@TableId id(value=“”,IdTable.AUTO)注解,
1. Auto:数据库自增 -
@TableField() 字段注解
-
@Version() 乐观锁注解
-
@EnumValue() 枚举类注解
-
TableLogic(逻辑未删除值,逻辑删除值)字段逻辑处理注解(逻辑删除)
-
@KeySequence()序列主键策略
-
@Interceptorlgnore()插件主体
-
@OrderBy(是否倒叙查询(默认:是),数字越小越靠前)
CRUD
//查询所有 selectList
@Test
public void testSelect() {
List<stu_work> stus = stuMapper.selectList(null);
stus.forEach(System.out::println);
}
//插入 insert
@Test
public void testInsert(){
int insert = stuMapper.insert(new stu_work(null,"name", "sex", "work", "class"));
System.out.println("insert:"+insert);
}
//修改 updateById 根据id修改
@Test
public void testUpdate(){
//先查询
stu_work stu_work = stuMapper.selectById(2);
stu_work.setName("台女侠");
//再修改
int i = stuMapper.updateById(stu_work);
System.out.println(i);
}
//查询 selectByMap 多条件查询
@Test
public void testSelectByMap() {
Map<String, Object> map = new HashMap<>();
map.put("name",1);
map.put("sex","女");
List<stu_work> stu_works = stuMapper.selectByMap(map);
System.out.println("查询结果:"+stu_works);
}
//批量查询 selectBatchIds
@Test
public void testSelectBatchIds(){
List<stu_work> stu_works = stuMapper.selectBatchIds(Arrays.asList(1, 2, 3));
stu_works.forEach(System.out::println);
}
构造器
简介:
MyBatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率,它主要用于处理 sql 拼接,排序,实体参数查询等
注意:使用的是数据库字段,不是Java属性
使用:
/*
* 构造器
* */
//带条件的查询
@Test
public void testSelectList1(){
QueryWrapper<stu_work> queryWrapper = new QueryWrapper<>();
queryWrapper
.like("name","n")
.eq("sex","男")
.gt("class","class");
List<stu_work> stu_works = stuMapper.selectList(queryWrapper);
stu_works.forEach(System.out::println);
}
//查询全部
@Test
public void testSelectList2(){
List<stu_work> stu_works = stuMapper.selectList(null);
stu_works.forEach(System.out::println);
}
//条件查询:返回值是数量
@Test
public void testSelectList3(){
QueryWrapper<stu_work> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name","J").eq("sex","女");
Integer integer = stuMapper.selectCount(queryWrapper);
System.out.println(integer);
}
//带条件的修改
@Test
public void testUpdate1(){
UpdateWrapper<stu_work> updateWrapper = new UpdateWrapper<>();
//查询条件
updateWrapper.eq("id",2).like("sex","e");
//创建实例
stu_work stu_work = new stu_work();
//修改名字
stu_work.setA("kaka");
//放入修改数据库的语句中
//值1:修改内容
//值2:查询条件
int update = stuMapper.update(stu_work, updateWrapper);
System.out.println(update);
//查询全部内容
List<stu_work> stu_works = stuMapper.selectList(null);
stu_works.forEach(System.out::println);
}
//带条件的删除
@Test
public void testDelete(){
QueryWrapper<stu_work> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name","name");
int delete = stuMapper.delete(queryWrapper);
System.out.println(delete);
}
分页查询
配置类添加
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
直接用他里面提供的方法分页
@GetMapping("/page/{page}/{size}")
@ResponseBody
public Object selectBookPage1(@PathVariable("page") int num,@PathVariable("size") int size){
Page<Attr> page = new Page<>(num, size);
Page<Attr> page1 = attrMapper.selectPage(page, null);
System.out.println("页数"+page1.getPages());
System.out.println("总数"+ page1.getTotal());
return page;
}
条件构造器
方法 | 表示含义 | 用法 |
---|---|---|
gt | > | gt(“字段名”,值) |
ge | >= | ge(“字段名”,值) |
lt | < | lt(“字段名”,值) |
le | <= | le(“字段名”,值) |
isNull | 查询该字段为null值的数据 | isNull(“字段名”) |
isNotNull | 查询该字段不为null值的数据 | isNotNull(“字段名”) |
eq | = | eq(“字段1”,“字段2”) |
ne | != | ne(“字段1”,“字段2”) |
between | 表示两个值之间数据 | between(“字段1”,“字段2”) |
notbetween | 表示两个值之外数据 | notbetween(“字段1”,“字段2”) |