一个最简单的SPRINGMVC示例
持久层,服务层,表现层都涉及到了。
这个分得确实比DJANGO细致,
多体会,多注解。。:)
The domain layer
package com.packt.webstore.domain; import java.math.BigDecimal; public class Product { private String productId; private String name; private BigDecimal unitPrice; private String description; private String manufacturer; private String category; private long unitsInStock; private long unitsInOrder; private boolean discontinued; private String condition; public Product() { super(); } public Product(String productId, String name, BigDecimal unitPrice) { this.productId = productId; this.name = name; this.unitPrice = unitPrice; } public String getProductId() { return productId; } public void setProductId(String productId) { this.productId = productId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public BigDecimal getUnitPrice() { return unitPrice; } public void setUnitPrice(BigDecimal unitPrice) { this.unitPrice = unitPrice; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getManufacturer() { return manufacturer; } public void setManufacturer(String manufacturer) { this.manufacturer = manufacturer; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public long getUnitsInStock() { return unitsInStock; } public void setUnitsInStock(long unitsInStock) { this.unitsInStock = unitsInStock; } public long getUnitsInOrder() { return unitsInOrder; } public void setUnitsInOrder(long unitsInOrder) { this.unitsInOrder = unitsInOrder; } public boolean isDiscontinued() { return discontinued; } public void setDiscontinued(boolean discontinued) { this.discontinued = discontinued; } public String getCondition() { return condition; } public void setCondition(String condition) { this.condition = condition; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((productId == null) ? 0 : productId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Product other = (Product) obj; if (productId == null) { if (other.productId != null) return false; } else if (!productId.equals(other.productId)) return false; return true; } @Override public String toString() { return "Product [productId=" + productId + ", name=" + name + "]"; } }
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.
package com.packt.webstore.domain.repository; import java.util.List; import com.packt.webstore.domain.Product; public interface ProductRepository { List<Product> getAllProducts(); Product getProductById(String productId); }
package com.packt.webstore.domain.repository.impl; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Repository; import com.packt.webstore.domain.Product; import com.packt.webstore.domain.repository.ProductRepository; @Repository public class InMemoryProductRepository implements ProductRepository { private List<Product> listOfProducts = new ArrayList<Product>(); public InMemoryProductRepository() { Product iphone = new Product("P1234","iPhone 5s", new BigDecimal(500)); iphone.setDescription("Apple iPhone 5s smartphone with 4.00-inch 640x1136 display and 8-megapixel rear camera"); iphone.setCategory("Smart Phone"); iphone.setManufacturer("Apple"); iphone.setUnitsInStock(1000); Product laptop_dell = new Product("P1235","Dell Inspiron", new BigDecimal(700)); laptop_dell.setDescription("Dell Inspiron 14-inch Laptop (Black) with 3rd Generation Intel Core processors"); laptop_dell.setCategory("Laptop"); laptop_dell.setManufacturer("Dell"); laptop_dell.setUnitsInStock(1000); Product tablet_Nexus = new Product("P1236","Nexus 7", new BigDecimal(300)); tablet_Nexus.setDescription("Google Nexus 7 is the lightest 7 inch tablet With a quad-core Qualcomm Snapdragon™ S4 Pro processor"); tablet_Nexus.setCategory("Tablet"); tablet_Nexus.setManufacturer("Google"); tablet_Nexus.setUnitsInStock(1000); listOfProducts.add(iphone); listOfProducts.add(laptop_dell); listOfProducts.add(tablet_Nexus); } public List<Product> getAllProducts() { return listOfProducts; } @Override public Product getProductById(String productId) { Product productById = null; for(Product product : listOfProducts) { if(product!=null && product.getProductId()!=null && product.getProductId().equals(productId)){ productById = product; break; } } if(productById == null){ throw new IllegalArgumentException("No products found with the product id: "+ productId); } return productById; } }
The service layer:
package com.packt.webstore.service; public interface OrderService { void processOrder(String productId, int count); }
package com.packt.webstore.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.packt.webstore.domain.Product; import com.packt.webstore.domain.repository.ProductRepository; import com.packt.webstore.service.OrderService; @Service public class OrderServiceImpl implements OrderService { @Autowired private ProductRepository productRepository; @Override public void processOrder(String productId, int quantity) { Product productById = productRepository.getProductById(productId); if(productById.getUnitsInStock() < quantity){ throw new IllegalArgumentException("Out of Stock. Available Units in stock"+ productById.getUnitsInStock()); } productById.setUnitsInStock(productById.getUnitsInStock() - quantity); } }
Controller Layer:
package com.packt.webstore.controller; import java.math.BigDecimal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.packt.webstore.domain.repository.ProductRepository; @Controller public class ProductController { @Autowired private ProductRepository productRepository; @RequestMapping("/products") public String list(Model model) { model.addAttribute("products", productRepository.getAllProducts()); return "products"; } }
package com.packt.webstore.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.packt.webstore.service.OrderService; @Controller public class OrderController { @Autowired private OrderService orderService; @RequestMapping("/order/P1234/20") public String process() { orderService.processOrder("P1234", 20); return "redirect:/products"; } }
view jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"> <title>Product</title> </head> <body> <section> <div class="jumbotron"> <div class="container"> <h1>Products</h1> <p>All the available products in our store</p> </div> </div> </section> <section class="container"> <div class="row"> <c:forEach items="${products}" var="product"> <div class="col-sm-6 col-md-3" style="padding-bottom: 15px"> <div class="thumbnail"> <div class="caption"> <h3>${product.name}</h3> <p>${product.description}</p> <p>$${product.unitPrice}</p> <p>Available ${product.unitsInStock} units in stock</p> </div> </div> </div> </c:forEach> </div> </section> </body> </html>
一个最简单的SPRINGMVC示例的更多相关文章
- Skinned Mesh原理解析和一个最简单的实现示例
Skinned Mesh 原理解析和一个最简单的实现示例 作者:n5 Email: happyfirecn##yahoo.com.cn Blog: http://blog.csdn.net/n5 ...
- springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目
一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...
- springMVC初探--环境搭建和第一个HelloWorld简单项目
注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...
- [MySQL5.6] 一个简单的optimizer_trace示例
[MySQL5.6] 一个简单的optimizer_trace示例 前面已经介绍了如何使用和配置MySQL5.6中optimizer_trace(点击博客),本篇我们以一个相对简单的例子来跟踪op ...
- 创建一个可用的简单的SpringMVC项目,图文并茂
转载麻烦注明下来源:http://www.cnblogs.com/silentdoer/articles/7134332.html,谢谢. 最近在自学SpringMVC,百度了很多资料都是比较老的,而 ...
- 一个简单的springmvc例子 入门(1)
一直是从事棋牌游戏,平常用的东西 大多数只是使用一些javase的一些 api对spring 这方面 用到的比较少,每次学了都忘,始终记不住.为了 更轻松学习springboot,从新学习了sprin ...
- 一个简单的CSS示例
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 & ...
- (转)Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
随机推荐
- leetcode快排相关
leetcode:75颜色分类(3way).215数组中的第K个最大元素(normal) 3way private static void quick3waySort(int[] arr, int l ...
- PCB 录屏工具Screen2Exe GifCam ScreenToGif
我们完成的软件作品后,需要向客户或领导演示软件功能介绍,这里力推3款录屏工具 一.Screen2Exe工具,录制exe视频文件 下载地址 http://pcbren.cn/ShareFiles/Sc ...
- ural 1017. Staircases(dp)
http://acm.timus.ru/problem.aspx?space=1&num=1017 题意:有n块砖,要求按照严格递增的个数摆放成楼梯,求楼梯的摆放种类数. 思路:状态转移方程: ...
- [Swift通天遁地]九、拔剑吧-(3)创建多种自定义Segment分段样式的控件
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- centos7离线安装rabbitmq
准备工作 一台centos7的机器 erlang-21.3.8.2 RabbitMQ 3.7.15 socat-1.7.3.2-2.el7.x86_64.rpm 开始安装 登录centos ,把上面的 ...
- QT 制作串口调试小助手----(小白篇)
一.成品图展示 简介:因zigbee实验,制作一个相对简易版的上位机,接收来自zigbee无线传感采集的温湿度.光照等数据. 并且将数据部分描绘成实时动态折线统计图. 二.主要功能介绍 主要使用QT自 ...
- centos源更新
.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup .下载新的CentOS-Base.r ...
- HDU 3007 最小圆覆盖 计算几何
思路: 随机增量法 (好吧这数据范围并不用) //By SiriusRen #include <cmath> #include <cstdio> #include <al ...
- lua_string_pattern
两大特点: 1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,... 2. string库中所有的function都不会直接操作字符串,而是返回一个新的字符串. 库函 ...
- cplusplus系列>utility>pair
http://www.cplusplus.com/reference/utility/pair/ 用于存储一对异构对象 // Compile: g++ -std=c++11 pair.cpp #inc ...