项目开发入门框架与模式.ppt

上传人:牧羊曲112 文档编号:6034845 上传时间:2023-09-16 格式:PPT 页数:92 大小:4.74MB
返回 下载 相关 举报
项目开发入门框架与模式.ppt_第1页
第1页 / 共92页
项目开发入门框架与模式.ppt_第2页
第2页 / 共92页
项目开发入门框架与模式.ppt_第3页
第3页 / 共92页
项目开发入门框架与模式.ppt_第4页
第4页 / 共92页
项目开发入门框架与模式.ppt_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《项目开发入门框架与模式.ppt》由会员分享,可在线阅读,更多相关《项目开发入门框架与模式.ppt(92页珍藏版)》请在三一办公上搜索。

1、Struts 2让网页与控制分离,Hibernate把数据持久化,MVC框架开发模式,2.1.1 Struts 2框架1Model2模式Model2模式的工作原理如图2.1所示,其工作流程是按如下5个步骤进行的:Servlet接收浏览器发出的请求。Servlet根据不同的请求调用相应的JavaBean。JavaBean按自己的业务逻辑操作数据库。Servlet将结果传递给JSP视图。JSP将后台处理的结果呈现给浏览器。,2Servlet Filter技术图2.2中显示了正常请求、加过滤器请求和加过滤器链请求的处理过程。过滤器可以对Request对象和Response对象进行处理。,(1)ini

2、t(FilterConfig)。这是过滤器的初始化方法,Servlet容器创建过滤器实例后将调用这个方法。在这个方法中可以通过FilterConfig参数读取web.xml文件中过滤器的初始化参数。(2)doFilter(ServletRequest,ServletResponse,FilterChain)。这个方法完成实际的过滤操作,当用户请求与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法,在返回响应之前也会调用此方法。FilterChain参数用于访问过滤器链上的下一个过滤器。,(3)destroy()。Servlet容器在销毁过滤器实例前调用该方法,这个方

