网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
### 5. 编写实体类
由于mybatis-plus,可以不编写SQL语句。那么Java中的对象,到底该如何与数据库中的表进行映射呢?答案其实就在实体类中!我们可以通过不同的注解来完成实体类和具体表,以及实体类的属性和表中的列进行映射。这也是mybatis-plus中非常关键的一步,具体实现如下:
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(“emp”) //告知mybatis-plus和数据库中的哪个表关联
public class User extends Model implements Serializable {
//主键id
private int id; //当实体类的属性名和和表中的列名相同,无需做任何设置
@TableField("name")
private String userName; //属性名和列名不一致时设置映射,用userName属性和表中的name列进行关联
private int age;
private String email;
}
### 6. 编写dao接口
我们这里的接口中,不必编写任何CRUD方法,只需要继承BaseMapper接口即可。通过阅读源码我们可以发现,在这个接口中其实已经封装了常见的CURD方法,源码如下:
![](https://img-blog.csdnimg.cn/c5f8b57f5be34b5ea9a929960e076cf8.png)
所以,实体类中就可以省去CRUD方法的代码实现。
package com.qf.pro.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qf.pro.pojo.User;
public interface UserDao extends BaseMapper {
//BaseMapper 默认封装了CRUD方法,通过泛型制定了所操作的实体类及表
}
### 7. 编写配置类
这样当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 {
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}
#### 9. 业务实现
我们要在业务逻辑层里调用各种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 {
@Autowired
private UsersDao usersDao;
@Override
public List<Users> findUsers() {
//mybatisplus 自动生成/提供的查询方法
//由于是无条件查询,参数null
return usersDao.selectList(null);
}
@Override
public List<Users> findUsersByCondition(String name) {
//创建QueryWrapper对象
QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
//通过wrapper对象来设置查询条件
//参数1:字段表名
//参数2:所赋值
//eq 等于
wrapper.eq("name",name);
return usersDao.selectList(wrapper);
}
@Override
public List<Users> findUsersByCondition2(int startAge, int endAge) {
QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
//年龄的范围
wrapper.between("age",startAge,endAge);
return usersDao.selectList(wrapper);
}
@Override
public 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);
}
@Override
public List<Users> findUsersByCondition4(Users users) {
//模糊查询
QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
//%关键字%
wrapper.like("name",users.getUserName());
//%明
//wrapper.likeLeft()
//李%
//wrapper.likeRight();
return usersDao.selectList(wrapper);
}
//排序查询
@Override
public List<Users> findUsers2() {
QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
//设置排序条件
wrapper.orderByDesc("id");
return usersDao.selectList(wrapper);
}
@Override
public 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);
}
@Override
public List<Users> findUsers3() {
//查询指定列
QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
//设置查询的列
wrapper.select("id","email");
return usersDao.selectList(wrapper);
}
@Override
public boolean addUser(Users users) {
//添加用户
int result=usersDao.insert(users);
return result==1;
}
@Override
public boolean deleteUser(int id) {
//删除用户--单个删除
int result=usersDao.deleteById(id);
//批量删除
//usersDao.deleteBatchIds(List<Integer> list);
return result==1;
}
@Override
public boolean updateUser(Users users) {
//要求表中的主键列是id的名字,使用id列作为条件
int result=usersDao.updateById(users);
//如果主键列的名字不是id,或者条件不是主键id
// QueryWrapper wrapper=new QueryWrapper();
// wrapper.eq(“email”,users.getEmail());
// int result2=usersDao.update(users,wrapper);
return result==1;
}
@Override
public Users findUersById(int id) {
//根据主键id查询单个对象
return usersDao.selectById(id);
}
@Override
public List<Users> findUsersByIds(List<Integer> list) {
//根据id批量查询
return usersDao.selectBatchIds(list);
}
@Override
public 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;
}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
…(img-JGznZDJH-1715680236035)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!