读书人

【第十一章】 SSH集成开发积分商城 之

发布时间: 2012-07-15 20:11:35 作者: rapoo

【第十一章】 SSH集成开发积分商城 之 11.3 实现积分商城层 ——跟我学spring3

11.3? 实现积分商城层11.3.1? 概述

?????? 积分商城是基于通用层之上进行开发,这样我们能减少很多重复的劳动,加快项目开发进度。

11.3.2 实现数据模型层

1、商品表,定义了如商品名称、简介、原需积分、现需积分等,其中是否发布表示只有发布(true)了的商品才会在前台删除,是否已删除表示不会物理删除,商品不应该物理删除,而是逻辑删除,版本属性用于防止并发更新。

?

java代码:
package cn.javass.point.model;/** 商品表 */@Entity@Table(name = "tb_goods")public class GoodsModel implements java.io.Serializable {     /** 主键 */    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)    @Column(name = "id", length = 10)    private int id;    /** 商品名称 */    @Column(name = "name", nullable = false, length = 100)    private String name;    /** 商品简介 */    @Column(name = "description", nullable = false, length = 100)    private String description;    /** 原需积分 */    @Column(name = "original_point", nullable = false, length = 10)    private int originalPoint;    /** 现需积分 */    @Column(name = "now_point", nullable = false, length = 10)    private int nowPoint;    /** 是否发布,只有发布的在前台显示 */    @Column(name = "published", nullable = false)    private boolean published;    /** 是否删除,商品不会被物理删除的 */    @Column(name = "is_delete", nullable = false)    private boolean deleted;    /** 版本 */    @Version  @Column(name = "version", nullable = false, length = 10)    private int version;    //省略getter和setter、hashCode及equals,实现请参考源代码}

?

?

2、商品兑换码表,定义了兑换码、兑换码所属商品(兑换码和商品直接是多对一关系)、购买人、购买时间、是否已经购买(防止一个兑换码多个用户兑换)、版本。

?

?

java代码:
package cn.javass.point.model;import java.util.Date;//省略部分import/** 商品兑换码表 */@Entity@Table(name = "tb_goods_code")public class GoodsCodeModel implements java.io.Serializable {     /** 主键 */    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)    @Column(name = "id", length = 10)    private int id;    /** 所属商品 */    @ManyToOne    private GoodsModel goods;    /** 兑换码*/    @Column(name = "code", nullable = false, length = 100)    private String code;    /** 兑换人,实际环境中应该和用户表进行对应*/    @Column(name = "username", nullable = true, length = 100)    private String username;      /** 兑换时间*/    @Column(name = "exchange_time")    private Date exchangeTime;    /** 是否已经兑换*/    @Column(name = "exchanged")    private boolean exchanged = false;    /** 版本 */    @Version    @Column(name = "version", nullable = false, length = 10)    private int version;    //省略getter和setter、hashCode及equals,实现请参考源代码}

?

?

?

3、

图11-10商品表及商品兑换码表之间关系

4、?创建数据库及表结构的SQL语句文件(sql/ pointShop_schema.sql):

?

java代码:
CREATE DATABASE IF NOT EXISTS `point_shop` DEFAULT CHARACTER SET 'utf8';USE `point_shop`;DROP TABLE IF EXISTS `tb_goods_code`;DROP TABLE IF EXISTS `tb_goods`;-- ------------------------------ Table structure for 商品表-- ----------------------------CREATE TABLE `tb_goods` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品id',  `name` varchar(100) NOT NULL COMMENT '商品名称',  `description` varchar(100) NOT NULL COMMENT '商品简介',  `original_point` int(10) unsigned NOT NULL  COMMENT '原需积分',  `now_point` int(10) unsigned NOT NULL  COMMENT '现需积分',  `published` bool NOT NULL  COMMENT '是否发布',  `is_delete` bool NOT NULL DEFAULT false COMMENT '是否删除',  `version` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '版本',   PRIMARY KEY (`id`),   INDEX(`name`),   INDEX(`published`)  )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';-- ------------------------------ Table structure for 商品兑换码表-- ----------------------------CREATE TABLE `tb_goods_code` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',  `username` varchar(100) COMMENT '兑换用户',  `goods_id` int(10) unsigned NOT NULL COMMENT '所属商品id',  `code` varchar(100)  NOT NULL COMMENT '积分',  `exchange_time` datetime  COMMENT '购买时间',  `exchanged` bool DEFAULT false COMMENT '是否已经兑换',  `version` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '版本',   PRIMARY KEY (`id`),   FOREIGN KEY (`goods_id`) REFERENCES `tb_goods` (`id`)  ON DELETE CASCADE  )ENGINE=InnoDB AUTO_INCREMENT=1000000 DEFAULT CHARSET=utf8 COMMENT='商品兑换码表'; 

??? ? ? ? ? ? Mysql数据库引擎应该使用InnoDB,如果使用MyISM将不支持事务。

??11.3.3 ?实现数据访问层

数据访问层只涉及与底层数据库或文件系统等打交道,不会涉及业务逻辑,一定注意层次边界,不要在数据访问层实现业务逻辑。

?

商品模块的应该实现如下功能:

读书人网 >软件架构设计

热点推荐