1.jpa开发,只要dao层继承JpaRepository接口,xml文件配置jpa注解驱动,spring会自动把实现此接口的类注册为一个bean对象。
2.用户下线,清除session,由于session中也可能存在其它对象,所以直接使用invalidate方法使用session失效。
3.注解开发的时候,拦截器返回login方法,必须要配置全局结果集。4.返回json结果集时,有自定义拦截器,package要继承json-default,在action中使用自定义的名字,因为要使用包中自定义的拦截器功能。
5.jpa属性查询需要符合一定的规则(findby方法)。query注解查询可以自定义查询语句,但是必须要加上modifying注解,因为实现类默认是只读的。
6.JpaRepository接口底层真正的实现类是SimpleJpaRepository,默认是只读。只需要在service层开启注解@Transactional即可。
底层原理:
@Transactional(readOnly = true)public class SimpleJpaRepository<T, ID extends Serializable> implements JpaRepository<T, ID>
①快照更新:快照更新先查询变成持久态,然后设置属性
②query注解查询:实现JpaRepository接口,在方法上增加查询语句(即更新语句),语句可以使用jpa占位符(1,2等,注意参数的顺序)
8.web层action注解:
①交给spring管理:注册为bean对象 @Controller(名称)
②继承包名@ParentPackage("自定义包名)
③命名空间@Namespace("/")
④多例@Scope("prototype")
9.在oracle中null的值会引发一些不必要的问题尽量避免。项目中的状态值可以直接在实体类设置初始化值(0或者1)
10.web层开发步骤(这些步骤是死的):
①接收参数(模型驱动或者属性驱动来封装,所以只剩下两步)
②调用业务层处理业务(调用service层处理,封装数据...)
③响应页面(返回结果集)
11.ctrl+t或者F4快速查看继承关系,提高开发效率
12.jpa注解分页:直接调用底层的public Page<T> findAll(Pageable pageable) 方法,只需要在action中传入接口实现类即可。
Pageable pageable=new PageRequest(page-1, rows);
注意jpa中的page是从0开始的,page指的是当前页,rows指的是每页显示的最大记录数,PageRequest是实现类。
只需要接收页面的两个参数即可,一个是当前页,一个是每页显示的最大数。
getTotalElements()方法:获取总的记录数
List<T> getContent()方法:获取当前页的数据列表。
分页都需要查询两次,一次是总记录数,一次是结果集。只不过底层封装了,所以只需要查询一次即可。
13.返回json结果集方法:
①业务处理
②封装json数据
③压入栈顶
④响应页面
每个json对象就是一条记录。
14.jpa的save方法有保存和修改的方法。如果有id的话,就查询数据,没有id那么就新增数据。(id很重要,当后台没有id的时候需要自己手动加上隐藏域,这个可以通过debug和fireBug进行调试)
var arry=new Array();
//row是一个字符串数组
$(rows).each(function(){
//push方法是 向数组的末尾添加一个或更多元素
arry.push(this.id);
})
//join方法是把数组转换成一个字符串
var ids=arry.join();
16.获取页面参数方法
①属性驱动获取,设置set方法
②传统方式:servletActionContext.getRequest.getParameter("参数")获取
17.懒加载的问题解决方法:在不需要查询的实体类的get方法上加上注解@JSON(serialize=false)进行排除或者在xml中配置OpenSessionInView。(存在效率问题)
OpenSessionInView机制:让会话在请求结束之后关闭,延迟了session关闭,需要在web.xml中配置。
在request过程中维持session。延迟session的关闭,直到request结束,再自动关闭session,也就是说,直到表现层的数据全部加载完毕,再关闭Session。
注意(副作用): 如果没有被事务管理的方法, OpenSessionInViewFilter 会将这些方法的事务变为 readOnly 的 !
如果要做添加功能,按道理它是可写的方法,但是这里只会readOnly只读的。
18.jquery的form表单没有reset方法,需要调用Form表单的reset( )方法,$("#表单id").get(0).reset();
19.Oracle语句优化:
1.尽量避免使用*号,*号是全字段扫描,查询效率低。
SQL优化:(where条件特别多的情况下,就有效果了)
对于and,应该尽量把假的放到右边。
对于or,应该尽量把真的放到右边。
SELECT COUNT(1) FROM xxx;
统计的是字符是1的这一列,效率高(原因,这一列只有一个字符,运算的时候,数据流很小,而且是固定列)
20.项目优化:
①action的常量:可以直接优化为SUCCESS,LOGIN等,因为字符串会在常量池中占用,并不会销毁。比如json的常量可以抽取到BaseAction中自定义常量来使用。
②公共代码直接抽取