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