首页 专题 文章 代码 归档
MybatisPlus中的ActiveRecord
2020.02.10 12:34 2020.02.10 12:34

1. ActiveRecord

在Mybatis-Plus中提供了ActiveRecord的模式,支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作,简单来说就是一个实体类继承Model类,并通过注解与数据库的表名进行关联,这样就可以通过实体类直接进行表的简单增删改查操作,这样也确实极大的方便了开发人员。

原理理解:

简单来说Mybatis-plus是基于Mybatis的基础之上进行开发的,其基本操作还是一个Mapper操作中对应一条sql语句,通过参数和返回值来处理sql语句的执行结果。那样我们可以理解Mybatis-Plus的ActiveRecord其实就是Mybatis-Plus给我们提供一些简单的增删改查操作SQl语句的自动生成操作。

ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言, 对于 ActiveRecord 往往只能感叹其优雅,所以 MyBatisPlus也在 AR 道路上进行了一定的探索 。

1.1. 初次见面

1、实体类继承Model

public class User  extends Model<User> {

    @TableId(type = IdType.AUTO)
    private Integer id;
    private String user_name;

    @TableField(select = false) // 查询是不显示该字段的值
    private String password;

    @TableField("email") // 指定数据库中实际的字段名
    private String mail;
    private Integer age;

    @TableField(exist = false) // 在数据库中不存在
    private String address;
}

2、测试用例

@Test
public void testSelectById() {
    User user = new User();
    user.setId(4);
    User user1 = user.selectById(); // 在这个位置直接执行selectById

    System.out.println("user1 = " + user1);

}
JDBC Connection [com.mysql.jdbc.JDBC4Connection@4bbf38b8] will not be managed by Spring
==>  Preparing: SELECT id,user_name,email AS mail,age FROM user WHERE id=? 
==> Parameters: 4(Integer)
<==    Columns: id, user_name, mail, age
<==        Row: 4, 赵六, zhaoliu@misiai.com, 28
<==      Total: 1

那是不是可以删除UserMapper接口了呢?

不可以,因为底层还是使用到了接口。

1.2. 测试新增

@Test
public void testInsert() {
    User u = new User();
    u.setUser_name("无道");
    u.setPassword("wrjklej");
    u.setMail("991418182@qq.com");


    boolean insert = u.insert();
    System.out.println("insert = " + insert);
}

1.3. 更新操作

@Test
public void testUpdate() {
    User u = new User();
    u.setId(4);
    u.setUser_name("无道22");
    u.setAge(31);
    boolean b = u.updateById();
    System.out.println("b = " + b);
}
JDBC Connection [com.mysql.jdbc.JDBC4Connection@34aa8b61] will not be managed by Spring
==>  Preparing: UPDATE user SET user_name=?, age=? WHERE id=? 
==> Parameters: 无道22(String), 31(Integer), 4(Integer)
<==    Updates: 1

1.4. 删除操作

@Test
public void testDelete() {

    User u = new User();
    u.setId(4);
    boolean b = u.deleteById();
    System.out.println("b = " + b);
}

1.5. 根据条件查询

@Test
public void testSelectCondition() {

    QueryWrapper<User> wrapper = new QueryWrapper<>();

    wrapper.ge("age", 30);
    User u = new User();
    List<User> users = u.selectList(wrapper);
    System.out.println("users = " + users);
}
本节阅读完毕!
二维码图片 扫描关注我们哟