1在MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑
具体的步骤如下
1.首先有一个自己的实体类
@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
//TableName这个注解可以防止数据库中的表名和数据库中的数据表名不一致现象
@TableName("user")
public class User {
@TableId(value = "id")
// 这个TableId 1.可以设置数据的主键对应的属性,默认值,与mybatis_plus联合使用,还可以使主键名称不一致时使用2.可以设置主键的属性增长方式type = IdType.AUTO
private Long id;
// @TableField 当表结构中的字段和实体类中的属性不一致的情况下可以设置映射关系(如name 映射成为t_name)
// 注意如果数据库中的user_name 实体中的是username,mybatis_plus会帮助我们自动完成驼峰命名
private String name;
private Integer age;
private String email;
// 0表示没有删除 1表示已经逻辑删除
@TableLogic(value = "0",delval = "1")
private Integer isDeleted;
}
2 在mapper中一定要继承BaseMapper,里面写上自己的要操作的类如User
//Mybatisplus必须继承BaseMapper,同时必须指定要操作的实体对象
public interface UserMapper extends BaseMapper<User> {
}
3.业务逻辑层一定要实现Iservice接口,接口实现类要实现自己的业务逻辑
//自定义的service,需要继承Iservice接口
public interface IUserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements IUserService {
}
自己写的业务逻辑只需要继承IService接口即可实现基本的增删改查操作,方便用户编程。
测试类
@SpringBootTest
class MybatisPlusApplicationTests1 {
@Resource
private UserMapper userMapper;
@Resource
private IUserService userService;
/**
*查询姓名中包含o,且年龄大于20,email不为空的对象
*/
@Test
void select(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name","o")
.gt("age",20)
.isNotNull("email");
final List<User> users = userMapper.selectList(wrapper);
System.out.println(users);
}
/**
* 首先根据年龄升序,年龄相同的情况下根据id降序
*/
@Test
void selectA(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("age").orderByDesc("id");
final List<User> users = userMapper.selectList(wrapper);
// System.out.println(users);
users.forEach(System.out::println);
}
/**
* 删除年龄超过179的
*
*/
@Test
void delete(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age",179);
System.out.println(userMapper.delete(queryWrapper));
}
/**
*查询姓名中包含o,且年龄大于20,email不为空的对象
* 组合查询内容
*/
@Test
void selectMap(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
// wrapper.like("name","o")
// .gt("age",20)
// .isNotNull("email");
wrapper.and((item) ->{
item.like("name","o")
.gt("age",20);
}).or((item)->{
item.isNull("email");
});
System.out.println(userMapper.selectList(wrapper));
final List<User> users = userMapper.selectList(wrapper);
System.out.println(users);
}
// 查询特定的字段
@Test
void selectMaps(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.and((item) ->{
item.gt("age",20)
.like("name","o");
}).or((item) ->{
item.isNull("email");
}).select("id","name","age");
List<Map<String,Object>> list = userMapper.selectMaps(queryWrapper);
list.forEach(System.out::println);
}
// 简单的子查询内容
@Test
void selectChildren(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("id","select id from user where id < 6");
List<Map<String,Object>> list = userMapper.selectMaps(queryWrapper);
list.forEach(System.out::println);
}
@Test
void update(){
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.set("name","yzj")
.set("email","123")
.eq("id",3l);
final int update = userMapper.update(null, wrapper);
System.out.println(update);
}
// 动态sql查询
@Test
void sqlDongtai(){
String name = "yzj";
Integer age = null;
String email = null;
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if(StringUtils.isNotBlank(name)){
queryWrapper.eq("name",name);
}
// 工作中经常用到的
queryWrapper.eq(StringUtils.isNotBlank(name),"name",name);
// if(age > 0 && age != null){
// queryWrapper.eq("age",age);
// }
System.out.println(userMapper.selectList(queryWrapper));
}
// 分页查询处理
@Test
void pageQuery(){
Page<User> page = new Page<>(1,5);
final Page<User> page1 = userMapper.selectPage(page, null);
final List<User> records = page1.getRecords();
records.forEach(System.out::println);
System.out.println(page1.getCurrent());
System.out.println(page1.getSize());
System.out.println(page1.getTotal());
System.out.println(page1.getPages());
}
注意批量查询 批量删除 批量插入内容saveBatch这些内容
指定日志输出 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # 配置MyBatis-Plus操作表的默认前缀 mybatis-plus.global-config.db-config.table-prefix=t_
1.mapper层和service层有什么区别
一个是业务接口,一个是正常的接口