SpringBoot整合MybatisPlus
mybatisplus ,是国人开发的, 极大地简化了增删改查的操作,并且减少了sql语句的编写.
导入maven依赖
-
pom.xml
-
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency>
-
因为要操作数据库,所以还要将数据库驱动包导入.
-
创建数据库表
-
DROP TABLE IF EXISTS `person2`; CREATE TABLE `person2` ( `id` int(0) NOT NULL AUTO_INCREMENT, `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `phone` bigint(0) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
创建完成后编写实体类
-
@NoArgsConstructor// 创建无参的构造方法 @AllArgsConstructor// 创建满参的构造方法 @Accessors(chain = true)// 使用链式方法 @Data// 重写toString方法等方法 @TableName("person2")// 对应表名 public class Person { //主键有Tableid注解 type是主键自增规则 @TableId(value = "id", type = IdType.AUTO) private Integer id; @TableField("username") private String username; @TableField("phone") private long phone; @TableField("password") private String password; }
编写dao
-
@Repository public interface PersonDao extends BaseMapper<Person> {}
-
这里直接击沉
BaseMapper
即可,BaseMapper里面就有我们常用的方法! -
如果我们想要自定义查询就需要这么写
-
@Repository public interface PersonDao extends BaseMapper<Person> { /** * 按照姓名查询 * @param username * @return */ @Select("select * from person2 where username = #{username}") List<Person> selectByUsername(String username); }
-
编写service
-
这里了就用增删改查举例
-
@Service public class PersonService { @Resource private PersonDao personDao; /** * 添加person * * @param person * @return */ public Object addPerson(Person person) { return personDao.insert(person); } public Object updPerson(Person person) { //使用 会自动根据id把数据库中的信息进行修改为指定值 // person.setId(1); // person.setPassword("setValue"); // person.setUsername("setUsername"); // person.setPhone(1873374979); return personDao.updateById(person); } public Object delPerosn(Integer id) { return personDao.deleteById(id); } public Object findAll() { return personDao.selectList(null); } /** * 只有这个是我们自己定义的 * * @param username * @return object */ public Object findByName(String username) { return personDao.selectByUsername(username); } }
编写Controller
-
@RestController public class TestCtrl { @Resource private PersonService ps; @RequestMapping("/findAll") public Object findAll() { return new Result("ok", ps.findAll()); } @RequestMapping("/findByName/{username}") public Object findByName(@PathVariable(value = "username") String username) { return new Result("ok", ps.findByName(username)); } @RequestMapping("/del/{id}") public Object delPerson(@PathVariable(value = "id") Integer id ) { return new Result("ok", ps.delPerosn(id)); } @RequestMapping("/add") public Object addPerson(Person person) { return new Result("ok", ps.addPerson(person)); } @RequestMapping("/upd") public Object updPerson(Person person) { return new Result("ok", ps.updPerson(person)); } }
-
每个方法最后返回的 new Result(); 是自己定义的返回值类
-
@Data public class Result { private Integer code; private String message; private Object data; public Result(String message, Object data) { this.code = 200; this.message = message; this.data = data; } public Result(String message) { this.code = 4444; this.message = message; } }
-
-
编写完成后一定不要忘了扫描dao !!!
-
在启动类上添加注解@MapperScan
-
@SpringBootApplication //这个不能忘了加 这就是dao接口所在的包 @MapperScan("com.mucd.mps.dao") public class MpsApplication { public static void main(String[] args) { SpringApplication.run(MpsApplication.class, args); } }
-
自定义查询
-
自定义查询,这里是重要的部分.
-
自定义查询
-
按照ID查询
-
/** * 按照Id进行查询 * @param id * @return */ public Object findById(Integer id) { Person person = personDao.selectById(id); return personDao; }
-
因为id是唯一的, 查出来的的是一条数据,所以返回值是
Person
类型。
-
-
按照
username
查询-
/** * 按照map参数查询 * @param username * @return */ public Object findByUserName(String username) { Map<String,Object> map = new HashMap<>(); map.put("username",username); List<Person> people = personDao.selectByMap(map); return people; }
-
这里使用
map.put("列名","要查询的值")
,按照map中的数据作为条件来进行查询。也可以put多个条件作为查询条件。 -
public Object findByUserName(String username String phone) { Map<String,Object> map = new HashMap<>(); map.put("username",username); map.put("phone",phone); List<Person> people = personDao.selectByMap(map); return people; }
-
这里返回的是一组数据,如果只需要一个数据使用selectOne(条件)
-
public Object findByUserName(String username String phone) { Map<String,Object> map = new HashMap<>(); map.put("username",username); map.put("phone",phone); Person people = personDao.selectOne(map); return people; }
-
-
模糊查询
-
在我们需要完成搜索数据功能的时候经常会使用的模糊查询。
-
/** * 模糊查询 * @param username * @return */ public Object findByLike(String username){ QueryWrapper<Person> queryWrap = new QueryWrapper<Person>().like("username", username); List<Person> likeList = personDao.selectList(queryWrap); return likeList; }
-
使用
selectList()
方法,参数传入我们需要查询的条件。 -
//Compare<Children, R>接口 default Children like(R column, Object val) { return this.like(true, column, val); }
-
可以看到这里第一个参数需要的是列名,第二个参数是要查找的参数
-
模糊查询查出来的可能是多个数据,所以返回值是集合类型。
-
-
排序查询
-
/** * 排序查询 * 正序 or 倒叙 * @return obj */ public Object findByOrder(){ QueryWrapper<Person> asc = new QueryWrapper<Person>().orderByAsc("id"); QueryWrapper<Person> desc = new QueryWrapper<Person>().orderByDesc("id"); List<Person> people = personDao.selectList(asc); List<Person> desc2 = personDao.selectList(desc); System.out.println("desc2 = " + desc2); return people; }
-
将一组数据按照指定的正序或者是倒叙查询出来。
-
-
条件查询
-
QueryWrapper<Person> eq = new QueryWrapper<Person>().eq("username", "admin"); QueryWrapper<Person> le = new QueryWrapper<Person>().le("id", 3); QueryWrapper<Person> lt = new QueryWrapper<Person>().lt("id", 2); QueryWrapper<Person> ge = new QueryWrapper<Person>().ge("id", 2); QueryWrapper<Person> gt = new QueryWrapper<Person>().gt("id", 2); QueryWrapper<Person> ne = new QueryWrapper<Person>().ne("id", 2);
-
public Object findByTiaoJian() { //eq = QueryWrapper<Person> eq = new QueryWrapper<Person>().eq("username", "admin"); //le <= QueryWrapper<Person> le = new QueryWrapper<Person>().le("id", 3); //lt < QueryWrapper<Person> lt = new QueryWrapper<Person>().lt("id", 2); //ge >= QueryWrapper<Person> ge = new QueryWrapper<Person>().ge("id", 2); //gt > QueryWrapper<Person> gt = new QueryWrapper<Person>().gt("id", 2); //ne != QueryWrapper<Person> ne = new QueryWrapper<Person>().ne("id", 2); //查找值不为null QueryWrapper<Object> isNotNull = new QueryWrapper<>().isNotNull("username"); //查找值为null QueryWrapper<Object> isNull = new QueryWrapper<>().isNull("username"); //between 在范围之间,包含边界值 QueryWrapper<Object> between = new QueryWrapper<>().between("id", 1, 10); //notBetween 在范围之外,不包含边界值 QueryWrapper<Object> notBentween = new QueryWrapper<>().notBetween("id", 1, 10); //在selectList中添加查询条件即可 List<Person> people = personDao.selectList(eq); return people; }
-
使用
QueryWrapper
编写查询条件,编写完成将参数传到selectList()
。
-
-
链式调用
-
在实际使用中,查询只有一个条件是远远不够用的,mybatis-plus也提供了链式调用。
-
/** * 链式调用 * * @return obj */ public Object chain() { //条件 QueryWrapper<Person> chain = new QueryWrapper<Person>().like("username","adm").eq("phone","18733741939").orderByAsc("id"); return personDao.selectList(chain); }
-
在实际开发中可以根据自己的需求来写条件
-
time 2022-4-1 09:13
-