一、ActiveRecord
ActiveRecord 是 ORM 的一种实现方式,在 Ruby 和 PHP 中使用较多,ActiveRecord 的特点是模型类的一个实例化对象对应数据库表中的一行记录。
MyBatis Plus 框架中也实现了 ActiveRecord。
使用 IDEA 创建一个新的 Maven 项目 mybatis-plus-ar,相关依赖可以参考前面工程中的依赖。新建 entity 包并新增 Tesla 实体类,在 MyBatis 中使用 ActiveRecord 要将实体类继承 Model 类并重写 pkVal() 方法返回模型类的主键。
代码语言:javascript复制@Data
@TableName(value = "t_tesla")
public class Tesla extends Model<Tesla>{
@TableId(type = IdType.AUTO)
private Integer id;
@TableField(value = "name")
private String vehicleName;
@TableField(value = "price")
private Double vehiclePrice;
private String vehicleType;
private String factory;
@Override
public Serializable pkVal() {
return id;
}
}
其他如数据库连接配置、MyBatis Plus 配置以及日志配置等都可以参考前面的工程。
二、ActiveRecord 的 CRUD 操作
ActiveRecord 的特点是模型类的实例化对象对应表中的一行记录,所以 ActiveRecord 的操作方式是通过实例化对象调用方法进行增删改查操作。
ActiveRecord 的查询操作
Model 类中包含了许多查询操作,可以直接通过实例化的模型类对象调用这些方法。
新建一个测试类 TeslaTest,增加测试方法 selectById ()
代码语言:javascript复制@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:application.xml")
public class TeslaTest {
// 基于实体类本身进行操作
@Test
public void selectById(){
Tesla tesla = new Tesla();
Tesla selectTesla = tesla.selectById(1166057520);
System.out.println("查询到的数据为:n" selectTesla);
}
}
执行上述代码,输出结果如下:
出现该报错的原因是没有 Mapper 接口,虽然操作数据库用到的是实体类对象,但是仍然需要 Mapper 接口,新建 mapper 包,增加 TeslaMapper 接口继承 BaseMapper
代码语言:javascript复制public interface TeslaMapper extends BaseMapper<Tesla> {
}
再次执行 selectById() 方法
控制台中输出了查询到的数据,使用 id 查询时也可以将 id 设置到对象中。
测试类中新增 selectAll 方法,测试 Model 类中的 selectAll 方法
代码语言:javascript复制@Test
public void selectAll(){
Tesla tesla = new Tesla();
List<Tesla> teslaList = tesla.selectAll();
System.out.println("查询到的数据为:n" teslaList);
}
执行上述方法,输出结果如下:
selectList 方法可以根据条件进行查询,返回符合条件的数据
代码语言:javascript复制@Test
public void selectList(){
Tesla tesla = new Tesla();
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.gt("price",300000.00);
List<Tesla> teslaList = tesla.selectList(queryWrapper);
System.out.println("查询到的数据为:n" teslaList);
}
执行上述代码,输出结果如下:
selectCount 方法可以返回符合条件的记录的数量
代码语言:javascript复制@Test
public void selectCount(){
Tesla tesla = new Tesla();
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("price",300000.00);
long count = tesla.selectCount(queryWrapper);
System.out.println("符合条件的记录数为:n" count);
}
执行上述代码,输出结果如下:
ActiveRecord 插入操作
测试类中新增测试方法 insert
代码语言:javascript复制// 基于实体类本身进行操作
@Test
public void insert(){
Tesla tesla = new Tesla();
tesla.setVehicleName("Solar City 太阳能电池");
tesla.setFactory("纽约超级工厂");
tesla.setVehicleType("SUV");
tesla.setVehiclePrice(80000.00);
boolean insert = tesla.insert();
System.out.println("插入成功?" insert);
}
执行上述代码,输出结果如下:
查看数据库表中的记录
ActiveRecord 更新操作
在 TeslaTest 中新增 update 方法
代码语言:javascript复制@Test
public void update(){
Tesla tesla = new Tesla();
tesla.setId(1166057565);
tesla.setVehicleName("Solar City 太阳能电池");
tesla.setFactory("纽约州水牛城特斯拉超级工厂");
tesla.setVehicleType("电池");
tesla.setVehiclePrice(80000.00);
boolean insert = tesla.updateById();
System.out.println("更新成功?" insert);
}
执行上述代码,输出结果如下:
ActiveRecord 删除操作
在 TeslaTest 中新增 deleteById 方法
代码语言:javascript复制@Test
public void deleteById(){
Tesla tesla = new Tesla();
boolean delete = tesla.deleteById(1166057566);
System.out.println("删除成功?" delete);
}
执行上述代码,输出结果如下:
要删除的 id 也可以设置在实例化对象中。
ActiveRecord 分页查询操作
在 TeslaTest 中新增 分页查询方法 selectPage
代码语言:javascript复制@Test
public void selectPage(){
Tesla tesla = new Tesla();
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.lt("price", 1000000.00);
Page<Tesla> teslaPage = tesla.selectPage(new Page<>(1,5),queryWrapper);
System.out.println("分页查询到的记录总数为:" teslaPage.getSize());
}
执行上述代码,输出结果如下: