Spring4 + Hibernate4集成Spring Data JPA

1.添加依赖包:

spring和hibernate的包还是好找的,记得加入hibernate/lib/jpa里面的jar包,接着最麻烦的事jpa了,需要添加spring-data的jar包了,给个网址吧:下载spring-data

我们需要的是spring-data-commons和spring-data-jpa,记得 如果包倒入的不对的话,会出现包冲突的一场,我个人使用的是commoms-1.5.0和jpa-1.3.3,这两个是兼容的,还需要的是slf4j的jar,因为这个也是一个依赖包。附上整个项目的包结构吧:

Spring4 + Hibernate4集成Spring Data JPA_第1张图片

Spring4 + Hibernate4集成Spring Data JPA_第2张图片

2.配置xml

先是配置applicationContext.xml




    
    
        
        
    

    
    

    
    

    
    
        
        
        
        
    

    
    
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    
    

    

    
        
    

    

    
    
        
        
	
        
        
        

        

        
            
                ${dataSource.dialect}
                ${dataSource.hbm2ddl.auto}
                ${dataSource.show_sql}
                ${dataSource.format_sql}
            
        

        
            
                cn.limbo.entity
            
        
    

    

    
    
        
    


    
可以看到,如果引入jpa之后原先的hibernate的sessionFactory的bean配置就不需要了,转而是配置entityManagerFactory了,而且事务的管理的bean也变成了JpaTransactionManager了,这个比较简单。
如果项目是web项目的话,一定一定要记得更改web.xml原先对sessionFactory的fliter,否则项目启动的时候会报找不到sessionFactory的错误,诶,当时有点粗心了。
web.xml


    
    Google Authenticator
    
        login.html
    

    
    
        contextConfigLocation
        classpath:applicationContext.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    

    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
        1
    
    
        springmvc
        *.do
    

    
    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        characterEncodingFilter
        *.do
    

    
    
        hiddenHttpMethodFilter
        org.springframework.web.filter.HiddenHttpMethodFilter
    
    
        hiddenHttpMethodFilter
        *.do
    

    
    
    
        
        
    
    
        
        
    

    
    
        entityManagerInViewFilter
        org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
    
    
        entityManagerInViewFilter
        *.do
    


3.编写dao层

经过上面的配置之后,已经可以使用jpa了,接下来就是编写dao层的东西了
先贴上我的dao层实现
package cn.limbo.dao;

import cn.limbo.entity.User;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.RepositoryDefinition;
import org.springframework.data.repository.query.Param;

import java.util.List;

/**
 * user表的数据操作
 * Created by limbo on 2016/11/26.
 */

@RepositoryDefinition(domainClass = User.class, idClass = Integer.class)
public interface UserDao{

    @Query("select u from User u where u.ID = ?1")
    public User getUserByID(int ID);

    @Query("select u from User u where u.name = ?1")
    public User getUserByName(String userName);

    @Query("select u from User u")
    public List getAllUsers();

    public void save(User user);

    @Modifying
    @Query("delete from User u where u.ID = ?1")
    public void delete(int ID);

    @Modifying
    @Query("update User u set u.name = :name , u.password = :password where u.ID = :ID")
    public void update(@Param("ID") Integer ID ,@Param("name")  String name , @Param("password") String password);

}

实现jpa的方式有两种,一个是集成Repository接口,其中T表示你要操作的实体类,而ID表示实体类里面的ID的类型;还有一种就是加上注解@RepositoryDefinition
其中有两个参数一定要传值,domainClass表示实体类的Class,idClass表示ID的类型的class,就如我上面进行配置的。

jpa的接口类型有很多,一般用的最多的是 JpaRepository,还有CrudRepository,而Repository只是最基础的,没有实现任何的方法,是一个空的接口,所以可以进行自定义。
接下来就是使用dao的东西了,贴上我的service层
UserService.java
package cn.limbo.service;

import cn.limbo.entity.User;

import java.util.List;

/**
 * Created by limbo on 2016/11/26.
 */
public interface UserService {

    public User getUserByID(int ID);

    public List getAllUsers();

    public void addUser(String name,String password);

    public void deleteUserByID(int ID);

    public void updateUser(User user);

    public boolean isExist(String userName);

}
UserServiceImpl.java
package cn.limbo.service.impl;

import cn.limbo.dao.UserDao;
import cn.limbo.entity.User;
import cn.limbo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created by limbo on 2016/11/26.
 */
@Service("userService")
@Transactional
public class UserServiceImpl implements UserService{

    @Autowired
    private UserDao userDao;

    @Override
    public User getUserByID(int ID) {
        return userDao.getUserByID(ID);
    }

    @Override
    public List getAllUsers() {
        return userDao.getAllUsers();
    }

    @Override
    public void addUser(String name,String password) {
        User user = new User(name,password);
        userDao.save(user);
    }

    @Override
    public void deleteUserByID(int ID) {
        userDao.delete(ID);
    }

    @Override
    public void updateUser(User user) {
        userDao.update(user.getID(),user.getName(),user.getPassword());
    }

    @Override
    public boolean isExist(String userName) {
        if(userDao.getUserByName(userName) != null)
            return true;
        return false;
    }
} 
其实最重要的是就是在需要在实现类前面加上@Transactional注解。到此,jpa配置完成咯。
附上当时我配置的时候的参考文章
http://www.cnblogs.com/dreamroute/p/5173896.html
http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/

整个项目我发在了github上了,有兴趣可以看看
https://github.com/NetFilx/Google-Authenticator
 



你可能感兴趣的:(Spring)