一、ActiveRecord
ActiveRecord 是 ORM 的一种实现方式,在 Ruby 和 PHP 中使用较多,ActiveRecord 的特点是模型类的一个实例化对象对应数据库表中的一行记录。
MyBatis Plus 框架中也实现了 ActiveRecord。
使用 IDEA 创建一个新的 Maven 项目 mybatis-plus-ar,相关依赖可以参考前面工程中的依赖。新建 entity 包并新增 Tesla 实体类,在 MyBatis 中使用 ActiveRecord 要将实体类继承 Model 类并重写 pkVal() 方法返回模型类的主键。
@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 ()
@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
public interface TeslaMapper extends BaseMapper<Tesla> { } 复制代码
再次执行 selectById() 方法
控制台中输出了查询到的数据,使用 id 查询时也可以将 id 设置到对象中。
测试类中新增 selectAll 方法,测试 Model 类中的 selectAll 方法
@Test public void selectAll(){ Tesla tesla = new Tesla(); List<Tesla> teslaList = tesla.selectAll(); System.out.println("查询到的数据为:\n" + teslaList); } 复制代码
执行上述方法,输出结果如下:
selectList 方法可以根据条件进行查询,返回符合条件的数据
@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 方法可以返回符合条件的记录的数量
@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
// 基于实体类本身进行操作 @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 方法
@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 方法
@Test public void deleteById(){ Tesla tesla = new Tesla(); boolean delete = tesla.deleteById(1166057566); System.out.println("删除成功?" + delete); } 复制代码
执行上述代码,输出结果如下:
要删除的 id 也可以设置在实例化对象中。
ActiveRecord 分页查询操作
在 TeslaTest 中新增 分页查询方法 selectPage
@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()); } 复制代码
执行上述代码,输出结果如下: