1.什么是三层架构:

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

2.三层架构的优点:

1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
6、结构更加的明确
7、在后期维护的时候,极大地降低了维护成本和维护时间
 
3.三层架构案例分析:

 web层

1>接收数据:本案例不需要接收数据

2>用List接受查询结果(常用于收集查询结果集) 

定义一个List集合productList泛型为product用于接收service.findAllProduct();的返回值。

3>传递数据

List<product> productList =service.findAllProduct();

service层

1>传递数据

return dao.findAllCategory();  

dao层

1>链接数据库QueryRunner()的有参链接

QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from product";

List接受查询到的数据
        List<product> productList = runner.query(sql, new BeanListHandler<product>(product.class));

数据的回写
        return productList;

 web层

将查询到被回写的数据放入request域中并转发到jsp中进行显示

request.setAttribute("productList", productList);
        request.getRequestDispatcher("/admin/product/list.jsp").forward(request, response);

 3.关于数据的封装和回写

1>List<String>,List<User>    Map<String, String>     Map<String, User>的赋值和遍历

//1)遍历strList<String>
List<String> strList = new ArrayList<String>();
strList.add("一");
strList.add("二");
strList.add("三");
strList.add("四");
request.setAttribute("strList", strList);

 

//2)遍历List<User>的值
List<User> userList = new ArrayList<User>();
User user1 = new User();
user1.setId(1);
user1.setName("lisi");
user1.setPassword("1234");
userList.add(user1); User user2 = new User();
user2.setId(2);
user2.setName("wangwu");
user2.setPassword("123456");
userList.add(user2);
request.setAttribute("userList", userList);
//3)遍历Map<String,String>的值
Map<String, String> strMap = new HashMap<String, String>();
strMap.put("key1", "一");
strMap.put("key2", "二");
strMap.put("key3", "三");
strMap.put("key4", "四");
request.setAttribute("strMap", strMap);
//4)遍历Map<String,User>的值
Map<String, User> userMap = new HashMap<String, User>();
userMap.put("key1", user1);
userMap.put("key2",user2);
request.setAttribute("userMap", userMap);

遍历(jstl)

<h1>取出strList数据</h1>
<c:forEach items="${strList}" var="str">
${str}<br> </c:forEach>
<h1>取出userList数据</h1>
<c:forEach items="${userList}" var="user">
${user.id}<br>
${user.name}<br>
${user.password}<br>
</c:forEach> <h1>取出strMap数据</h1>
<c:forEach items="${strMap}" var="strMap">
${strMap.key}=${strMap.value}<br>
</c:forEach> <h1>取出userMap数据</h1>
<c:forEach items="${userMap}" var="userMap">
${userMap.key }=${userMap.value.name}=${userMap.value.password}<br> </c:forEach>

 2>Map<String,String>封装数据

Map<String, String[]> properties = request.getParameterMap();