3、法可以释放过滤器占用的资源。过滤器编写完成后,要在web.xml进行配置,格式如下:过滤器名称 过滤器对应的类 参数名称 参数值,下面举例说明在web.xml中配置过滤器与URL关联的方法。(1)与一个URL资源关联:过滤器名 xxx.jsp(2)与一个URL目录下的所有资源关联:过滤器名/*(3)与一个Servlet关联:过滤器名 Servlet名称,3Struts 2工作机制Struts 2的设计思想:用Servlet Filter技术将Servlet API隐藏于框架之内,一个请求在Struts 2框架内被处理,大致分为以下几个步骤,如图2.3所示。,1加载Struts 2包登录http

4、:/struts.apache.org/,下载Struts 2完整版,本书使用的是Struts 2.3.4.1。将下载的文件struts-2.3.4.1-all.zip解压缩,得到文件夹包含的目录结构如图2.4所示,开发Struts 2程序只需用到lib下的9个jar包,包括:(1)传统Struts 2的5个基本类库。(2)附加的4个库。(3)数据库驱动。,在项目目录树中,右击项目名,选择菜单【Build Path】【Configure Build Path】,出现如图2.5所示的窗口。,2配置Struts 2修改web.xml文件:struts2 struts2/*login.jsp,3创建

5、JavaBean在项目src文件夹下建立包org.easybooks.bookstore.jdbc,在包里创建MySQLConnBean类,其代码与“入门实践一”的程序完全一样。4创建login.jsp在项目WebRoot下创建登录首页的JSP文件login.jsp,代码如下:登录页面 用户登录 姓名:密码:,5实现控制器Action在项目src文件夹下建立包org.easybooks.bookstore.action,在包里创建LoginAction类,代码所示。6配置Action在编写好Action(控制器)的代码之后,还需要进行配置才能让Struts 2识别这个Action,在src下创

6、建文件struts.xml(注意文件位置和大小写),输入如下的配置代码:/welcome.jsp/error.jsp,7创建其余的JSP文件在项目WebRoot下创建两个JSP文件。(1)welcome.jsp的代码如下:成功页面,您好!欢迎光临叮当书店。(2)error.jsp的代码与“入门实践一”的相同,在此省略。8部署运行部署项目、启动Tomcat服务器,在浏览器中输入http:/localhost:8080/jsp_struts2_jdbc/并回车,运行效果与之前的程序完全相同。,1Struts 2:配置Struts 2的配置可以分成单个单独的文件,如图2.6所示。,web.xmlwe

7、b.xml并不是Struts 2框架特有的文件,它作为部署描述文件,是所有Java Web应用程序都需要的核心配置文件。struts.properties文件Struts 2提供了很多可配置的属性,通过这些属性的设置,可以改变框架的行为,从而满足不同Web应用的需求。这些属性可以在struts.properties文件中进行设置,struts.properties是标准的Java属性文件格式,“”号作为注释符号,文件内容由键(key)-值(value)对组成。struts.xml文件struts.xml是Struts 2框架的核心配置文件,主要用于配置和管理开发人员编写的action。stru

8、ts.xml文件通常也放在Web应用程序的src目录下,该目录下的struts.xml将被Struts 2框架自动加载。,此文件提供了一种更改框架默认行为方式的机制。在一般情况下,如果不是打算让调试更加方便的话,不需要更改这个文件。struts.properties文件在WEB-INF/classes目录下存放。这个文件用来配置Struts2系统的一些基本规约,所有在struts.properties中配置的内容都可以在struts.xml中配置,或者web.xml中在struts2 filter中配置struts.properties中的如下配置:struts.i18n.encoding=U

9、TF-8相当于struts.xml中的如下配置:相当于web.xml中的如下配置:struts org.apache.struts2.dispatcher.FilterDispatcher true,struts.xml文件是一个XML文件,开头是XML的文档类型定义(DTD)。DTD提供了XML文件中各元素应使用结构的信息,而这些最终会被XML解析器或编辑器使用。/welcome.jsp/error.jsp,struts.xml文件中包含的是开发Action时所需要修改的配置信息。本章中所讨论的配置信息,都可以被其他方式所代替,比如注解,web.xml启动参数和可替换的URL映射方案。必须要

10、在struts.xml中进行配置的信息只有全局结果、异常处理和自定义的拦截器堆栈。功能1:负责配置业务控制器Action功能2:定义Action的处理结果和视图之间的映射关系功能3:负责配置拦截器,参数值 物理视图地址,/hello.jsp 1如果没有为action指定class,默认是ActionSupport。2如果没有为action指定method,默认执行action中的execute()方法。3如果没有指定result的name属性,默认值为success。,下载并导入Struts2框架的相关jar包开发Model层业务逻辑开发视图文件开发Action类在struts.xml中配置A

11、ction类在JSP中调用Action在web.xml中配置启动Struts框架,2Struts 2:Action(1)Action的定义。Struts 2中的Action只需要在一个普通的类中定义一个方法,如:public class XXXAction public String method()return return Value;,例如,定义一个HelloAction,访问该Action的时候在控制台打印“你好”:public class HelloAction public String hello()System.out.println(你好);return null;在stru

12、ts.xml配置文件中,将刚才创建的Action注册到这里:,(2)通过Action获取请求参数。以下是一个Action获取请求参数的例子。本示例用于演示用户登录的过程。用户输入用户名和密码,如果分别为admin和admin,则显示登录成功的信息,否则显示登录失败的信息。login.jsp的代码如下:用户名:密码:LoginAction.java作为控制器,负责接收页面发送过来的用户名和密码,并通过execute()方法调用业务方法,根据执行结果控制程序流程:如果登录成功,则跳转到success.jsp,否则跳转到failure.jsp。,LoginAction的配置:/success.jsp

13、/failure.jsp,(3)ActionSupport。ActionSupport类为Action提供了一些默认实现,主要包括:预定义常量。从资源文件中读取文本资源。接收验证错误信息。验证的默认实现。下面是ActionSupport类所实现的接口:public class ActionSupport implements Action,Validateable,ValidationAware,TextProvider,LocaleProvider,Serializable,Action接口同样位于com.opensymphony.xwork2包,定义了一组标准的常量和execute()方法

14、,可提供给开发人员使用,如下所示:public interface Action public static final String SUCCESS=success;public static final String NONE=none;public static final String ERROR=error;public static final String INPUT=input;public static final String LOGIN=login;public String execute()throws Exception;,拦截器与Action的关系,将一些功能放到

15、拦截器,可以降低Action的复杂性,提高重用性。拦截器的典型使用:封装请求参数文件上传类型转换异常处理,拦截器围绕着Action和Result的执行而执行,其工作方式如图:从图中可以看到,在Action和Result执行之前,为Action配置的拦截器将首先被执行,在Action和Result执行之后,拦截器将重新获得控制权,然后按照与先前调用相反的顺序依次执行。在整个执行过程中,任何一个拦截器都可以选择直接返回,从而终止余下的拦截器、Action和Result的执行。例如:当一个未授权的用户访问受保护的资源时,执行身份验证的拦截器可以直接返回。,Struts2内建了大量的拦截器,这些拦截器

16、以name-class对的形式配置在struts-default.xml文件中,其中name是拦截器的名字,就是以后使用该拦截器的唯一标识;class则指定了该拦截器的实现类,如果我们定义的package继承了Struts2的struts-default包,则可以自由使用下面定义的拦截器,否则必须自己定义这些拦截器。大部分时候,开发者无需手动控制这些拦截器,因为struts-default.xml文件中已经配置了这些拦截器,只要我们定义的包继承了系统的struts-default包,就可以直接使用这些拦截器。,在struts2中要编写拦截器类,必须实现com.opensymphony.xwor

17、k2.interceptor.Interceptor接口,该接口定义了如下的三个方法:void init():该方法在拦截器实例创建后、intercept()方法被调用之前调用,用于初始化拦截器所需要的资源,例如数据库连接的初始化。该方法只执行一次。void destroy():该方法在拦截器实例被销毁之前调用,用于释放在init()方法中分配的资源。该方法只执行一次。String intercept(ActionInvocation invocation)throws Exception:该方法在Action执行之前被调用,拦截器为Action提供的附加功能在该方法中实现。利用invocat

18、ion参数,可以获取action执行的状态。在intercept()方法中,如果要继续执行后续的部分(包括余下的应用于Action的拦截器、Action和Result),可以调用invocation.invoke()。如果要终止后续的执行,可以直接返回一个结果码,框架将根据这个结果码来呈现对应的结果视图。,import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;public class TimerInterceptor implements In

19、terceptor public void destroy()public void init()public String intercept(ActionInvocation invocation)throws Exception long startTime=System.currentTimeMillis();String result=invocation.invoke();long executionTime=System.currentTimeMillis()-startTime;System.out.println(Action的执行花费的毫秒数是:+executionTime

20、);return result;,index.jsp,1、核心控制器FilterDispatcher负责接收、拦截、过滤所有的用户请求2、业务逻辑控制器Action 开发者编写的业务逻辑 Action可以定义为一个简单JavaBean:Action和web容器Servlet API完全分离,无法从容器中存取数据通过拦截器(AOP)动态增强Action功能3、拦截器4、ActionContext:Action存放数据的区域;连接各个部分的数据总线5、ActionMapper:在http请求和action之间提供了映射6、ActionProxy实现拦截器功能的角色;用拦截器将action封装为Ac

21、tion代理的角色7、Result:代表action执行完后的结果JSP页面/Velocity模板/FreeMarker模板Servlet重定向ActionChainResult(可用于从当前action到其他action的链式处理),开源O/R映射框架,课程目标:理解O/R Mapping原理掌握Hibernate开发的相关知识能使用Hibernate进行实际项目开发Hibernate高手进级:性能优化策略,什么是Hibernate快速体验Hibernate的开发步骤认识Hibernate基本核心接口Hibernate的对象关系映射Hibernate查询语句(HQL),直接使用JDBC操作数

22、据库的步骤很繁琐JDBC操作的是关系型数据库我们用JAVA开发程序,则使用面向对象的思想Hibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口,关系模型把世界看作是由实体(Entity)和联系(Relationship)构成的。所谓实体就是指现实世界中具有区分与其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。所谓联系就是指实体之间的关系,即实体之间的对应关系。1:1 1:nm:n 关系数据库表字段主键外键,面向对象三大特

23、征:封装、继承(一般与特殊)、多态(覆盖与重载)类对象属性关系一般与特殊关系(is a)组成(has a)关联及其多重性1:11:nm:n双向关联与单向关联,ORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。Why ORM?面向对象的开发方法是当今企业级应用开发环境中的主流开发方法 关系数据库是企业级应用环境中永久存放数据的主流数据存储系统 字母O起源于“对象”(Object),而R则来自于“关系”(Relational)。

24、几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和呈现层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。而这些代码写起来总是重复的。,属性映射类映射关联映射一对一一对多多对多,对象/关系映射一直都是数据库技术中的难点,尽管人们提出了许多方案解决这个问题,但都不能完全做到即便利又高效。EJB的推出让人们看到了希望,但实践证明实体Bean的效率并不高,并且还十分难于为初学者理解。由Gavin King创建的Hiber

25、nate框架,从某种程序上正在朝着正确的方向迈走,并且得到越来越多IT从业人员的认可。就像当年的Struts框架一样,Hibernate也已经在许多项目中得到广泛应用。Hibernate由于投注了更多的精力在提升效率上,使用起来又十分方便,新版的EJB规范正在向Hibernate方向靠拢。正是由于得到广泛的认可,Hibernate已经成为程序员必须掌握的技术之一。,Hibernate能帮助我们利用面向对象的思想,开发基于关系型数据库的应用程序第一:将对象数据保存到数据库第二:将数据库数据读入对象中基于B/S的典型三层架构,关于分层 业务逻辑层和持久化层绝对不能依赖于展现层,下载Hibernat

26、e,并解压缩使用Eclipse创建新的项目引入Hibernate及其依赖库(jar包)引入mysql数据库驱动包打开mysql控制台,创建测试数据库”hibernate”Create database hibernate;Use hibernate,2.2.1 Hibernate概述1Hibernate与ORM用Hibernate将本书test数据库的user表映射为User对象,如图2.7所示,这样在编程时就可直接操作User对象来访问数据库了。,2Hibernate体系结构Hibernate的体系结构如图2.8所示。,1为项目添加Hibernate能力右击项目jsp_hibernate,选

27、择菜单【MyEclipse】【Add Hibernate Capabilites】启动向导,首先出现如图2.9所示的窗口。,单击【Next】按钮,进入如图2.10所示的界面,用于创建Hibernate配置文件。,单击【Next】按钮,进入如图2.11所示的界面,指定Hibernate所用数据库连接的细节。,单击【Next】按钮,出现如图2.12所示的窗口,询问是否需要创建SessionFactory类,这里选择创建,类名取默认HibernateSessionFactory,存放于org.easybooks.bookstore.factory包中。,单击【Finish】按钮完成添加。通过这些步骤

28、,项目中增加了两个Hibernate包目录、一个hibernate.cfg.xml配置文件、一个HibernateSessionFactory.java类,另外,数据库的驱动包也被自动载入进来,此时项目的目录树呈现如图2.13所示的状态。,2为user表生成持久化对象打开先前创建的mysql数据连接,选中数据库表user,右击,选择菜单【Hibernate Reverse Engineering】,如图2.14所示。,首先,如图2.15所示,选择生成的类及映射文件所在的位置。,单击【Next】按钮,进入如图2.16所示的界面,配置映射文件的细节。,单击【Next】按钮,进入如图2.17所示的界

29、面,主要用于配置反向工程的细节,这里保持默认配置即可。,3创建JSP文件与第1章“入门实践一”的传统Java EE程序一样,本例有4个JSP文件,其中login.jsp、welcome.jsp和error.jsp这3个文件的源码完全相同,不同的仅仅是validate.jsp文件的代码,改为直接用User对象访问数据库。validate.jsp的代码。4部署运行修改web.xml文件,改变项目启动页为login.jsp,部署、启动Tomcat服务器。在浏览器中输入http:/localhost:8080/jsp_hibernate/并回车,运行效果与之前的程序完全相同。,1Hibernate:配

30、置现在再看刚刚做的项目,在src目录下,生成了hibernate.cfg.xml文件,主要内容。2Hibernate:接口(1)初始化Hibernate配置管理类Configuration。根据传入或者默认的配置文件(hibernate.cfg.xml)来创建并初始化一个Configuration类的实例:Configuration config=new Configuration().configure();(2)通过Configuration类实例创建Session的工厂类SessionFactory:SessionFactory sessionFactory=config.buildSe

31、ssionFactory();(3)通过SessionFactory得到Session实例:session=sessionFactory.openSession();,ConfigurationConfiguration类负责管理Hibernate的配置信息。Hibernate运行时需要一些底层实现的基本信息,包括:(1)数据库URL。(2)数据库用户名。(3)数据库用户密码。(4)数据库JDBC驱动类。(5)数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据库类型到特定数据库数据类型的映射等。,SessionFactorySessio

32、nFactory负责创建Session实例,可以通过Configuration实例构建SessionFactory。Configuration config=new Configuration().configure();SessionFactory sessionFactory=config.buildSessionFactory();SessionSession实例由SessionFactory构建:Configuration config=new Configuration().configure();SessionFactory sessionFactory=config.buildS

33、essionFactory();Session session=sessionFactory.openSession();,之后就可以调用Session提供的save、get、delete等方法完成持久化操作:(1)Save。/新增名为“zhouhejun”的用户记录User user=new User();User.setName(zhouhejun);session.save(user);(2)Get。/假设表user中存在id=1的记录User user=(User)session.get(User.class,new Integer(1);(3)Delete。/假设表user中存在id

34、=1的记录User user=(User)session.get(User.class,new Integer(1);Session.delete(user);,/也可以通过Query接口进行基于HQL的删除操作String hql=delete User where id=1;Query query=session.createQuery(hql);Query.executeUpdate();通过Query接口进行数据查询:String hql=from User user where user.name like?;Query query=session.createQuery(hql);

35、query.setParamter(0,cartier);List list=query.list();Iterator it=list.iterator();while(it.hasNext()User user=(User)it.next();System.out.println(user.getUsername();,3Hibernate:ORM基础Hibernate中的ORM主要包括3部分内容:(1)表名-类名映射。(2)主键映射。(3)字段映射。本例用的数据库表(user表)结构如图2.18所示。对应user表,映射之后自动生成的User类代码。,User.hbm.xml的配置信息如

36、下:/配置文件根节点/类/表名映射/id映射/username属性/字段映射/password属性/字段映射,类/表映射配置 id映射配置 属性/字段映射配置属性/字段映射配置将类属性与表字段相关联,如:,在JSP+Hibernate的实践中,利用ORM实现了对数据库表的对象化操作,然而,validate.jsp的代码中仍然存留有操作数据库的动作,如:/查询user表中的记录String sql=from User u where u.username=?and u.password=?;Query query=HibernateSessionFactory.getSession().crea

37、teQuery(sql);query.setParameter(0,usr);query.setParameter(1,pwd);List users=query.list();,利用Hibernate提供的工具类来创建数据库表创建ExportToDB类public class ExportToDB public static void main(String args)throws Exception/读取配置文件Configuration cfg=new Configuration().configure();/创建SchemaExport对象SchemaExport export=new

38、 SchemaExport(cfg);/创建数据库表export.create(true,true);,public static void main(String args)throws ExceptionConfiguration cfg=new Configuration().configure();SessionFactory factory=cfg.buildSessionFactory();Session session=factory.openSession();session.beginTransaction();User user=new User();user.setNam

39、e(管理员);user.setPassword(admin);user.setCreateTime(new Date();user.setExpireTime(new Date();session.save(user);session.getTransaction().commit();if(session.isOpen()session.close();,1添加Hibernate及生成POJO类2定义并实现DAO在项目src下创建包org.easybooks.bookstore.dao,右击选择菜单【New】【Interface】,在如图2.19所示的【New Java Interface】

40、窗口的Name文本框输入IUserDAO,单击【Finish】按钮,创建一个DAO接口。,在IUserDAO.java中定义DAO接口如下:package org.easybooks.bookstore.dao;import org.easybooks.bookstore.vo.User;public interface IUserDAO public User validateUser(String username,String password);在src下创建org.easybooks.bookstore.dao.impl包,在包中创建类UserDAO,此类实现了接口中的validat

41、eUser()方法。,3创建JSPvalidate.jsp文件的代码。4部署运行修改web.xml文件,改变项目启动页为login.jsp,部署、启动Tomcat服务器。在浏览器中输入http:/localhost:8080/jsp_dao_hibernate/并回车,运行效果与之前的程序完全相同。,1DAO模式DAO是Data Access Object数据访问对象(接口),它介于数据库资源和业务逻辑之间,其意图是将底层数据访问操作与高层业务逻辑完全分开。,DAO原理,2Hibernate:HQL检索语言(1)实体查询。有关实体查询技术,如下面的例子所示:String hql=from Us

42、er;Query query=session.createQuery(hql);List list=query.list();如果需要取出名为“zhouhejun”的用户记录,可以通过hql语句加以限定:String hql=from User as user where user.name=zhouhejun;Query query=session.createQuery(hql);List userList=query.list();,下面是几个简单的示例:from User user where user.age20from User user where user.age betwee

43、n 20 and 30from User user where user.age in(18,28)from User user where user.name is nullfrom User user where user.name like Z%与SQL相同,通过and、or等逻辑连接符组合各个表达式:from User user where(user.age20)and(user.name like Z%),(2)批量更新和删除。在Hibernate 2之前的版本中,HQL还仅限于数据查询,从Hibernate 3开始,HQL具备了更加强大的功能,批量更新与删除就是其中的主要特性。在H

44、ibernate 2中,完成用户年龄属性的更新,必须通过以下代码:/加载ID=1的用户记录User user=(User)session.get(User.class,new Integer(1);user.setAge(new Integer(18);/通过session.save方法保存session.save(user);Hibernate 3的HQL提供了更加灵活的实现方式(bulk delete/update):String hql=update User set age=18 where id=1;Query query=session.createQuery(hql);query

45、.executeUpdate();,以下代码可将所有用户的年龄属性都更新为18:String hql=update User set age=18;Query query=session.createQuery(hql);int ret=query.executeUpdate();delete子句的使用同样非常简单。以下代码删除了所有年龄大于18的用户记录:String hql=delete User where age18;Query query=session.createQuery(hql);int ret=query.executeUpdate();,3Hibernate:Query接

46、口(1)使用“?”指定参数。通过Query接口可以先设定查询参数,然后通过setXXX()等方法,将指定的参数值填入,而不用每次都编写完整的HQL。Query query=session.createQuery(from Student s where s.age?and s.name like?)query.setInteger(0,25);/设置s.age?中的问号为整型25query.setString(1,%clus%);/设置s.name like?中的问号为字符串“%clus%”(2)使用“:”后跟变量的方法设置参数。可以使用命名参数来取代使用“?”设置参数的方法,这可以不用依据特

47、定的顺序来设定参数值,比如上面的代码可以写为:Query query=session.createQuery(from Student s where s.age:minAge and s.name like:likeName);query.setInteger(minAge,25);/设置:号后的minAge变量值query.setString String(likeName,%clus%);/设置:号后的likeName变量值,(3)setParameter()方法。setParameter()方法的全称是setParameter(String paramName,实例,实例类型),它可以

48、绑定任意类型的参数。在实际应用中,Hibernate能够根据类实例推断出绝大部分对应的映射类型,因此setParameter()中的第3个参数可以不要。例子如下:String hql=from User u where u.username=?and u.password=?;Query query=session.createQuery(hql);query.setParameter(0,username);query.setParameter(1,password);,(4)list()方法。Query的list()方法用于取得一个List类的实例,此实例中包括的可能是一个Object集合

49、,也可能是Object数组集合。最常见的是使用list()取得一组符合条件的实例对象,如以下的程序:Query query=session.createQuery(from Student s where s.age20);List list=query.list();for(int i=0;ilist.size();i+)Student stu=(Student)list.get(i);System.out.println(stu.getName();,2.3.1 MVC思想一个典型的MVC系统各部分的构成及相互作用关系如图2.21所示,模型:数据模型(Model)用于封装与应用程序的业务逻

50、辑相关的数据以及对数据的处理方法。视图:视图(View)是用户看到并与之交互的界面。控制器:控制器(Controller)起到不同层面间的组织作用,用于控制应用程序的流程。,1M层开发添加Hibernate、生成POJO类及编写DAO(1)添加Hibernate。操作方法同“入门实践三”第1步,在此不再赘述。(2)生成POJO类。操作方法同“入门实践三”第2步,在此不再赘述。(3)在项目src下创建包org.easybooks.bookstore.dao和org.easybooks.bookstore.dao.impl,分别用于存放DAO接口IUserDAO及其实现类UserDAO。DAO接口

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号