持久层,服务层,表现层都涉及到了。

这个分得确实比DJANGO细致,

多体会,多注解。。:)

The domain layer

  1. package com.packt.webstore.domain;
  2.  
  3. import java.math.BigDecimal;
  4.  
  5. public class Product {
  6.  
  7. private String productId;
  8. private String name;
  9. private BigDecimal unitPrice;
  10. private String description;
  11. private String manufacturer;
  12. private String category;
  13. private long unitsInStock;
  14. private long unitsInOrder;
  15. private boolean discontinued;
  16. private String condition;
  17.  
  18. public Product() {
  19. super();
  20. }
  21.  
  22. public Product(String productId, String name,
  23. BigDecimal unitPrice) {
  24. this.productId = productId;
  25. this.name = name;
  26. this.unitPrice = unitPrice;
  27. }
  28.  
  29. public String getProductId() {
  30. return productId;
  31. }
  32.  
  33. public void setProductId(String productId) {
  34. this.productId = productId;
  35. }
  36.  
  37. public String getName() {
  38. return name;
  39. }
  40.  
  41. public void setName(String name) {
  42. this.name = name;
  43. }
  44.  
  45. public BigDecimal getUnitPrice() {
  46. return unitPrice;
  47. }
  48.  
  49. public void setUnitPrice(BigDecimal unitPrice) {
  50. this.unitPrice = unitPrice;
  51. }
  52.  
  53. public String getDescription() {
  54. return description;
  55. }
  56.  
  57. public void setDescription(String description) {
  58. this.description = description;
  59. }
  60.  
  61. public String getManufacturer() {
  62. return manufacturer;
  63. }
  64.  
  65. public void setManufacturer(String manufacturer) {
  66. this.manufacturer = manufacturer;
  67. }
  68.  
  69. public String getCategory() {
  70. return category;
  71. }
  72.  
  73. public void setCategory(String category) {
  74. this.category = category;
  75. }
  76.  
  77. public long getUnitsInStock() {
  78. return unitsInStock;
  79. }
  80.  
  81. public void setUnitsInStock(long unitsInStock) {
  82. this.unitsInStock = unitsInStock;
  83. }
  84.  
  85. public long getUnitsInOrder() {
  86. return unitsInOrder;
  87. }
  88.  
  89. public void setUnitsInOrder(long unitsInOrder) {
  90. this.unitsInOrder = unitsInOrder;
  91. }
  92.  
  93. public boolean isDiscontinued() {
  94. return discontinued;
  95. }
  96.  
  97. public void setDiscontinued(boolean discontinued) {
  98. this.discontinued = discontinued;
  99. }
  100.  
  101. public String getCondition() {
  102. return condition;
  103. }
  104.  
  105. public void setCondition(String condition) {
  106. this.condition = condition;
  107. }
  108.  
  109. @Override
  110. public int hashCode() {
  111. final int prime = 31;
  112. int result = 1;
  113. result = prime * result + ((productId == null) ? 0 : productId.hashCode());
  114. return result;
  115. }
  116.  
  117. @Override
  118. public boolean equals(Object obj) {
  119. if (this == obj)
  120. return true;
  121. if (obj == null)
  122. return false;
  123. if (getClass() != obj.getClass())
  124. return false;
  125. Product other = (Product) obj;
  126. if (productId == null) {
  127. if (other.productId != null)
  128. return false;
  129. } else if (!productId.equals(other.productId))
  130. return false;
  131. return true;
  132. }
  133.  
  134. @Override
  135. public String toString() {
  136. return "Product [productId=" + productId + ", name=" + name + "]";
  137. }
  138.  
  139. }

The persistence layer

