今天终于从基础班升到高级班了,而且前三天是 张孝祥老师讲课,一个字——爽,毕竟人家是大师级的人物啊。
张老师,给人的印象是一个属于爱钻研的人,他的著作——《深入体验JavaWeb开发内幕—
不知不觉中我们已经进入了项目阶段,这段时间的摸爬滚打,觉得自己对程序的开发已经有了
进一步的了解,没有以前那种对程序开发的神秘感。这是我对目前学习状态的概括。
冯威老师
在JavaWeb这阶段,一直是冯威老师带着我们学习,目前他已经去教另外一个班的JavaWeb课了。
但是冯威老师给我们留下了深刻的印象。冯老师现在已为人父,但是平时的言行给人不是那种深沉、
老练的感觉,而是一副嘻嘻哈哈的形象。听冯老师的课,不会感到无聊,他没事就和我们开玩笑,
尤其到了下午第一节课,大家午睡过后都觉得很困倦,但是冯老师总会想方设法跟大家讲几个笑话,
让大家调整一下自己的精神状态,然后开始讲课。我不善于言辞,可能这些言语都表达不了冯老师
的性格,大家有机会的话,可以过来听一听冯老师的课。冯老师的课没有一大堆的理论,用他自己
的话讲“我就是一个实干主义者”。我想这也是有必要的,我大体计算了一下,我们就业班4个月的
时间,要学习比较大的模块、框架等,加在一起大约要十多个。例如:XML,Servlet,数据库,Struts1,
Struts2,Hibernate,Spring,AJAX,Jquery,Lucene
OA项目中的Struts部分,Struts给我的印象是不难,不像Hibernate中那么多的配置,但是
代码写的多了,有的时候对于Struts的执行流程就晕了,一会转向到这,一会重定向到那,
因此我自己对Struts的执行流程做了一次总结,加深一下自己的印象,希望这篇总结对网友
们的Struts学习能有帮助。
2.OA项目中的Struts个人理解总结
|--修改数据
|--既然是修改数据,那么也就是说数据原来是存在的,因此要修改的这个对象
就不能是new出来的,而是通过查询数据库查找到的。即:
Role role = roleService.getById(roleId);
|--在修改数据之前,就应该把数据准备好,然后利用Struts的回显机制,
将数据回显到修改页面。
|--数据回显的方法是:roleActionForm.setXxx(role.getXxx());
|--这时,准备数据和数据回显的工作都准备好了,因此下一步就是转发到数据编辑
页面。在RoleAction中使用mapping.findForward('editUI');来完成此工作。
&nb
OA项目的Hibernate部分,学习Hibernate给人的感觉是配置太多,不容易记忆,因此
我把我们涉及到的各种关联关系列举出来。给大家一个建议,其实在学习的时候,遇到
Hibernate就总结一次,这样对自己理解Hibernate是大有好处的。如果以后在遇到问题,
可以回过头来看看自己的总结。
2.一对多,多对一,多对多,一对一关联映射代码实现。
|--Employee实体
public class Employee {
private Long id;
private String name;
private Department department;
private Set<Role> roles = new
HashSet<Role>();
private String sex; // 男 or 女
private Date registerTime;
private String phoneNumber;
private String email;
private String description;
private
今天使我们项目开始的第一天,在传智播客学习了这么长时间,终于可以通过项目检验一下
自己定的学习成果了,今天我们讲解的是Dao层的设计。其中最重要的是反射技术,在这里
我把反射技术部分的个人理解总结出来。
3.在BaseImplDao中获取要操作的POJO的类型——反射。
|--因为在BaseDao中要操作的POJO类型未知,但是还要用hibernate的Session对象
来操作此对象来进行增删改查,因此我们可以通过泛型来操作。例如:
public class DaoBaseImpl<T> implements DaoBase
{
protected Class<T> clazz;
public void delete(long id) {
this.getSession().delete(this.getSession().get(clazz,
id));
}
……
}
|--但是这样声明的clazz是一个null,既然UserDaoImpl继承了BaseImplDao,
我们声明一个UserDao的时候,由于没有给clazz传值,因此对从BaseImplDao
&
JBPM是一个工作流的框架,它使我们在面对工作流的开发中变得简单,给我们上课的是汤阳光老师,
他是对比着Hibernate来给我们讲解JBPM的,呵呵,大家也许会糊涂,两者是两个框架,分属的业务
领域也不一样,怎么能对比着讲呢。其实,我这里说的对比着讲指的是他们的API,两者的API在很大
程度上有相似之处。
1.JBPM的API
|--对Jbpm所有实体的操作(增、删、改,不含查询),都要使用Jbpm提供的API。
|--有两个重要的类:JbpmConfiguration和JbpmContext。JbpmConfiguration是
jBPM的相关配置信息,并有创建JbpmContext的功能,可以把JbpmConfiguration想像成
Hibernate中的Configuration与SessionFactory的结合体。使用JbpmConfiguration.getInstance()方法
创建一个JbpmConfiguration对象,这会使用默认的jbpm配置文件:在classpath根目录中,
并且名字为jbpm.cfg.xml。或者是使用getInstance(String
configFilePath)方法,用指定的配置文件构造。
|--Jbpm中所有的持久化操作都是通过JbpmContext完成的,可以把他想像成
2.父子关系
更强程度上的关联关系。
表中原来存在一些“孤儿”,后来把表中的数据声明成父子关系。
那么原来这些“孤儿”还是存在的。并不会因为这种后加上去的
声明而消失。因为父子关系强调的是父亲来掌控孩子的生命周期,
本来就不存在父亲,就不会影响到这些“孤儿”的生命周期。
3.清理缓存
Session.flush();//清理,让数据库中的记录与缓存同步,让缓存执行一系列的sql语句,但是不提交,以便于回滚操作。
Session.refresh();//刷新,让缓存内容与数据库的记录同步。
Session.clear();//清空,缓存中加入了大量的信息,为了避免堆栈溢出,需清空缓存
4.Hibernate中对象的状态:临时,持久,游离
|--临时态,是刚刚被new出来的,数据库中没有与之对应的记录。
|--临时态--->持久态:save(),saveOrUpdate()
|--持久态--->临时态:delete()方法。
|--游离态,是从持久态转变过来的。
数据库中是有与之对应的记录的。
|--临时
这里的说明大部分是老师上课提到的细节知识点,对映射文件的配置进行了详细的说明,大部分都是自己总结的,因此肯定存在疏漏、错误之处,因此请网友批评指正。
*.Customer.hbm.xml配置说明
<?xml version='1.0'?>
<!DOCTYPE hibernate-mapping PUBLIC
'-//Hibernate/Hibernate Mapping DTD 3.0//EN'
'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
<hibernate-mapping>
<class name='cn.itcast.hibernate.domain.Customer'
table='hib_customers' lazy='false'>
<!-- type映射类型 -->
<id name='id' column='id'
type='integer'>
<generator class='increment' />
</id>
<property name='name' column='name'
type='string' length='20' access='property'/>
*.Hibernate的好处(面试)
它是一种持久化技术,封装了数据访问细节,体现了面向对象的思想。
--->什么是细节?
组织sql语句,遍历结果集。
*.关联:类之间的引用关系,以属性声明的方式体现
或者一个类中的属性是另一个类的集合。
通过主外键约束来实现。
依赖:类之间的访问关系,一个类的方法实例化另外一个类或
访问另外一个类的属性
聚集:强调生命周期(逻辑上的约束),如人和手的关系,
整体与部分的关系。部分类的对象不能单独存在,他的
生命周期依赖于整体类的对象的生命周期,整体消失时,
部分也随之消失。
一般化:又叫泛化,类之间继承关系。
*.持久化层
|--传统的典型软件3层架构
|
表示层 ---> 业务层
|--创建JavaBean——User
|--User的内容如下
public class User {
private String id;
private String name;
private String password;
private Date createTime;
private Date endTime;
……//Getters and Setters
}
|--创建JavaBean的映射文件——User.hbm.xml
|--该文件主要用来记录JavaBean的相关信息,以便被Hibernate所了解。
该文件可以在hibernate-3.2\eg\org\hibernate\auction
——3.2版本
或hibernate-distribution-3.3.1.GA\project\tutorials\eg\src\main\java\org\hibernate\auction
——3.3版本
下找到。
<?xml version='1.0'?>
<!DOCTYPE hibernate-mapping PUBLIC
'-//Hibernate/Hibernate M
bernate的配置文件涉及到的属性配置较多,我个人觉得没有必要死记硬背,老师讲过的知识点,自己心里列一个类似于数据库中索引的东西,用到的时候,翻一翻笔记,查一查资料,或者看一看自己以前写的代码,就OK了。
|--在工程内引入如下jar包
|--HIBERNATE_HOME/hibernate3.jar
|--HIBERNATE_HOME/lib/ *.jar (所有的jar包)
|--MySql jdbc驱动
|--创建hibernate配置文件hibernate.cfg.xml
这个配置文件可以在 hibernate-3.2\etc ——3.2版本
或在 hibernate-distribution-3.3.1.GA\project\etc
——3.3版本
找到,该文件的主要功能是告知Hibernate“做事情”的方式。该文件的格式如下:
<!DOCTYPE hibernate-configuration PUBLIC
'-//Hibernate/Hibernate Configuration DTD
3.0//EN'
'