MyBatis 使用说明

平台后端访问数据库的持久层,采用的是 MyBatis 框架,并集成了 MyBatis-Plus。

本章节主要从以下几个方面介绍 MyBatis 在本平台的使用方式。

自动生成代码 gen-java

新建一个数据模型 data.m 后,应用会自动根据 data.m 在 gen-java 目录下生成对应的 entity 类和 mapper 类。生成的这些类,后续可以直接在 service 类中进行引用和使用。

以 main 模块为例,生成的代码结构参考如下:

├─model
│  ├─service
│  │  ├─main
│  │  │  ├─orderm.data.m -- 数据模型文件
│  │  │  ├─src
│  │  │  │  ├─main
│  │  │  │  │  ├─gen-java -- 系统生成的文件,注意不能修改
│  │  │  │  │  │  ├─main
│  │  │  │  │  │  │  ├─mapper
│  │  │  │  │  │  │  │  └─OrdermMapper.java -- Mapper接口,继承 Mybatis-Plus 基础类
│  │  │  │  │  │  │  ├─entity
│  │  │  │  │  │  │  │  └─Orderm.java -- 实体类
│  │  │  │  │  └─java -- 开发者的文件

更多生成代码文件的细节,参考《代码模型》。

需要注意的是,gen-java 下的代码是应用每次编译后自动生成的代码文件,注意不能修改(即使修改了也会被还原)。

后续在 src/main/java 目录,开发者可以在 service 类中引用这些类,例如:

@Autowired
private OrdermMapper ordermMapper;

自定义 Mapper

除了平台自动生成的 mapper,开发者也可以自定义自己的 mapper,方便后续使用。

自定义的 mapper 文件,需要放到 java 目录下。参考以下目录:

├─model
│  ├─service
│  │  ├─main
│  │  │  ├─src
│  │  │  │  ├─main
│  │  │  │  │  ├─java -- 开发者的文件
│  │  │  │  │  │  ├─main
│  │  │  │  │  │  │  ├─mapper
│  │  │  │  │  │  │  │  └─OrderdCustomMapper.java -- Mapper接口
│  │  │  │  │  │  │  └─service

文件可以继承 MyBatis-Plus 的 BaseMapper,后续可以使用 plus 的通用方法,示例代码如下:

@Mapper
public interface OrderdCustomMapper extends BaseMapper<main.entity.Orderd> {

     @Update({"<script>",
         "<foreach collection='list' item= 'item' index ='index' separator=';'>",
         "update main_orderm a set a.orderNumber = #{item.orderNumber} where a.fid=#{item.fid}",
         "</foreach>",
         "</script>"})
     public int updateATableForeach(@Param("list") List<Orderm> list);
}

后续开发者可以在 service 类中引用这些自定义的 mapper 类。

常用方法

除了自动生成的 mapper 类的那几个常用操作,也可以基于 MyBatis-Plus 的通用方法来实现数据的操作。这块更详细的内容,可以参考 MyBatis-Plus 相关网站的资料。

查询操作

主要使用 QueryWrapper 构造查询条件进行数据的查询。示例代码如下:

    @Autowired
    private OrdermMapper ordermMapper;

    public void query() {
        QueryWrapper<Orderm> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("orderNo", "001").eq("valid", 1);
        List<Orderm> list = ordermMapper.selectList(queryWrapper);
        list.forEach(System.out::println);
    }

插入操作

由于插入比较通用,自动生成的 mapper 类的方法中已经覆盖了 insert 操作,可以直接使用。示例代码如下:

    public void insert() {
        Orderm orderm = new Orderm();
        orderm.setOrderNo("xxx");
        ordermMapper.insert(orderm);
    }

修改操作

主要使用 UpdateWrapper 进行构造修改条件进行数据的修改,其中 set 函数用来修改内容。示例代码如下:

    public void update() {
        UpdateWrapper<Orderm> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("orderNo", "xxx");
        updateWrapper.set("money", 100);
        int rows = ordermMapper.update(null, updateWrapper);
        System.out.println("影响记录数:" + rows);
    }

删除操作

先以 QueryWrapper 构造删除的查询条件,再进行删除操作。示例代码如下:

    public void delete() {
        QueryWrapper<Orderm> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("orderNo", "001");
        int rows = ordermMapper.delete(queryWrapper);
        System.out.println("删除条数:" + rows);
    }

results matching ""

    No results matching ""