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. Python面向对象(self参数、封装)

    day24 面向对象三大特性:封装 self参数 class Bar: def foo(self, arg): print(self, arg) x = Bar() print(x) x.foo(11 ...

  2. saltstack 动态pillar实现

    简介 pillar支持的数据存储方式有很多,mysql, mogo,json等.本篇介绍关于http存储方式. 首先简要说明整个流程:salt-master会去一个指定http发送get请求获取一个j ...

  3. 队列的理解和实现(一) ----- 循环队列(java实现)

    什么是队列 我们都知道栈是先进后出的一种线性表,与之相反的是,队列是一种先进先出的线性表.它只允许在表的一端进行插入,而在另一端进行删除.举个例子来说,在生活中我们买东西需要进行排队,最先排队的可以最 ...

  4. laravel框架图片上传

    1.建控制器方法 2.建立路由 绑定控制器方法 3.进行图片上传的配置 修改图片上传的路径 a) config/filesystems.php 修改disks->local->root(图 ...

  5. postman小结

    1.get和post请求,get有限制2k,post没有限制post安全 在选择的时候别把get post选错然后,run 2.data 选成txt文件  utf-8 ip ip,result12.1 ...

  6. MarkDown添加图片的三种方式

    插图最基础的格式就是: ![Alt text](图片链接 "optional title") Alt text:图片的Alt标签,用来描述图片的关键词,可以不写.最初的本意是当图片 ...

  7. [性能测试]:ISO8583报文解析实例

    现在我们有ISO8583报文如下(十六进制表示法): 60 00 03 00 00 60 31 00 31 07 30 02 00 30 20 04 C0 20 C0 98 11 00 00 00 0 ...

  8. [转] Scala Async 库 (Scala future, await, async)

    [From] https://colobu.com/2016/02/15/Scala-Async/ 在我以前的文章中,我介绍了Scala Future and Promise.Future代表一个异步 ...

  9. pycharm使用github

    pycharm使用github 绑定账号 File-settings 在搜索框输入git 会出现github,然后在旁边输入你github的用户名和密码,可以点击”test”测试一下,如果出现: Co ...

  10. Windows和Ubuntu双系统时间相差8个小时的问题

    由于要学编程,在windows 10上安装了Ubuntu16.04双系统.但是却造成windows时间老是比实际时间慢八个小时,Ubuntu会与网络同步时间,但是在程序中调用主板时间时仍然是UTC时间 ...