product product = new product();
        try {

//将properties中的数据封装到product对象中
            BeanUtils.populate(product, properties);
        } catch (IllegalAccessException | InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

3>手动的封装product中自己想要的数据

product.setPimage("products/1/c_0033.jpg");

domain:product

package com.hdh.domain;

public class product {
// `pid` varchar(32) NOT NULL,
// `pname` varchar(50) DEFAULT NULL,
// `market_price` double DEFAULT NULL,
// `shop_price` double DEFAULT NULL,
// `pimage` varchar(200) DEFAULT NULL,
// `pdate` date DEFAULT NULL,
// `is_hot` int(11) DEFAULT NULL,
// `pdesc` varchar(255) DEFAULT NULL,
// `pflag` int(11) DEFAULT NULL,
// `cid` varchar(32) DEFAULT NULL, private String pid;
private String pname;
private double market_price;
private double shop_price;
private String pimage;
private String pdate;
private int is_hot;
private String pdesc;
private int pflag;
private String cid; public String getPid() {
return pid;
} public void setPid(String pid) {
this.pid = pid;
} public String getPname() {
return pname;
} public void setPname(String pname) {
this.pname = pname;
} public double getMarket_price() {
return market_price;
} public void setMarket_price(double market_price) {
this.market_price = market_price;
} public double getShop_price() {
return shop_price;
} public void setShop_price(double shop_price) {
this.shop_price = shop_price;
} public String getPimage() {
return pimage;
} public void setPimage(String pimage) {
this.pimage = pimage;
} public String getPdate() {
return pdate;
} public void setPdate(String pdate) {
this.pdate = pdate;
} public int getIs_hot() {
return is_hot;
} public void setIs_hot(int is_hot) {
this.is_hot = is_hot;
} public String getPdesc() {
return pdesc;
} public void setPdesc(String pdesc) {
this.pdesc = pdesc;
} public int getPflag() {
return pflag;
} public void setPflag(int pflag) {
this.pflag = pflag;
} public String getCid() {
return cid;
} public void setCid(String cid) {
this.cid = cid;
} }

关于对javaUtils封装和三层架构的笔记的更多相关文章

  1. MVC——三层架构笔记、1

    三层架构MVC笔记1. DAL——数据访问层:(专门与数据库交互,增删查改的方法都在这:需引用MODEL层) BLL——业务逻辑层:(页面与数据库之间的桥梁:需引用DAL.MODEL层) MODEL— ...

  2. java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)

    1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...

  3. 架构和模式的区别:三层架构和MVC在应用开发中的位置

    架构是系统层面的,可以是多层架构,也可以是事件驱动架构,也可以是微服务架构. 模式是GUI应用的一种职责分离设计. 三层架构(包含多层架构)和 MVC模式(包含MVP, MVVM) 没什么关系,它们不 ...

  4. 从零开始编写自己的C#框架(5)——三层架构介绍

    三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...

  5. 浅析MVC模式与三层架构的区别01

    三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...

  6. Java Web 三层架构详解

    java 三层架构ssh 一个spring2.5+hibernate3.2+struts2.0组合框架,使用spring的 IoC来管理应用的 所有bean,包括struts2的 action,充分发 ...

  7. Asp.Net MVC<一> : 三层架构、MVC

    MVC.MVP.MVVM.Angular.js.Knockout.js.Backbone.js.React.js.Ember.js.Avalon.js.Vue.js 概念摘录 认清Android框架 ...

  8. WEB三层架构与MVC

    web三层架构是指: >用户接口层(UI Layer) >业务逻辑层(Bussiness Layer) >持久化层 关于业务逻辑和用户接口 在早期的web开发中,因为业务比较简单,并 ...

  9. MVC模式与三层架构的区别

    之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...

随机推荐

  1. 【ocp-12c】最新Oracle OCP-071考试题库(42题)

    42.(9-1)choose the best answer: Which statement is true about the Oracle SQL, DELETE and TRUNCATE st ...

  2. Mybatis 动态Sql语句《常用》

    MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...

  3. Android中线程和线程池

    我们知道线程是CPU调度的最小单位.在Android中主线程是不能够做耗时操作的,子线程是不能够更新UI的.在Android中,除了Thread外,扮演线程的角色有很多,如AsyncTask,Inte ...

  4. 安装php7

    ./configure  --prefix=/usr/local/php7.1.5 --with-curl --with-iconv-dir  --with-mysqli --with-openssl ...

  5. XorPay 个人支付平台增加 个人支付宝支付接口

      XorPay 今天新增 个人支付宝当面付 接口,欢迎大家使用. 「 XorPay 支付平台」 已经同时支持 个人微信支付接口 和 个人支付宝接口. 个人可用的 支付宝/微信支付 接口,支持 当面付 ...

  6. hibernate与Oracle

    今天在用hibernate连接Oracle数据库进行查询时,出现一点小状况 数据库中是有数据的,而且程序本身也没有问题,可就是查不出数据,在经过几个小时的查找下,中遇找到了问题所在,那就是我Oracl ...

  7. 2016级算法期末上机-G.中等·Bamboo's Fight with DDLs II

    中等·Bamboo's Fight with DDLs II 分析 一句话:给定字符串,求最长回文子序列长度,动态规划LCS思想的进阶应用 具体思路如下: 对于任意字符串,如果头尾字符相同,那么字符串 ...

  8. js01--简介、注释、数组、对象、null与undefined

    javascript简介:js,轻量级的脚本语言,插入HTML页面中,用来实现网页的动态交换. 1.js的使用: 写入HTML输出:document.write("<p>This ...

  9. java并行之parallelStream与CompletableFuture比较

    1. import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; im ...

  10. (转)我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...