按照慧体的 代码格式 创建一个接口的整体流程:
第一步: 把sql写出来。
根据需求 写 mapper 的接口,并在mapper.xml 里面实现,规定传入参数和输出参数的类型。根据需求写sql判断是否为空。
这个是接口:
public interface UserRoleExtMapper {
List<RoleInfo> getRoleInfo(@Param("userId")String userId);
}
如果这个返回的字段很多的话就建议 用 resultMap 标签创建一个 map 来接收返回对象。在,mybatis 里面有两种返回的参数 resultType 和resultMap 后者可以用前面定义的resultMap 对象,后者可以用一个实体类作为对象接收返回数据,如果是返回的集合List ,就需要把 list集合的对象作为返回的resultType ,当然也可以用sql标签
<sql id="Example_Where_Clause" >
<where >
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
然后在以后的sql 里面添加:
<select id="selectByExampleWithBLOBs" resultMap="ResultMapWithBLOBs" parameterType="com.hupu.smart.game.platform.domain.user.FeedbackExample" >
select
<if test="distinct" >
distinct
</if>
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from feedback
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null" >
order by ${orderByClause}
</if>
</select>
第二步: 创建service 层的接口和实现;
在创建这一层的接口的时候要充分的考虑到 输入参数和 输出参数的类型,是不是有更简单的操作方式, 能不建实体类就尽量不建。一般情况下service 层的代码是要 处理业务逻辑的,所以这一层比较大。
第三步: 创建controller (控制层);
慧体的控制层有个特点,就是 输入的参数都是 用json ,然后用一个实体类来封装请求参数,并把这个请求参数通过一个 util copy 成一service层的 实体类
BeanUtils.copyProperties(req, reqDto);
然后调用service 层的 方法 并把对象参数传递过去,service 层就开始业务逻辑的判断操作。并把返回值带到 控制层。
控制层接收返回值,并给做出反应
整个请求结束。
整个过程中最麻烦的是 service 层的 业务逻辑处理。