一. MP简介
咱们晓得,Mybatis属于一个半自动的ORM框架。之所以说Mybatis是一个半自动的ORM框架,起因是它还须要咱们本人在注解或是映射文件中编写SQL语句,并没有实现齐全的自动化。SQL语句的编写,尽管减少了我的项目和业务需要实现的灵活性,但对一些根本表的操作而言,无疑减少了数据库操作的复杂度,显得没有那么不便。
而Mybatis-Plus则是全自动的ORM框架,依照开闭准则,在不影响Mybatis现有性能的状况下,实现了对Mybatis的性能加强。如果你之前有过Mybatis的应用教训,当初学习Mybatis-Plus几乎就是手到擒来。
明天就带大家来学习一下Mybatis-Plus框架的根本应用,请掏出小本本吧。
二. Mybatis-Plus特点MP具备如下根本特点:通过在实体类中与数据库表进行映射;无需编写SQL语句,简化了CRUD操作;通常实用于单表。
三. MP应用
接下来会在SpringBoot我的项目环境中,带着大家一起应用Mybatis-Plus。
1、新建SpringBoot我的项目创立SpringBoot我的项目的过程,在这里就给大家省略了,如果有不相熟的同学,能够参考之前对于SpringBoot的教程文章
2、增加外围依赖咱们在SpringBoot我的项目中增加须要用到的外围依赖包。
<dependencies>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySql --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version></dependency><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.1.tmp</version></dependency><!-- 连接池 --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version></dependency><!--简化bean代码的工具包--><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> <version>1.18.4</version></dependency><dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version></dependency><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version></dependency>
</dependencies>
所以,实体类中就能够省去CRUD办法的代码实现。package com.qf.pro.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qf.pro.pojo.User;
public interface UserDao extends BaseMapper<User> {
//BaseMapper<User> 默认封装了CRUD办法,通过泛型制订了所操作的实体类及表
}
- 编写配置类这样当SpringBoot启动时,就能够扫描到dao层代码所在的包。package com.qf.mp2103.dao;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.qf.mp2103.dao")
public class MybatisPlusConfig {
@Beanpublic PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor();}
}
- 业务实现咱们要在业务逻辑层里调用各种CRUD办法,这也是Mybatis-Plus比拟外围、重要的点,MybatisPlus会依据之前的配置主动生成SQL语句。package com.qf.mp2103.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qf.mp2103.dao.UsersDao;
import com.qf.mp2103.pojo.Users;
import com.qf.mp2103.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class UserServiceImpl implements UsersService {
@Autowiredprivate UsersDao usersDao;@Overridepublic List<Users> findUsers() { //mybatisplus 主动生成/提供的查询方法 //因为是无条件查问,参数null return usersDao.selectList(null);}@Overridepublic List<Users> findUsersByCondition(String name) { //创立QueryWrapper对象 QueryWrapper<Users> wrapper=new QueryWrapper<Users>(); //通过wrapper对象来设置查问条件 //参数1:字段表名 //参数2:所赋值 //eq 等于 wrapper.eq("name",name); return usersDao.selectList(wrapper);}@Overridepublic List<Users> findUsersByCondition2(int startAge, int endAge) { QueryWrapper<Users> wrapper=new QueryWrapper<Users>(); //年龄的范畴 wrapper.between("age",startAge,endAge); return usersDao.selectList(wrapper);}@Overridepublic List<Users> findUsersByCondition3(Users users) { //多条件查问 QueryWrapper<Users> wrapper=new QueryWrapper<Users>(); //where name='' and age <=
// wrapper.eq(true,"name",users.getUserName());
//// wrapper.le(true,"age",users.getAge());
//where name='' or age >= wrapper.eq(true,"name",users.getUserName()); wrapper.ge(false,"age",users.getAge()); return usersDao.selectList(wrapper);}@Overridepublic List<Users> findUsersByCondition4(Users users) { //含糊查问 QueryWrapper<Users> wrapper=new QueryWrapper<Users>(); //%关键字% wrapper.like("name",users.getUserName()); //%明 //wrapper.likeLeft() //李% //wrapper.likeRight(); return usersDao.selectList(wrapper);}//排序查问@Overridepublic List<Users> findUsers2() { QueryWrapper<Users> wrapper=new QueryWrapper<Users>(); //设置排序条件 wrapper.orderByDesc("id"); return usersDao.selectList(wrapper);}@Overridepublic List<Users> findUsersByPage(int page, int size) { //用于分页查问 //select * from users limit X,X QueryWrapper<Users> wrapper=new QueryWrapper<Users>(); int start=(page-1)*size; //拼接 wrapper.last("limit "+start+","+size); return usersDao.selectList(wrapper);}@Overridepublic List<Users> findUsers3() { //查问指定列 QueryWrapper<Users> wrapper=new QueryWrapper<Users>(); //设置查问的列 wrapper.select("id","email"); return usersDao.selectList(wrapper);}@Overridepublic boolean addUser(Users users) { //增加用户 int result=usersDao.insert(users); return result==1;}@Overridepublic boolean deleteUser(int id) { //删除用户--单个删除 int result=usersDao.deleteById(id); //批量删除 //usersDao.deleteBatchIds(List<Integer> list); return result==1;}@Overridepublic boolean updateUser(Users users) { //要求表中的主键列是id的名字,应用id列作为条件 int result=usersDao.updateById(users); //如果主键列的名字不是id,或者条件不是主键id
// QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
// wrapper.eq("email",users.getEmail());
// int result2=usersDao.update(users,wrapper);
return result==1;}@Overridepublic Users findUersById(int id) { //依据主键id查问单个对象 return usersDao.selectById(id);}@Overridepublic List<Users> findUsersByIds(List<Integer> list) { //依据id批量查问 return usersDao.selectBatchIds(list);}@Overridepublic Map<String,Object> findUsersByPage2(int page, int size) { //如果还有其余条件查问,申明条件结构器进行 //创立分页插件对象 //参数1:显示第几页数据 //参数2:每页显示几条数据 Page<Users> page1=new Page<Users>(page,size); //依据分页插件对象里的分页条件查问数据 IPage<Users> iPage=usersDao.selectPage(page1,null); Map<String,Object> map=new HashMap<String, Object>(); //获取总记录数 iPage.getTotal() map.put("totalCount",iPage.getTotal()); //获取总页数 iPage.getPages() map.put("totalPage",iPage.getPages()); //获取分页数据 map.put("data",iPage.getRecords()); return map;}@Overridepublic List<Users> findUsers4(int age1, int age2, String email) { QueryWrapper<Users> queryWrapper=new QueryWrapper<Users>(); queryWrapper.ge("age",age1).le("age",age2).or().likeRight("email",email); return usersDao.selectList(queryWrapper);}@Overridepublic Users findUsers5(int id) { //创立实体类对象 Users user=new Users(); user.setId(id); //申明对象接管查问返回的后果 Users getUser=user.selectById(id); return getUser;}@Overridepublic void addUsers2(Users users) { //增加办法 users.insert();}@Overridepublic void updateUsers2(Users users) { //依据主键更新 users.updateById();}@Overridepublic void deleteUsers2(Users users) { //依据主键删除 users.deleteById();}public Users findOne(String name){ //依据其余条件查问单个数据,如果多于1条数据,则报异样 //条件结构器 QueryWrapper queryWrapper=new QueryWrapper(); queryWrapper.eq("name",name); return usersDao.selectOne(queryWrapper);}//查问总记录数public int getUserCount(){ //能够申明条件结构器 return usersDao.selectCount(null);}
}
这样通过以上几个步骤,咱们就学会了Mybatis-Plus的根本应用,心愿明天的文章能够教会大家如何应用Mybatis-Plus。如果你还有纳闷,能够留言我哦。