前言:
关于mybatis-plus的简介以及基本使用,我在入门一文中已做介绍,此处不再赘述。本文主要对mybatis-plus的AR模式、插件、逆向工程、自定义全局操作、公共字段自动填充等知识点进行讲解。
欢迎大家关注我的公众号 javawebkf,目前正在慢慢地将简书文章搬到公众号,以后简书和公众号文章将同步更新,且简书上的付费文章在公众号上将免费。
一、ActiveRecord:
Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定的探索,仅仅需要让实体类继承 Model 类且实现主键指定方法,即可开启 AR 之旅。接下来看具体代码:
1、entity:
@Data
public class User extends Model<User> {
private Integer id;
private String name;
private Integer age;
private Integer gender;
//重写这个方法,return当前类的主键
@Override
protected Serializable pkVal() {
return id;
}
}
**注:**实体类继承Model类,重写pkVal方法。
2、mapper:
public interface UserDao extends BaseMapper<User> {
}
**注:**虽然AR模式用不到该接口,但是一定要定义,否则使用AR时会报空指针异常。
3、使用AR:
**(1)、**AR插入操作:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
"classpath:spring/spring-dao.xml"})
public class TestAR {
@Test
public void testArInsert(){
User user = new User();
user.setName("林青霞");
user.setAge(22);
user.setGender(1);
boolean result = user.insert();
System.out.println(result);
}
}
image.png
**注:**可以看到我们并不需要注入mapper接口,不过正如刚才所说,不使用但还是要定义,否则会报错。AR操作是通过对象本身调用相关方法,比如要insert一个user,那就用这个user调用insert方法即可。返回值为布尔类型,由上图可看到返回了true,是操作成功的。
**(2)、**AR更新操作:
@Test
public void testArUpdate(){
User user = new User();
user.setId(1);
user.setName("刘亦菲");
boolean result = user.updateById();
System.out.println(result);
}
**注:**user调用updateById方法,将id为1的用户进行更新。
**(3)、**AR查询操作:
@Test
public void testArSelect(){
User user = new User();
//1、根据id查询
//user = user.selectById(1);
//或者这样用
//user.setId(1);
//user = user.selectById();
//2、查询所有
//List<User> users = user.selectAll();
//3、根据条件查询
//List<User> users = user.selectList(new EntityWrapper<User>().like("name","刘"));
//4、查询符合条件的总数
int result = user.selectCount(new EntityWrapper<User>().eq("gender",1));
System.out.println(result);
}
**注:**上面的代码涉及到了四个不同的查询操作,其实用法与MP的BaseMapper提供的方法的用法差不多,只不过这里是实体对象调用。
**(4)、**AR删除操作:
@Test
public void testArDelete(){
User user = new User();
//删除数据库中不存在的数据也是返回true
//1、根据id删除数据
//boolean result = user.deleteById(1);
//或者这样写
//user.setId(1);
//boolean result = user.deleteById();
//2、根据条件删除
boolean result = user.delete(new EntityWrapper<User>().like("name","玲"));
System.out.println(result);
}
**注:**这里介绍了两个删除方法,代码中已有注释说明。需要注意的是,删除数据库中不存在的数据,结果也是true。
**(5)、**AR分页操作:
@Test
public void testArPage(){
User user = new User();
Page<User> page =
user.selectPage(new Page<>(1,4),
new EntityWrapper<User>().like("name","刘"));
List<User> users = page.getRecords