映射器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);
}
