上一篇写的是MybatisPlus之MP注解的使用
(跟上一篇是同一个项目)先来创一个Springboot测试项目
创建一个数据库
-- 创建表
CREATE TABLE t_employee(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(50),
email VARCHAR(50),
gender CHAR(1),
age INT
);
INSERT INTO t_employee(user_name,email,gender,age) VALUES('Tom','tom@qq.com',1,22);
INSERT INTO t_employee(user_name,email,gender,age) VALUES('Jerry','jerry@qq.com',0,25);
INSERT INTO t_employee(user_name,email,gender,age) VALUES('Black','black@qq.com',1,30);
INSERT INTO t_employee(user_name,email,gender,age) VALUES('White','white@qq.com',0,35);
创建一个实体类
记得给get、set和tostring
//名称一致时,此注解可以省略
public class t_employee {
//主键生成策略,value属性可选,当属性名与表中的列名不一致,必填
private Integer id;//编号
private String userName;//用户名
private String email;//邮箱
private Integer gender;//性别
private Integer age;//年龄
...
记得给get、set和tostring
Mapper接口
在dao包下创建EmployeeMapper接口,继承BaseMapper接口,不用编写xml映射文件
public interface EmployeeMapper extends BaseMapper<Employee> {
}
自定义SQL查询及分页查询
自定义SQL查询
自定义SQL查询,常用的方式有注解方式和xml方式,与MyBatis的用法一致
注解方式
mapper接口
public interface EmployeeMapper extends BaseMapper<Employee> {
/**
* 查询员工数据
* @return
*/
@Select("select * from t_employee")
List<Employee> findEmployeeList();
}
测试
@Test
public void testFindEmpList() {
List<Employee> list = this.employeeMapper.findEmployeeList();
for (Employee employee : list) {
System.out.println(employee);
}
}
xml方式
mapper接口
public interface UserMapper extends BaseMapper<User> {
/**
* 查询用户列表
* @return
*/
List<User> findUserList();
}
mapper映射文件
如果在mapper接口相同目录下创建与接口同名的mapper映射文件,application.properties配置文件则不用进行任何配置
如果mapper映射文件是放在resource资源文件夹下的mapper目录,application.properties配置文件需要进行加载映射文件
#加载映射文件
mybatis-plus.mapper-locations=classpath:mapper/*.xml
resource/mapper目录下的UserMapper映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kazu.mybatisplus.dao.UserMapper">
<select id="findUserList" resultType="com.kazu.mybatisplus.entity.User">
select * from user
</select>
</mapper>
测试
@Test
public void testFindUserList() {
//调用自定义查询方法
List<User> users = userMapper.findUserList();
for (User user : users) {
System.out.println(user);
}
}
分页查询
概述
MyBatisPlus支持分页插件(非PageHelper分页插件)
MyBatisPlus3+版本不支持PageHelper插件
使用MyBatisPlus分页插件需要编写配置类
分页插件配置类
在config包下创建分页插件配置类
@EnableTransactionManagement//开启事务
@Configuration
@MapperScan("com.kazu.mybatisplus.dao")//加载mp接口
public class MyBatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
return paginationInterceptor;
}
}
测试分页插件
@Test
public void testSelectPage() {
//创建条件构造器
QueryWrapper<Employee> queryWrapper = new QueryWrapper<Employee>();
queryWrapper.ge("age",15);
//创建分页对象
Page<Employee> page = new Page<Employee>(1,2);
//分页查询
IPage<Employee> iPage = employeeMapper.selectPage(page,queryWrapper);
System.out.println("当前页码:" + iPage.getCurrent());
System.out.println("每页显示数量:" + iPage.getSize());
System.out.println("总记录数:" + iPage.getTotal());
System.out.println("总页数:" + iPage.getPages());
List<Employee> employeeList = iPage.getRecords();//员工数据集合
for (Employee employee : employeeList) {
System.out.println(employee);
}
}
案例-使用接口的方式实现分页
第一步:定义分页插件配置类
第二步:定义mapper接口
第三步:测试
定义分页插件配置类
配置类代码同上
定义mapper接口
/**
* 分页查询
* @param page
* @return
*/
@Select("select * from t_employee")
IPage<Employee> findEmployeeListByPage(Page<Employee> page);
测试
@Test
public void testFindEmployeeListByPage() {
//创建分页对象
Page<Employee> page = new Page<Employee>(1,2);
//分页查询
IPage<Employee> iPage = employeeMapper.findEmployeeListByPage(page);
System.out.println("当前页码:" + iPage.getCurrent());
System.out.println("每页显示数量:" + iPage.getSize());
System.out.println("总记录数:" + iPage.getTotal());
System.out.println("总页数:" + iPage.getPages());
List<Employee> employeeList = iPage.getRecords();//员工数据集合
for (Employee employee : employeeList) {
System.out.println(employee);
}
}
通用Service
概述
说明:
通用Service的使用
自定义Service接口
自定义Service接口,继承IService接口
public interface UserService extends IService<User> {
}
测试通用Service接口
添加测试类,注入自定义Service接口
@RunWith(SpringRunner.class)
@SpringBootTest
public class Mybaitsplus02ApplicationTests {
//注入UserService
@Resource
private UserService userService;
/**
* 新增
*/
@Test
public void testSave() {
User user = new User();
user.setAge(20);
user.setEmail("test@163.com");
user.setName("test");
//调用新增方法
boolean flag = userService.save(user);
System.out.println(flag ? "新增成功" :"新增失败");
}
/**
* 批量新增
*/
@Test
public void testSaveBatch() {
User user1 = new User();
user1.setAge(22);
user1.setEmail("lucy@163.com");
user1.setName("露西");
User user2 = new User();
user2.setAge(20);
user2.setEmail("lulu@163.com");
user2.setName("露露");
//调用新增方法
boolean flag = userService.saveBatch(Arrays.asList(user1,user2));
System.out.println(flag ? "新增成功" :"新增失败");
}
/**
* 批量新增或修改
*/
@Test
public void testSaveOrUpdateBatch() {
User user1 = new User();
user1.setId(9L);
user1.setAge(22);
user1.setEmail("ross@163.com");
user1.setName("肉丝");
User user2 = new User();
user2.setAge(20);
user2.setEmail("harry@163.com");
user2.setName("harry");
//调用新增方法
boolean flag = userService.saveOrUpdateBatch(Arrays.asList(user1,user2));
System.out.println(flag ? "成功" :"失败");
}
/**
* 查询唯一
*/
@Test
public void testGetOne() {
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.eq("age",20);
//会报错
//User user = userService.getOne(queryWrapper);
//不会报错,但会发出警告
User user = userService.getOne(queryWrapper,false);
System.out.println(user);
}
}
注意:其余方法类似,不一一进行代码演示,具体方法可参考IService接口源码或参考官方文档
下一篇《MyBatisPlus代码生成器》
版权声明:本文为th_century17原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。