struts2+hibernate实战笔记 联系客服

发布时间 : 星期五 文章struts2+hibernate实战笔记更新完毕开始阅读45c3dc30ee06eff9aef80709

笔记是本人长期的总结,仅供学习使用,任何商业用途请注明 版权:大麦推荐网 网址:http://www.damai582.com ------------------------------------------------------------ Struts知识:

strut里没有servlet 全部是java类

return返回的字符串可以为其他,但返回来的和配置文件的要一致。

jsp表示层 struct业务逻辑层 hibernate持久化层 数据库层

struct的作用是把请求跟视图分离开。

jsp里传过来的数据都是string类型,因此在servlet里要进行类型转换,但struts对日期类型可以自动 转换。

如果是servlet转发到jsp时,浏览器显示的是servlet的映射路径,转发的数据,在页面刷新会增加该数据

因为页面每次刷新,都会请求转发该数据,因此要适当设置为跳转。

strut获取Httprequest Httpresponse等的方法:

HttpServletRequest request = ServletActionContext.getRequest();

onclick=\后退的js代码

namespace决定了action的访问路径,默认为\可以接收所有路径的action

namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/indx.action /xxx/index.action,或者/xxx/yyy/index.action

namespace最好也用模块来进行命名,当namespace为空,所有的/url/index.action都可以访问指定的action

struct先找有设置namespace的package,然后在找没设置改属性的package

拷贝项目时,除了要修改项目名,还要在properties里的myeclipse的web的web Context-root修改为更新后的项目名。

struct每次请求action时都会创建一个新的action,不会出现每个用户共享action的问题

当配置文件没有在action里指定class时,会默认执行ActionSupport这个action

struts应该尽量使用动态调用方法,这样可以省很多配置代码,动态调用方法为(action名!

方法名)

如:person!add

使用通配符可以使配置降到最少*→{1}

DomainModel域模型即javabean类

struct不用new一个javabean类,会自动帮你new

用了泛型之后就不能强制转换

路径问题:

index.jsp是相对路径,同个文件夹下的jsp可以互相通过xxx.jsp访问

在jsp里面\代表整个tomcat的跟路径,如访问这个链接href=\, 则就是访问http://loaclhsot:8080/index.jsp 因此需要在jsp里面加入下面的代码: <%

String path = request.getContextPath(); String basePath = request.getScheme()+\获取的路径为:http://loaclhsot:8080/工程名/ %>

上面的代码后,使用超链接写相对路径即可)

struts2中的路径问题是根据action的路径而不是jsp路径来确定,所有尽量不要使用相对路径

解决的办法统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp(工程名)的路径)

或者使用myeclipse经常用得,指定basePath,就可以用相对路径了

----------------------------------------------------------------------------------------------------------- 笔记是本人长期的总结,仅供学习使用,任何商业用途请注明 版权:大麦推荐网 网址:http://www.damai582.com

Hibernate知识:

放在静态代码块里的代码是在类还没执行,被加载的时候就会先执行,在内存开辟空间,而且只执行一次,

因为SessionFactory只要创建一个就够了,在静态代码块程序就会只执行一次,因此达到只创建一个SessionFactory

当我们操作对象的时候,hibernate就会读取映射文件来使表之间有机的关联起来

单向关联:一的这一方能获得多的那一方,而多的那一方没法获得一的这一方 双向关联:双方都能获得对方的对象

一对多默认是延迟加载,当多的那一方在session关闭前没有被调用/使用时,hibernate是不会执行联级的

hibernate操作的是javabean对象,通过对象关系映射文件将其关联到数据表,然后hibernate再自动生成sql语句,将对象 插入到表中

new后变成临时状态 sava后变成持久化状态 close后变成游离状态

hibernate思路:对javabean进行操作设置,然后调用session.save()等方法,再通过配置文件的对象关系映射,把数据存到数据库

Date类型对应数据库的DateTime

连接数据库:

class.forname(\数据库驱动名\;

Connection conn=DriverManager.getConnection(\); String sql=\

PreparedStatement ps=conn.prepareStatement(sql);(区分PreparedStatement 与prepareStatement)

ResultSet rs=ps.executeQuery();(执行查询) if(rs.next())

{

输出查询 }

ps.executeUpdate();(执行增删改) conn.close();

?表示预编译,哪个数字就sql里对应那个字段

关系数据库里用外键表示一对多的参照关系,而多对多关系,需要借助一个关系表来实现。

使用代理主键机制,代理主键不能有业务含义,不会被改变。

数据库里面的记录是字段,一旦通过程序加载到内存就变成对象

hibernate通过ORM文件的映射实现对数据库层与业务逻辑层的持久化操作,ORM是对象-关系映射,

把sql的代码与实现业务逻辑的代码分离开。 hibernate配置文件:hibernate.cfg.xml ORM映射文件:类名.hbm.xml

web应用程序跟java应用程序都可以使用hibernate的持久化

MVC模式(model view controller) DAO模式(data access object)

一个持久化类(即javabean)和一个表对应,类的每个实例对应表中的一条记录。

域模型有继承,有多对多关联关系,双向关联关系。关系模型不能直接表示继承关系,通过连接表来表示多对

多关联关系,只有单项参照关系,而且总是many方参照one方

实体域模型是一个javabean类,在业务逻辑层,关系数据模型是一个数据表,在数据库层。

hibernate.cfg.xml是hibernate的主配置文件,放在src下;struct.xml也是在src下

类名.hbm.xml是hibernate的对象关系映射文件,hbm类的xml文件是javabean类和数据表建立映射的桥梁。

java的实体类是通过配置文件与数据表中的字段相关联。hibernate在运行时解析配置文件,根据其中的字段

生成相应的SQL语句,将该文件存放在src目录下。 同一目录下直接可以用相对位置来引用文件。

静态代码是java类一运行就会被加载到内存,从头到尾只运行一次,运用于sessionFactory里