前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Data Access 之 MyBatis Plus(六)- ActiveRecord

Data Access 之 MyBatis Plus(六)- ActiveRecord

作者头像
RiemannHypothesis
发布2022-08-19 17:53:40
7060
发布2022-08-19 17:53:40
举报
文章被收录于专栏:Elixir

一、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 类中包含了许多查询操作,可以直接通过实例化的模型类对象调用这些方法。

image.png
image.png

新建一个测试类 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);
    }
}

执行上述代码,输出结果如下:

image.png
image.png

出现该报错的原因是没有 Mapper 接口,虽然操作数据库用到的是实体类对象,但是仍然需要 Mapper 接口,新建 mapper 包,增加 TeslaMapper 接口继承 BaseMapper

代码语言:javascript
复制
public interface TeslaMapper extends BaseMapper<Tesla> {
}

再次执行 selectById() 方法

image.png
image.png

控制台中输出了查询到的数据,使用 id 查询时也可以将 id 设置到对象中。

测试类中新增 selectAll 方法,测试 Model 类中的 selectAll 方法

代码语言:javascript
复制
@Test
public void selectAll(){
    Tesla tesla = new Tesla();

    List<Tesla> teslaList = tesla.selectAll();
    System.out.println("查询到的数据为:\n" + teslaList);
}

执行上述方法,输出结果如下:

image.png
image.png

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

执行上述代码,输出结果如下:

image.png
image.png

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

执行上述代码,输出结果如下:

image.png
image.png

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

执行上述代码,输出结果如下:

image.png
image.png

查看数据库表中的记录

image.png
image.png

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

执行上述代码,输出结果如下:

image.png
image.png

ActiveRecord 删除操作

在 TeslaTest 中新增 deleteById 方法

代码语言:javascript
复制
@Test
public void deleteById(){
    Tesla tesla = new Tesla();
    boolean delete = tesla.deleteById(1166057566);
    System.out.println("删除成功?" + delete);
}

执行上述代码,输出结果如下:

image.png
image.png

要删除的 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());
}

执行上述代码,输出结果如下:

image.png
image.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、ActiveRecord
  • 二、ActiveRecord 的 CRUD 操作
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档