JPA
springside edited this page Mar 7, 2012
·
29 revisions
使用Spring Data JPA,只要编写接口就够了,CRUD方法啦,分页啦,自动将findByLoginName()的方法定义翻译成适当的QL啦:
public interface UserDao extends PagingAndSortingRepository<User, Long> {
User findByLoginName(String loginName);
}
使用上很简单,快速浏览一下下面的资料就够了。
只有一个坑爹的地方,如果要为UserDao扩展方法,会新增一个UserDaoCustom接口,这时候,实现类的名字必须是UserDaoImpl,而不是UserDaoCustomImpl。
另外,除了智能地翻译连Less,Not,And,Or都支持的方法名,它当然也可以直接用@Query在方法上标注复杂的查询语句。
###资料
- 官方文档
- 使用 Spring Data JPA 简化 JPA 开发 IBM DW上的中文版教程.
数据库的表名,列名与Entity对应的规则,最常见的一个需求是把LOGIN_NAME翻译成loginName,Hibernate提供了ImprovedNamingStrategy, 在JPA中可以这样设置:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
</props>
</property>
</bean>
在mini-web里有一个JpaMappingTest,会遍历所有Entity,执行一次select操作看entity上的JPA annotation有没有问题,必备
暂时的Jpas里只有一个initLazyProperty(Object proxyed), 强制初始化对象的某个lazy load属性。
##Log4jdbc 如果要想看到实际执行的sql和实际绑定的参数,可以打开log4jdbc,方法很简单,打开application.properties里jdbc driver和url的定义,换成log4jdbc的定义,并保证log4j.properties里log4jdbc的级别是info就行了。