A persistence layer usually contains repository objects to
access domain objects. A repository object makes queries to the data source for the data,
thereafter maps the data from the data source to a domain object, and finally, persists the
changes in the domain object to the data source. So, a repository object is typically
responsible for CRUD operations ( Create , Read , Update , and Delete ) on domain objects.
The @Repository annotation ( org.springframework.stereotype.Repository ) is an
annotation that marks a specific class as a repository.

  1. package com.packt.webstore.domain.repository;
  2. import java.util.List;
  3. import com.packt.webstore.domain.Product;
  4.  
  5. public interface ProductRepository {
  6. List<Product> getAllProducts();
  7. Product getProductById(String productId);
  8. }
  1. package com.packt.webstore.domain.repository.impl;
  2.  
  3. import java.math.BigDecimal;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import org.springframework.stereotype.Repository;
  7. import com.packt.webstore.domain.Product;
  8. import com.packt.webstore.domain.repository.ProductRepository;
  9.  
  10. @Repository
  11. public class InMemoryProductRepository implements ProductRepository {
  12. private List<Product> listOfProducts = new ArrayList<Product>();
  13. public InMemoryProductRepository() {
  14. Product iphone = new Product("P1234","iPhone 5s", new BigDecimal(500));
  15. iphone.setDescription("Apple iPhone 5s smartphone with 4.00-inch 640x1136 display and 8-megapixel rear camera");
  16. iphone.setCategory("Smart Phone");
  17. iphone.setManufacturer("Apple");
  18. iphone.setUnitsInStock(1000);
  19.  
  20. Product laptop_dell = new Product("P1235","Dell Inspiron", new BigDecimal(700));
  21. laptop_dell.setDescription("Dell Inspiron 14-inch Laptop (Black) with 3rd Generation Intel Core processors");
  22. laptop_dell.setCategory("Laptop");
  23. laptop_dell.setManufacturer("Dell");
  24. laptop_dell.setUnitsInStock(1000);
  25.  
  26. Product tablet_Nexus = new Product("P1236","Nexus 7", new BigDecimal(300));
  27. tablet_Nexus.setDescription("Google Nexus 7 is the lightest 7 inch tablet With a quad-core Qualcomm Snapdragon™ S4 Pro processor");
  28. tablet_Nexus.setCategory("Tablet");
  29. tablet_Nexus.setManufacturer("Google");
  30. tablet_Nexus.setUnitsInStock(1000);
  31. listOfProducts.add(iphone);
  32. listOfProducts.add(laptop_dell);
  33. listOfProducts.add(tablet_Nexus);
  34. }
  35.  
  36. public List<Product> getAllProducts() {
  37. return listOfProducts;
  38. }
  39.  
  40. @Override
  41. public Product getProductById(String productId) {
  42. Product productById = null;
  43.  
  44. for(Product product : listOfProducts) {
  45. if(product!=null && product.getProductId()!=null &&
  46. product.getProductId().equals(productId)){
  47. productById = product;
  48. break;
  49. }
  50. }
  51. if(productById == null){
  52. throw new IllegalArgumentException("No products found with the product id: "+ productId);
  53. }
  54. return productById;
  55. }
  56.  
  57. }

The service layer:

  1. package com.packt.webstore.service;
  2.  
  3. public interface OrderService {
  4. void processOrder(String productId, int count);
  5.  
  6. }
  1. package com.packt.webstore.service.impl;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import com.packt.webstore.domain.Product;
  6. import com.packt.webstore.domain.repository.ProductRepository;
  7. import com.packt.webstore.service.OrderService;
  8.  
  9. @Service
  10. public class OrderServiceImpl implements OrderService {
  11. @Autowired
  12. private ProductRepository productRepository;
  13.  
  14. @Override
  15. public void processOrder(String productId, int quantity) {
  16. Product productById = productRepository.getProductById(productId);
  17. if(productById.getUnitsInStock() < quantity){
  18. throw new IllegalArgumentException("Out of Stock. Available Units in stock"+ productById.getUnitsInStock());
  19. }
  20. productById.setUnitsInStock(productById.getUnitsInStock() - quantity);
  21. }
  22.  
  23. }

Controller Layer:

  1. package com.packt.webstore.controller;
  2.  
  3. import java.math.BigDecimal;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.ui.Model;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import com.packt.webstore.domain.repository.ProductRepository;
  10.  
  11. @Controller
  12. public class ProductController {
  13.  
  14. @Autowired
  15. private ProductRepository productRepository;
  16.  
  17. @RequestMapping("/products")
  18. public String list(Model model) {
  19. model.addAttribute("products", productRepository.getAllProducts());
  20. return "products";
  21. }
  22.  
  23. }
  1. package com.packt.webstore.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.ui.Model;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import com.packt.webstore.service.OrderService;
  7.  
  8. @Controller
  9. public class OrderController {
  10. @Autowired
  11. private OrderService orderService;
  12.  
  13. @RequestMapping("/order/P1234/20")
  14. public String process() {
  15. orderService.processOrder("P1234", 20);
  16. return "redirect:/products";
  17. }
  18. }

