mybatis-plus-ActiveRecord【AR】

1.ActiveRecord是什么?

  • 每个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有对应的Field。
  • ActiveRecord负责把自己持久化,在ActiveRecord中封装了对数据库的访问,通常对象自己实现CRUD,实现优雅的数据库操作。
  • ActiveRecord也封装了部分业务逻辑。可以作为业务对象使用。

2.数据库准备

创建表dept.
在这里插入图片描述

3.编码

3.1实体类

  • 使用AR,要求实体类需要继承MP中的Model
    Model中提供了对数据库的CRUD的操作
public class Dept extends Model<Dept> {
    //定义属性,属性名和表的列名一致
	  @TableId(value = "id",type = IdType.AUTO)
    private String id;
    private String name;
    private String mobile;
    private Integer manager;
}

3.2,mapper

  • 不使用mapper,也需要定义这个类,MP通过mapper获取到表的结构;不定义会报错。
package com.putao.plus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.putao.plus.entity.Dept;

/**
 * DeptMapper是不需要使用的,MP需要使用DeptMapper获取到数据库的表信息。
 * 如果不定义DeptMapper,MP会报错,找不到表的定义信息
 */
public interface DeptMapper extends BaseMapper<Dept> {
}

4.测试AR

4.1AR之insert

  • 调用实体对象自己的方法,完成对象自身到数据库的添加操作
    INSERT INTO dept ( name, mobile, manager ) VALUES ( ?, ?, ? )
@Test
    public void testARInsert(){
        //定义dept的实体
        Dept dept = new Dept();
        dept.setName("行政部");
        dept.setMobile("020-66666666");
        dept.setManager(5);
        //调用实体对象自己的方法,完成对象自身到数据库的添加操作
        //INSERT INTO dept ( name, mobile, manager ) VALUES ( ?, ?, ? )
        boolean flag = dept.insert();
        System.out.println("ar insert result:"+flag);
    }

4.2AR之update

  • 1)根据主键id更新记录
    UPDATE dept SET name=?, mobile=?, manager=? WHERE id=?
@Test
    public void testARUpdate(){
        //定义实体Dept
        Dept dept= new Dept();
//        dept.setId(2);
        dept.setMobile("010-22222222");
        dept.setName("改为市场部");
        dept.setManager(2);
        //根据主键id更新记录
        //UPDATE dept SET name=?, mobile=?, manager=? WHERE id=? // id = 1
        boolean result = dept.updateById();//使用dept实体主键的值,作为where id = 1
        System.out.println("ar updateById result:"+result);
    }
  • 2)更新部分记录
    null的属性值不做更新处理,在update中没有null的字段
    UPDATE dept SET mobile=? WHERE id=?
	@Test
    public void testARUpdate2(){
        //定义实体Dept
        Dept dept= new Dept();
        dept.setId(1);
        dept.setMobile("010-3333333");
        //name,manager是没有修改的
        //null的属性值不做更新处理,在update中没有null的字段
        //UPDATE dept SET mobile=? WHERE id=?
        boolean result = dept.updateById();//使用dept实体主键的值,作为where id = 1
        System.out.println("ar updateById result:"+result);
    }

4.3AR之delete

deleteById()删除操作即使没有从数据库中删除数据,也返回是true
DELETE FROM dept WHERE id=?

  • 1)deleteById(主键)
	@Test
    public void testARDeleteById(){
        Dept dept = new Dept();
        //DELETE FROM dept WHERE id=?
        boolean result = dept.deleteById(1);
        System.out.println("ar deleteById result:"+result);
    }
  • 2)deleteById()
	@Test
    public void testARDeleteById2(){
        Dept dept = new Dept();
        dept.setId(2);
        //DELETE FROM dept WHERE id=?
        boolean result = dept.deleteById();
        System.out.println("ar deleteById result:"+result);
    }

4.4AR之select

SELECT id,name,mobile,manager FROM dept WHERE id=?

  • 1)selectById
    1.按实体的主键能查出数据,返回对象
    2.按实体的主键不能查出数据,是null,不报错
	@Test
    public void testARSelectById(){
        Dept dept = new Dept();
        //设置主键的值
        dept.setId(1);
        //调用查询方法
        //SELECT id,name,mobile,manager FROM dept WHERE id=?
        Dept dept1 = dept.selectById();
        System.out.println("ar selectById result:"+dept1);
    }
  • 2)selectById(主键)
    1.主键有记录,返回实体对象
    2.主键没有记录,返回是null
	@Test
    public void testARSelectById2(){
        Dept dept = new Dept();
        Dept dept1 = dept.selectById(3);
        System.out.println("dept1:"+dept1);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值