在SpringDataJPA下,只需要关注业务实现,无需关注持久层的逻辑,需要做的工作只是声明持久层的接口,并不需要亲自实现,实现接口这些工作SpringDataJPA都会帮你做好。它有个比较智能的特点,可以根据接口名称来判断你想进行的操作。比如针对UserDO定义如下一个Dao层接口:
public class UserDO{
private Long id;
private String name;
}
public interface UserDAO extends PagingAndSortingRepository<UserDO,Long>{
public UserDO findUserById(Long id);
public UserDO findUserByIdAndName(Long id,String name)
}
实体类UserDO.java
@Entity
@Table(name="t_user")
public class UserDO extends BaseEntity{
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
@Column(name = "name")
private String name;
public Long getId() {
return id;
}
public UserDO setId(Long id) {
this.id = id;
return this;
}
public String getName() {
return name;
}
public UserDO setName(String name) {
this.name = name;
return this;
}
}
对应接口UserDAO.java
public interface UserDAO extends PagingAndSortingRepository<UserDO,Long> {
public UserDO findById(Long id);
public UserDO findByIdAndName(Long id,String name);
}
SpringDataJPA配置文件applicationContext-persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd">
<context:component-scan base-package="com.danny.springdata.dao"/>
<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.danny.springdata.entities"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<!-- 自动建表 -->
<prop key="hibernate.ddl-auto">update</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springdatajpa"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf"/>
</bean>
<tx:annotation-driven/>
<bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<jpa:repositories base-package="com.danny.springdata.dao"
entity-manager-factory-ref="myEmf"
transaction-manager-ref="transactionManager"/>
</beans>
测试UserDAOTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:applicationContext-*.xml"})
public class UserDAOTest{
@Autowired
private UserDAO userDAO;
@Test
public void findByIdTest() {
UserDO userDO=userDAO.findById(1L);
Assert.assertNotNull(userDO);
}
@Test
public void findByIdAndNameTest() {
UserDO userDO=userDAO.findByIdAndName(1L,"danny");
Assert.assertNotNull(userDO);
}
}
仅仅如此,so easy!
源码地址:git@github.com:DannyHoo/SpringDataJPADemo.git
【 转载请注明出处——胡玉洋《【SpringDataJPA】——SpringDataJPA入门实例》】