映射器Mapper
使用代码生成器生成Mapper接口以及Mapper.xml文件
so-fast框架的ORM基于Mybatis-plus实现,因此规范所有的业务Mapper必须继承Mybatis-plus的通用Mapper。
Mapper接口的定义
Mapper接口的定义需要遵循以下规范:
接口必须extends BaseMapper
Good:
/**
* 系统设置 Mapper 接口
* @Package: com.sofast.system.setting.mapper
* @Description: 系统设置
* @Date : 2020-12-16
* @Author NCIT
*/
public interface SysSettingsMapper extends BaseMapper<SystemSettings> {
通用Mapper中已经实现了基本的增删改查功能,对于表的基本操作,不需要写sql文。
SQL文
对于复杂的sql处理,需要书写SQL文来提供业务处理。(不推荐写复杂的表关联,对于表关联等操作,建议在应用层处理)
当mybatis-plus提供的通用方法无法满足业务需求时,可以通过自定义方法和写sql文的方式来实现。
利用代码生成器,在resources目录下会生成xml文件
src/main/resources
└── mapper
├── biz
├── dict
│ ├── DictDataMapper.xml
│ └── DictTypeMapper.xml
├── setting
└── upms
按照如下格式规范编写mybatis sql文
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sofast.system.dict.mapper.DictTypeMapper">
<sql id="selectColumn">
select id, dict_name, dict_type, status, remark, create_user, create_time, update_user, update_time
from sys_dict_type
</sql>
<sql id="orderColumn">
order by dict_type, update_time desc
</sql>
<select id="list" parameterType="DictTypeQueryVo" resultType="DictType">
<include refid="selectColumn"/>
<where>
<if test="dictTypeQueryVo.dictName != null and dictTypeQueryVo.dictName != ''">
AND dict_name like concat('%', #{dictTypeQueryVo.dictName}, '%')
</if>
<if test="dictTypeQueryVo.dictType != null and dictTypeQueryVo.dictType != ''">
AND dict_type like concat('%', #{dictTypeQueryVo.dictType}, '%')
</if>
<if test="dictTypeQueryVo.status != null and dictTypeQueryVo.status != ''">
AND status = #{dictTypeQueryVo.status}
</if>
</where>
<include refid="orderColumn"/>
</select>
</mapper>
select节点的id属性值,对应mapper接口中的方法名,parameterType对应方法的参数类型,resultType对应方法的返回值。
在Mapper接口中自定义list方法。
public interface DictTypeMapper extends BaseMapper<DictType> {
public Page<DictType> list(Page<DictType> page, @Param("dictTypeQueryVo") DictTypeQueryVo dictTypeQueryVo);
}
在Service接口中自定义list方法。
public interface IDictTypeService extends IService<DictType> {
/**
* 条件查询列表
* @param page
* @param dictTypeQueryVo
* @return
*/
public Page<DictType> list(Page<DictType> page, DictTypeQueryVo dictTypeQueryVo);
在ServiceImpl中实现Service接口的list方法
@Override
public Page<DictType> list(Page<DictType> page, DictTypeQueryVo dictTypeQueryVo) {
return getBaseMapper().list(page, dictTypeQueryVo);
}