1.Spring

无需多言,作为开源届数一数二的典例,项目开发中无处不在;

核心IOC容器,用来装载bean(java中的类)-用Spring的IOC容器来管理Bean的生命周期,有了这样一种机制,我们就可以不用在代码中去重复的做new操作。

aop,面向切面编程,spring中最主要的是用于事务方面的使用。

2.Spring MVC

作用于web层,相当于controller,与struts中的action一样,都是用来处理用户请求的。同时,相比于struts2来说,更加细粒度,它是基于方法层面的,而struts是基于类层面的。

ssm框架项目实例(项目开发框架-SSM)(1)

java

3.mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。[来自:www.mybatis.org/mybatis-3/z…]

  • Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。

  • Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。

  • MYBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

  • MYBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

    4.SSM框架整合

    本项目将以购物为背景,主要包括商品信息及库存【因为想顺便学习一下事务的处理】、订单信息。下面将从数据库创建、项目结构说明、配置文件、业务代码等方面进行一步步说明。

    4.1 数据库创建

    1.商品表

    CREATE TABLE `goods` ( `goods_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID', `goodsname` varchar(100) NOT NULL COMMENT '商品名称', `number` int(11) NOT NULL COMMENT '商品库存', PRIMARY KEY (`goods_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT='商品表'

    初始化表数据

    INSERT INTO `goods` (`goods_id`, `goodsname`, `number`) VALUES (1001, 'SN卫衣', 15)

    2.订单表

    CREATE TABLE `orderinfo` ( `order_id` varchar(20) NOT NULL COMMENT '订单编号', `goods_id` bigint(18) NOT NULL COMMENT '商品ID', `user_id` bigint(10) NOT NULL COMMENT '用户ID', `order_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '下单时间' , PRIMARY KEY (`order_id`), INDEX `idx_order_id` (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表'

    OK,至此表结构及初始化数据构建完成,下面说下基于Mavan的项目结构。

    项目结构说明

    因为项目是使用maven来管理jar包的,先来贴一下,pom.xml的配置

  • pom.xml

    为了避免学习小伙伴崇尚拿来主义【也就是去除了xmlns之类的东西】,这里只放项目依赖的jar包的dependencies;本案例将本着“需则用”的原则,避免在网上看到的各种乱七八糟的依赖都丢进来的情况,造成资源浪费和干扰阅读。

    <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <!-- 1.日志 slf4j--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.1</version> </dependency> <!-- 2.数据库连接驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> <scope>runtime</scope> </dependency> <!-- 2.数据库连接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- 3.MyBatis 以及 spring-mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.3</version> </dependency> <!-- 4.servlet 相关依赖 --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- 5.Spring --> <!-- 5.1 Spring核心 :core bean context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- 5.2 Spring jdbc依赖,事务依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- 5.3 Spring web依赖> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- 5.4 Spring test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- 6.redis客户端:Jedis【不使用的话可以直接去除】 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.8</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.8</version> </dependency> <!-- 7.工具类 --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> </dependencies>

    *项目结构图

  • ssm框架项目实例(项目开发框架-SSM)(2)

    java

    src/test/java:用于junit的测试类 src/main/java:

    Dao:数据库处理

    service:业务处理

    enums:项目枚举

    mapper:dao中方法对应mybatis映射文件,Sql就在这里面

    web:控制器,controller

    entity:项目中的实体类,如:商品类和订单类

    配置文件

    ssm框架项目实例(项目开发框架-SSM)(3)

    Java

    业务代码

    商品类

    /** * 商品信息类 * @author glmapper * */ public class Goods { private long goodsId;// 商品ID private String goodsName;// 商品名称 private int number;// 商品库存 public long getGoodsId() { return goodsId; } public void setGoodsId(long goodsId) { this.goodsId = goodsId; } public String getGoodsName() { return goodsName; } public void setGoodsName(String goodsName) { this.goodsName = goodsName; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } }

    订单类

    /** * 订单信息类 * @author glmapper * */ public class OrderInfo { private String orderId;//订单ID private long goodsId;//商品ID private long userId;//用户ID private Date orderTime;//下单时间 public String getOrderId() { return orderId; } public void setOrderId(String orderId) { this.orderId = orderId; } public long getGoodsId() { return goodsId; } public void setGoodsId(long goodsId) { this.goodsId = goodsId; } public long getUserId() { return userId; } public void setUserId(long userId) { this.userId = userId; } public Date getOrderTime() { return orderTime; } public void setOrderTime(Date orderTime) { this.orderTime = orderTime; } }

    public interface GoodsDao { /** * 通过ID查询单件商品信息 * * @param id * @return */ Goods queryById(long id); /** * 查询所有商品信息 * * @param offset 查询起始位置 * @param limit 查询条数 * @return */ List<Goods> queryAll(@Param("offset") int offset, @Param("limit") int limit); /** * 减少商品库存 * * @param bookId * @return 如果影响行数等于>1,表示更新的记录行数 */ int reduceNumber(long goodsId); }

    ssm框架项目实例(项目开发框架-SSM)(4)

    java

    ,