最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA。
    有点挑战,做完了,会有很大进步。

上一篇,我们明确了我们的“规范和约定”。

从本篇开始,写具体的方案和架构。

本篇,重点阐述通用接口定义。

   既然做了分表,那么针对单表的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>

更多接口的定义和实现,后面再介绍。

一个电商项目的Web服务化改造4:方案和架构,通用接口的定义和实现的更多相关文章

  1. 一个电商项目的Web服务化改造

    一个电商项目的Web服务化改造 项目,早期是随便瞎做的,没啥架构,连基本的设计也没. 有需求,实现需求,再反复修改. 大致就是这么做的. 最近,项目要重新架构,和某boss协商的结果是,采用阿里开源的 ...

  2. 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚

      最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.     有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过.     可以在这里看到相关的 ...

  3. 一个电商项目的Web服务化改造3:改进方案の规范和约定、单表、单一职责

         最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.      有点挑战,做完了,会有很大进步. 上一篇,我们描述了原有项目中的问题.  或者说是,本篇的基本 ...

  4. 一个电商项目的Web服务化改造5:面向服务的分层架构设计(有图有真相)

    最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.     有点挑战,做完了,会有很大进步. 本篇,以我亲自画的3个图,阐述一下架构设计.   一.分层架构-总体图 ...

  5. 一个电商项目的Web服务化改造2:现有项目的5个问题

         最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.      有点挑战,做完了,会有很大进步, 1.现有项目的问题   1.1代码风格不统一     不同的 ...

  6. 一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目

    使用dubbo服务的过程,很简单,和之前学习的WebService完全一样,和本地接口调用也基本一致. dubbo和WebService的区别:我认为dubbo就是封装了WebService,然后提供 ...

  7. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  8. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  9. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...

随机推荐

  1. 20170620_javaweb_小结

    01.session失效的方式 02. session和cookie的区别 03.jsp九大内置对象,意义 以及对应的java类 04.转发和重定向 05.jsp的执行过程 和 生命周期 06.实现s ...

  2. Linux ALSA声卡驱动之七:ASoC架构中的Codec

    1.  Codec简介(ad/da) 在移动设备中,Codec的作用可以归结为4种,分别是: 对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号 对Mic.Linein或者其他输入源的模拟信 ...

  3. ubuntu16.04下配置静态ip

    ubuntu下配置静态ip 1.先获取ip基本信息 ifconfig enp3s0 Link encap:以太网 硬件地址 2c:4d:54:65:de:6e inet 地址:192.168.199. ...

  4. [Swift通天遁地]二、表格表单-(3)在表格中嵌套另一个表格并使Cell的高度自适应

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. SpringBoot集成Swagger2 以及汉化 快速教程

    (一) Swagger介绍 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件 (二)为什么使用Swagger 在现在的开发过程中还有很大一部分公司都是以口口相传的方式来进行 ...

  6. Django总结三

    回顾: - 装饰器 模板 - def wrapper(func): def inner(*args, **args): 执行被执行函数之前的操作 res = func(*args, **args) 执 ...

  7. IOS开发之Swift学习笔记

    1.因为存储属性要求初始化,我们可以使用lazy修饰符来延迟初始化.

  8. Mysql(三):多表查询和存储程序

    今天内容: ● 多表查询(内连接 外连接 子查询) ● 存储程序(存储过程 函数) 多表查询 ​ 同时从多张数据表中查取到需要的数据即是多表查询. 多表查询时,参与查询的表中每条数据进行组合,这种效果 ...

  9. JVM之旅------jvm内存模型

    JVM内存管理机制 Java与C++之间有一堆由内存动态分配与垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. —— <深入理解Java虚拟机:JVM高级特性与最佳实践> ...

  10. Linux文件系统inode、block解释权限(三)

    利用文件系统的inode和block来分析文件(目录)的权限问题. 为什么读取一个文件还要看该文件路径所有目录的权限? 为什么目录的w权限具有删除文件的能力,而文件w权限不行. inode:记录文件的 ...