上一篇写的是MybatisPlus之MP注解的使用
创建一个数据库
-- 创建表
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','[email protected]',1,22);
INSERT INTO t_employee(user_name,email,gender,age) VALUES('Jerry','[email protected]',0,25);
INSERT INTO t_employee(user_name,email,gender,age) VALUES('Black','[email protected]',1,30);
INSERT INTO t_employee(user_name,email,gender,age) VALUES('White','[email protected]',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查询,常用的方式有注解方式和xml方式,与MyBatis的用法一致
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);
}
}
public interface UserMapper extends BaseMapper<User> {
/**
* 查询用户列表
* @return
*/
List<User> findUserList();
}
如果在mapper接口相同目录下创建与接口同名的mapper映射文件,application.properties配置文件则不用进行任何配置
如果mapper映射文件是放在resource资源文件夹下的mapper目录,application.properties配置文件需要进行加载映射文件
#加载映射文件
mybatis-plus.mapper-locations=classpath:mapper/*.xml
resource/mapper目录下的UserMapper映射文件:
<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接口
第三步:测试
配置类代码同上
/**
* 分页查询
* @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 CRUD 封装IService接口,进一步封装 CRUD 采用
get 查询单行
remove 删除``list 查询集合
page 分页
前缀命名方式区分Mapper
层避免混淆,- 泛型
T
为任意实体对象- 建议如果存在自定义通用 Service 方法的可能,请创建自己的
IBaseService
继承Mybatis-Plus
提供的基类- 对象
Wrapper
为 条件构造器- 使用通用Service进行CRUD操作,业务层接口只需继承
IService
接口即可,其中T为泛型。
自定义Service接口,继承IService接口
public interface UserService extends IService<User> {
}
添加测试类,注入自定义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("[email protected]");
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("[email protected]");
user1.setName("露西");
User user2 = new User();
user2.setAge(20);
user2.setEmail("[email protected]");
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("[email protected]");
user1.setName("肉丝");
User user2 = new User();
user2.setAge(20);
user2.setEmail("[email protected]");
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代码生成器》