最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA。
有点挑战,做完了,会有很大进步。
上一篇,我们明确了我们的“规范和约定”。
从本篇开始,写具体的方案和架构。
本篇,重点阐述通用接口定义。
既然做了分表,那么针对单表的CRUD等很多代码,都是一样的,类似的,因此,定义通用的接口和实现。
就可以配置模版,自动化生成代码啦,后面再详细介绍代码自动化生成。
BaseMapper通用的sql接口定义
上一篇,我们明确了我们的“规范和约定”。
从本篇开始,写具体的方案和架构。
本篇,重点阐述通用接口定义。
既然做了分表,那么针对单表的CRUD等很多代码,都是一样的,类似的,因此,定义通用的接口和实现。
就可以配置模版,自动化生成代码啦,后面再详细介绍代码自动化生成。
BaseMapper通用的sql接口定义
import java.util.List;
public interface BaseMapper<ID, Entity,Bean> {
//read
Entity get(ID id);
List<Entity> listByIdList(List<String> idList);
List<Entity> list(Bean bean);
List<Entity> listAll();
//write
int add(Entity entity);
int update(Entity entity);
int updateByMemberId(Entity entity);
int remove(ID id);
int removeByIdList(List<ID> idList);
}
BrandMapper具体的Mybatis接口定义,继承 BaseMapper,再添加自己特殊的sql映射接口定义
@Mapper
public interface BrandMapper extends BaseMapper<String, Brand,BrandBean> {
//---------------------read-------------------------
List<Brand> listByShopIdList(List<String> shopIdList);
//---------------------write-------------------------
}
BrandMapper.xml 品牌表的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.webservice.mapper.BrandMapper">
<sql id="columns">
id,name,logo,createTime,updateTime,isDelete
</sql>
<select id="get" resultType="Brand">
select
<include refid="columns" />
from brand
where id =
#{id}
</select>
<select id="list" resultType="Brand">
select
<include refid="columns" />
from brand where
isDelete=0
<if test="name != null and name !=''">
and name like '%${name}%'
</if>
order by createTime desc
</select>
<select id="listAll" resultType="Brand">
select
<include refid="columns" />
from brand where
isDelete=0 order by createTime desc
</select>
<select id="listByShopIdList" parameterType="String" resultType="Brand">
select
<include refid="columns" />
from brand where merchantId in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
</select>
<select id="listByIdList" parameterType="String" resultType="Brand">
select
<include refid="columns" />
from brand where id in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
</select>
<insert id="add" parameterType="Brand">
insert into brand
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="logo != null">
logo,
</if>
createTime,
updateTime
</trim>
<trim prefix="values(" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id},
</if>
<if test="name != null">
#{name},
</if>
<if test="logo != null">
#{logo},
</if>
now(),
now()
</trim>
</insert>
<update id="update" parameterType="Brand">
update brand
<set>
<if test="name != null">
name = #{name},
</if>
<if test="logo != null">
logo = #{logo},
</if>
updateTime=now()
</set>
where id=#{id}
</update>
<update id="remove" parameterType="String">
update brand set isDelete
=
1,updateTime=now() where id=#{id}
</update>
<update id="removeByIdList" parameterType="String">
update brand
set isDelete = 1,updateTime = now()
where
id in
<foreach item="item" index="index" collection="list" open="("
separator="," close=")">
#{item}
</foreach>
</update>
</mapper>
更多接口的定义和实现,后面再介绍。