view jsp:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8. <link rel="stylesheet"
  9. href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
  10. <title>Product</title>
  11. </head>
  12. <body>
  13. <section>
  14. <div class="jumbotron">
  15. <div class="container">
  16. <h1>Products</h1>
  17. <p>All the available products in our store</p>
  18. </div>
  19. </div>
  20. </section>
  21. <section class="container">
  22. <div class="row">
  23. <c:forEach items="${products}" var="product">
  24. <div class="col-sm-6 col-md-3" style="padding-bottom: 15px">
  25. <div class="thumbnail">
  26. <div class="caption">
  27. <h3>${product.name}</h3>
  28. <p>${product.description}</p>
  29. <p>$${product.unitPrice}</p>
  30. <p>Available ${product.unitsInStock} units in stock</p>
  31. </div>
  32. </div>
  33. </div>
  34. </c:forEach>
  35. </div>
  36. </section>
  37. </body>
  38. </html>

一个最简单的SPRINGMVC示例的更多相关文章

  1. Skinned Mesh原理解析和一个最简单的实现示例

    Skinned Mesh 原理解析和一个最简单的实现示例   作者:n5 Email: happyfirecn##yahoo.com.cn Blog: http://blog.csdn.net/n5 ...

  2. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  3. springMVC初探--环境搭建和第一个HelloWorld简单项目

    注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...

  4. [MySQL5.6] 一个简单的optimizer_trace示例

    [MySQL5.6] 一个简单的optimizer_trace示例   前面已经介绍了如何使用和配置MySQL5.6中optimizer_trace(点击博客),本篇我们以一个相对简单的例子来跟踪op ...

  5. 创建一个可用的简单的SpringMVC项目,图文并茂

    转载麻烦注明下来源:http://www.cnblogs.com/silentdoer/articles/7134332.html,谢谢. 最近在自学SpringMVC,百度了很多资料都是比较老的,而 ...

  6. 一个简单的springmvc例子 入门(1)

    一直是从事棋牌游戏,平常用的东西 大多数只是使用一些javase的一些 api对spring 这方面 用到的比较少,每次学了都忘,始终记不住.为了 更轻松学习springboot,从新学习了sprin ...

  7. 一个简单的CSS示例

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 & ...

  8. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  9. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

随机推荐

  1. [Apple开发者帐户帮助]九、参考(1)证书类型

    该证书类型有助于开发者帐户和Xcode的标识证书. 类型 目的 APNs Auth Key 生成服务器端令牌,以替代通知请求的证书. Apple推送服务 在通知服务和APN之间建立连接,以向您的应用提 ...

  2. Django day26 初识认证组件

    一:什么是认证组件 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 二:认证组件源码分析

  3. 【转】vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

  4. ACM_梦中的函数

    梦中的函数 Time Limit: 2000/1000ms (Java/Others) Problem Description: 寒假那段时间,每天刷题的小G连做梦都是代码,于是有了这道题. 给定一个 ...

  5. ssh项目导入报the import javax.servlet cannot be resolved

    在做javaWeb项目时,我们经常会出现丢失包的情况,如下图所示的错误,我们应该怎么解决呢? 根据网上教程向工程中加入tomcat的servlet-api.jar和jsp-api.jar的包 此时项目 ...

  6. 转 方法区(method) )、栈区(stack)和堆区(heap)之JVM 内存初学

    JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指 ...

  7. Laravel5.1学习笔记12 系统架构4 服务容器

    Service Container 介绍 绑定的用法  绑定实例到接口 上下文绑定 标签 解析 容器事件 #介绍 The Laravel service container is a powerful ...

  8. 如何扒取一个网站的HTML和CSS源码

    一个好的前端开发,当看到一个很炫的页面的时候会本着学习的心态,想知道网站的源码.以下内容只是为了大家更好的学习,拒绝抄袭,支持正版. 1 首先我们要有一个chrome浏览器 2 在本地创建相关文件夹 ...

  9. Less文件的建立

    1.打开DreamWeaver 2.选择 新建 Less       文件名为.less,保存于Less文件夹中 3.声明文档头:@charset "utf-8"; 4.将Less ...

  10. Android ScrollView里嵌套RecyclerView时,在RecyclerView上滑动时出现卡顿(冲突)的现象

    最近在项目中遇到一个现象,一个界面有一个RecyclerView(GridView型的),外面套了一层ScrollView,通过ScrollView上下滚动,但是在滑动的时候如果是在RecyclerV ...