一个电商项目的Web服务化改造4:方案和架构,通用接口的定义和实现
上一篇,我们明确了我们的“规范和约定”。
从本篇开始,写具体的方案和架构。
本篇,重点阐述通用接口定义。
既然做了分表,那么针对单表的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:方案和架构,通用接口的定义和实现的更多相关文章
- 一个电商项目的Web服务化改造
一个电商项目的Web服务化改造 项目,早期是随便瞎做的,没啥架构,连基本的设计也没. 有需求,实现需求,再反复修改. 大致就是这么做的. 最近,项目要重新架构,和某boss协商的结果是,采用阿里开源的 ...
- 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过. 可以在这里看到相关的 ...
- 一个电商项目的Web服务化改造3:改进方案の规范和约定、单表、单一职责
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们描述了原有项目中的问题. 或者说是,本篇的基本 ...
- 一个电商项目的Web服务化改造5:面向服务的分层架构设计(有图有真相)
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 本篇,以我亲自画的3个图,阐述一下架构设计. 一.分层架构-总体图 ...
- 一个电商项目的Web服务化改造2:现有项目的5个问题
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步, 1.现有项目的问题 1.1代码风格不统一 不同的 ...
- 一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目
使用dubbo服务的过程,很简单,和之前学习的WebService完全一样,和本地接口调用也基本一致. dubbo和WebService的区别:我认为dubbo就是封装了WebService,然后提供 ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
随机推荐
- leetcode笔记:Jump Game
一. 题目描写叙述 Given an array of non-negative integers, you are initially positioned at the first index o ...
- linux 网络编程-基础篇01
#Socket简介 是一个编程接口是一种特殊的文件描述符(everything in Unix is a file)并不仅限于TCPIP协议面向连接(Transmission Control Prot ...
- Bing Maps进阶系列七:Bing Maps功能导航菜单华丽的变身
Bing Maps进阶系列七:Bing Maps功能导航菜单华丽的变身 Bing Maps Silverlight Control所提供的功能导航是非常强大的,在设计上对扩展的支持非常好,提供了许多用 ...
- Silverlight,Windows 8应用开发实例教程系列汇总
Kevin Fan分享开发经验,记录开发点滴 Silverlight,Windows 8应用开发实例教程系列汇总 2012-06-18 01:05 by jv9, 2145 阅读, 3 评论, 收藏, ...
- 【Codevs3567】宫廷守卫
Position: http://codevs.cn/problem/3567/ Description 从前有一个王国,这个王国的城堡是一个矩形,被分为M×N个方格.一些方格是墙,而另一些是空地.这 ...
- 【POJ 2503】 Babelfish
[题目链接] http://poj.org/problem?id=2503 [算法] 字符串哈希 [代码] #include <algorithm> #include <bitset ...
- setings.py配置文件详解
BASE_DIR指的是项目的根目录.SECRET_KEY是安全码. # SECURITY WARNING: don't run with debug turned on in production! ...
- E20170626-hm
authenticate vt. 认证,证明是真实的.可靠的或有效的; 鉴定,使生效; author n. 作者; 著作家; 创造者; 发起人;
- 【Kafka】《Kafka权威指南》——从Kafka读取数据
应用程序使用 KafkaConsumer向 Kafka 订阅主题,并从订阅的主题上接收消息 . 从 Kafka 读取数据不同于从其他悄息系统读取数据,它涉及一些独特的概念和想法.如果不先理解 这些概念 ...
- 题解报告:hdu 3790 最短路径问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起 ...