(二)mybatisPlus实现ActiveRecord(AR)操作

简介: mybatisPlus实现ActiveRecord(AR)操作

mybatisPlus实现ActiveRecord(AR)操作

一、什么是ActiveRecord?

🍅看mybatisPlus实现ActiveRecord(AR)操作之前,建议先看Mybatis-plus(MP)中CRUD操作保姆级笔记


ActiveRecord翻译:活动记录


每一个数据库表 对应创建一个类 ,类的每一个对象实例 对应于数据库中表的一行记录 ; 通常表的每个字段 在类中都有相应的 Field;


ActiveRecord 负责把自己持久化. 在 ActiveRecord 中封装了对数据库的访问 ,通过对象自己实现 CRUD,实现优雅的数据库操作。


ActiveRecord 也封装了部分业务逻辑 。可以作为业务对象使用。


二、MybatisPlus操作ActiveRecord

1、AR实现CRUD操作的环境准备

(1)创建数据库表

创建员工表

-- 创建员工表
CREATE TABLE dept (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) DEFAULT NULL,
mobile varchar(50) DEFAULT NULL,
manager int(11) DEFAULT NULL, PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 查询
select * from dept;
-- 表结构
desc dept;

表结构


image.png

(2)dept实体类

mybatisPlus中Model 类中提供了对数据库的CRUD 操作


/**
 * @author 王恒杰
 * @version 1.0
 * @Description:
 * 使用AR,要求实体类需要继承MybatisPlus中的model方法
 * Model中提供了对数据库的CRUD 操作
 */
public class Dept extends Model<Dept> {
    /**
     * 设置表的主键,自增长
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    private  String name;
    private String mobile;
    private Integer manager;

mybatisPlus中Model类 源码解读版

public abstract class Model<T extends Model<?>> implements Serializable {
    //实现序列化接口
    private static final long serialVersionUID = 1L;
    //无参构造
    public Model() {
    }
    //添加
    public boolean insert() {
 }
    public boolean insertOrUpdate() {}
    public boolean deleteById(Serializable id) { }
    public boolean deleteById() { }
    public boolean updateById() { }
    public boolean update(Wrapper<T> updateWrapper) {}
    public List<T> selectAll() {}
    public T selectById(Serializable id) {}
    public T selectById() {}
    public List<T> selectList(Wrapper<T> queryWrapper) {}
    public T selectOne(Wrapper<T> queryWrapper) {}
    public <E extends IPage<T>> E selectPage(E page, Wrapper<T> queryWrapper) {}
    public Integer selectCount(Wrapper<T> queryWrapper) {}
    protected SqlSession sqlSession() {}
    protected String sqlStatement(SqlMethod sqlMethod) {}
    protected String sqlStatement(String sqlMethod) {}
    protected void closeSqlSession(SqlSession sqlSession) {}
}

(3)mapper

mybatisPlus必须通过Mapper扫描到实体,才能找到和表的对应的关系


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

2、AR 之 insert

@RunWith(SpringRunner.class)的作用

Springboot的@RunWith(SpringRunner.class)
注解的意义在于Test测试类要使用注入的类,比如@Autowired注入的类,
有了@RunWith(SpringRunner.class)这些类才能实例化到spring容器中,自动注入才能生效,
不然直接一个NullPointerExecption

测试类

/**
     * 添加操作
     */
    @Test
    public void  insertDeptTest(){
        Dept dept = new Dept();
        dept.setName("市场部");
        dept.setMobile("123");
        dept.setManager(1);
        //返回的是boolean值,如果为true为真,如果为false为执行失败
        boolean insert = dept.insert();
        System.out.println(insert);
    }

封装的sql语句

INSERT INTO dept ( name, mobile, manager ) VALUES ( ?, ?, ? ) 

3、AR之删除delete

测试类

     /**
     * 删除操作
     */
    @Test
    public void  deleteDeptTest(){
        Dept dept = new Dept();
        dept.setId(1);
        boolean delete = dept.deleteById(dept);
        System.out.println(delete);
    }

封装的SQL语句

DELETE FROM dept WHERE id=? 

日志


image.png

注意:删除操作即使没从数据库中删除,返回的值也是true


image.png

4、AR之操作update

测试类

    /**
     * 更新操作
     */
    @Test
    public void  updateDeptTest(){
        Dept dept = new Dept();
        dept.setId(2);
        dept.setName("技术部");
        //null的属性值不做更新处理,在update中没有null字段
        boolean update = dept.updateById();
        //封装的Sql语句:  UPDATE dept SET name=? WHERE id=?
        System.out.println(update);
    }

封装的SQL语句

 UPDATE dept SET name=? WHERE id=?

5、AR之查询select

测试类

    /**
     * 查询操作
     */
    @Test
    public void  selectDeptTest(){
        Dept dept = new Dept();
        dept.setId(2);
        // SELECT id,name,mobile,manager FROM dept WHERE id=? 
        Dept dept1 = dept.selectById();
        System.out.println(dept1);
    }

封装的SQL语句

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

日志


image.png

没有对应的值,值为null

  /**
     * 查询操作
     */
    @Test
    public void  selectDeptTest(){
        Dept dept = new Dept();
        //id为1的值是没有的,已经被删除了
        dept.setId(1);
        // SELECT id,name,mobile,manager FROM dept WHERE id=?
        Dept dept1 = dept.selectById();
        System.out.println(dept1);
    }

image.png

相关文章
|
Java 关系型数据库 数据库连接
MyBatis Plus在AR道路上的探索之ActiveRecord
MyBatis Plus在AR道路上的探索之ActiveRecord
260 0
|
Java 关系型数据库 API
mybatisPlus之ActiveRecord模式及SimpleQuery使用
mybatisPlus之ActiveRecord模式及SimpleQuery使用
|
SQL Java 程序员
(二)mybatisPlus实现ActiveRecord(AR)操作
mybatisPlus实现ActiveRecord(AR)操作 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
273 0
(二)mybatisPlus实现ActiveRecord(AR)操作
|
Java 数据库连接 PHP
Data Access 之 MyBatis Plus(六)- ActiveRecord
Data Access 之 MyBatis Plus(六)- ActiveRecord
Data Access 之 MyBatis Plus(六)- ActiveRecord
|
3月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
591 1
Spring boot 使用mybatis generator 自动生成代码插件
|
6月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
525 0
|
8月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
312 2
|
11月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
443 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
11月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
341 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
11月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
2477 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个