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);
}