JPA注解项目开发总结


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>


7.如果修改单个属性比如用户密码或者用户名,有两种方法。
①快照更新:快照更新先查询变成持久态,然后设置属性

②query注解查询:实现JpaRepository接口,在方法上增加查询语句(即更新语句),语句可以使用jpa占位符(1,2等,注意参数的顺序)


Query注解编写语句,其参数是JPQL语句。(类似与Hibernate的HQL或SQL)。

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进行调试)


15.js拼接字符串进行批量修改:
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中自定义常量来使用。

②公共代码直接抽取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值