第一个项目全过程

项目的准备:

 1 搭建框架  s2sh3 包括3大框架的整合 ,连通数据库,

 2 书写通用的dao  包括 增删该查,按照条件进行查询, 这里删除是参数是传递的对象。 这个通用的dao可以搞定

一切增删该查等等操作。 这里新建了一个user表,而id 是用了 assigned。

我们用了一个假的主页,<jsp:forward page="/page_common_index.action"></jsp:forward>

3  当使用hibernate设计findById(T.class,id); T是什么类型, 

4 public T findById(Serializable id); 为什么使用Serializable?

5 修改登录页面,改成struts2标签的,该标签最大的好处就是回显。当提交的时候,我们一般的都写成<input type

="submit"等等,但是这个项目中用的是提交一个连接,怎么弄的。<a href="javascript:$('#loginform').submit();">

6 这个项目基础的分包结构,分包的原则是:base这个包放一下重复的代码,这是类, 接口包这个包是因为面对

口编程的需要,实现包对接口的实现。web层  因为接口都是struts2帮住我们实现的不用书写这一层,但是web下面

有很多技术,这是要分层的。

7 验证码技术,生成验证码的时候,会保存到Session中,当用户提交过来的验证码只有和Session中的比较即可。

需要注意的是: 验证码不是user的业务因此不必写在user的属性当中。怎么解决

8 为什么登录功能会单独的写成一个LoginAction?

PermGen space  问题http://www.iteye.com/problems/94307

10 想一想成绩为何不能作为一个实体,而课程学生老师却可以

11 为何把成绩属性写在studentcourse表中,

12 验证码发生错误的时候,为何是这个路径 http://localhost:8080/bos/login.action 而不是http://localhost:8080/bos/login.jsp这个路径

当失败的时候会停留在struts2.xml 中的action的名字。

13 记住用spring 创建Action的时候,一定要指明scope="prototype" 不然会出现用户名和密码都输入正确了,怎么也登不上去

14<context:annotation-config/> 这是干什么的。

15 过滤器可以过滤所有,而拦截器只可以拦截Action,因为只有LoginAction是没有写在web-inf下面的,所以不用拦截,其他的要需要struts.xml进行拦截。

16 为什么LoginAction是要分离出来,而service包里却没有对应的,LoginService直接是UserService了呢,这是由于登录不需要,过滤是由两部分组成,

一是jsp需要放在web-inf下面,而是userAction是不需要我们自己写的拦截器的。

17 当修改一个对象的所有属性那么调用update方法,如果修改用户摸个属性,先查询,在修改, 通过id查询,返回的是持久态对象,直接set属性就可。

18 使用md5加密的时候,一切的操作,都是在我们的java代码中转换成加密状态,然后去匹配

19 为什么能把事物加载service层?<aop:advisor advice-ref="txdvice" pointcut="execution(* cn.nextdigital.bos.service.impl..*(..))"/>

20 <tx:method name="edit*" propagation="REQUIRED" isolation="DEFAULT"/> 我i什么不加这个,返回的成功,为什么没有发送sql

21 <many-to-one name="standard" class="cn.itcast.bos.domain.bc.Standard" fetch="select">只要在hbm.xml中看到 主方是1 就像在bean中引用一个单对象一样。

22 如果我们没有用前段框架,不是固定的需要json格式的数据,那么我们怎么在页面上获取action返回的值呢,有两种中思路: 1 action中放入容器范围内,在页面上

用el表达式取,2 用struts标签 <s:property value='user.state' /> user:对象名称;state:对象属性。必须与User类中保持一致。 注意理解回显的作用。

22 项目是这么开始的,看需求文档,然后设计数据库,然后写java类,生成hbm.xml文件。

23 deltag=0;表示未删除,在bean中的设置,数据库中会有默认为0,

24 easyui会默认的为我们提供分页查询的两个条件 page 和rows page代表当前页。rows代表当前页所显示的数据。但是easyui有一个缺点就是当前页显示的条数是总条数,

这不能满足我们的需求。我们想要的是当前页的记录条数。

25 传统的修改实现: 先根据id 查询,回显form数据,再进行修改

使用 datagrid ,所有数据 缓存到客户端浏览器,以对象方式保存 ,点击修改时,无需查询服务器,直接从datagrid获取数据,回显到form表单中 !!!

修改和保存是用的同一个方法,saveOrUpdate();如果有ID 那么修改,如果没有ID 那么保存。

26 在修改的时候,保存的表单中会有这么一段隐藏的id <input type="hidden" name="id" id="id"/>,我们pageQuery的时候,返回了一个id,name之类的,

那么我们取到这个id,进行修改操作。由于修改和保存用到了同一个表单,那么我们保存的时候,也会传递一个空的id,过去,会出现这么一个问题,Batch update returned unexpected row count from update[0]; actual row count: 0; expected: 1  问题原因: 新增数据,id有值 ,是空串””  空串对于 saveOrUpdate 方法,Hibernate 认为有值,执行 update 操作 !

27 删除操作怎么获取页面上,传过来的大量的id  String [] ids = standard.getId().split(", "); standardService.delBath(ids);

28 当查询主表的时候,从表也会查询出来,这是hibernate的特性,默认使用的是懒加载。

29 standard.setUser(loginUser); 会自动的寻找<many-to-one>找到user_id这一列,然后赋值为user的id。也就是说和user_id这一列是没有关系的,可以叫user_dd,随意等等。

    也就是说hibernate默认的会在standard表中生成一列,然后把user表的id赋给这一列。

30 在添加staff的过程中,怎么向staff表中插入standard_id这个字段?上面保存standard的时候,standard表中是怎么样插入user_id的呢?直接stanard.setUser(loginUser);其实实际上还是找到user.id  赋值给user_id这一列。我们在这里改怎么办,直接从页面上进行stanard.id,这就代表了,staff类中有setStandard()这个方法并且standard类中有setID()这个方法。在当前页面上是含有id,因为  OpenSessionInView把session开到了View层,那么standard对象处于游离状态。

31 pointcut="execution(* cn.nextdigital.bos.service.impl..*(..))这是说明要过滤service的方法,也就是在service层要添加事务,因为事务又是通过session得到的,所以

   session是加到service层的。OpenSessionInView又把session开到了表现层。

32   修改标准时,主键策略uuid (自动生成策略),如果id不为 null,默认执行update操作。修改取派员,主键策略assigned(委派策略),服务器会生成查询语句,先根据id查询,

如果存在update,如果不存在save.

33 setUser(User) 和<input name="region.id"/>

34 对于分区来说,如果进行多条件查询那么需要缓冲查询条件,第二点,我们使用复合条件进行查询的时候,很多都是区域的字段作为查询条件,分区是和区域有着多对一的关系,我们在设计hbm.xml的时候,已经设计好了两者的关联,这就是多表进行关联。


35 {username:lgh} 可以再action中像获取form里面的数据一样获取,user.getUsername();

36 在subarea.jsp中,<input name="region.city"> 会到subarea.java中寻找region ,然后再去region.city。会在subareaAction中创建Region对象。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值