Spring整合Hibernate实现Spring Data JPA (简单使用)

Posted 追梦者丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring整合Hibernate实现Spring Data JPA (简单使用)相关的知识,希望对你有一定的参考价值。

直接上代码:

pom.xml

        <!-- hibernate start -->
        <!-- spring data jpa  -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>
        <!-- hibernate  -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.0.Final</version>
        </dependency>
        <!-- hibernate end  -->

项目结构:

the_data_jpa 包 里面的 各类 代码

User

package com.oukele.the_data_jpa.entity;


import org.springframework.stereotype.Component;

import javax.persistence.*;

@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "Id")
    private int id;

    @Column(name = "userName")
    private String name;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

UserDao

package com.oukele.the_data_jpa.dao;

import com.oukele.the_data_jpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface UserDao extends JpaRepository<User, Integer> {

    User findByNameAndPassword(String name,String password);


}

UserService

package com.oukele.the_data_jpa.service;

import com.oukele.the_data_jpa.dao.UserDao;
import com.oukele.the_data_jpa.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public User findNameAndPassword(String name,String password){
        return userDao.findByNameAndPassword(name, password);
    }
    
    public List<User> list(){
        List<User> list = userDao.findAll();
        return list;
    }
}

 

SpringConfig

package com.oukele.the_data_jpa;


import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.util.Properties;

@Configuration//声明当前配置类
@ComponentScan(basePackages = "com.oukele.the_data_jpa")// 扫描当前包 使用 spring 注解
@PropertySource("classpath:jdbc.properties")//加载 资源文件
@EnableJpaRepositories(basePackages = "com.oukele.the_data_jpa.dao")//扫描 使用 jpa 注解的接口
public class SpringConfig {
    

    //配置数据源
    @Bean
    DataSource dataSource(Environment env) throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(env.getProperty("jdbc.driver"));
        dataSource.setJdbcUrl(env.getProperty("jdbc.url"));
        dataSource.setUser(env.getProperty("jdbc.user"));
        dataSource.setPassword(env.getProperty("jdbc.password"));
        return  dataSource;
    }

//    @Bean
//    public JdbcTemplate jdbcTemplate() {
//        JdbcTemplate jdbcTemplate = new JdbcTemplate();
//        jdbcTemplate.setDataSource(dataSource1);
//        return jdbcTemplate;
//    }

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    //SqlSessionFactory
    @Bean
    LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource){

        LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
        bean.setDataSource(dataSource);
        //加载 实体类
        bean.setPackagesToScan("com.oukele.the_data_jpa.entity");
        //设置 适配器
        bean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());

        Properties properties = new Properties();
        //更新表结构
        properties.setProperty("hibernate.hbm2ddl.auto", "update");
        //设置方言
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.mysqlDialect");
        bean.setJpaProperties(properties);

        return bean;
    }

}

 

Main ( 测试 类)

package com.oukele.the_data_jpa;

import com.oukele.the_data_jpa.entity.User;
import com.oukele.the_data_jpa.service.UserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.List;

public class Main {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService service = context.getBean(UserService.class);
       
        User user = service.findNameAndPassword("oukele","oukele");
        System.out.println(user.getName());
        
        List<User> list = service.list();
        for (User user1 : list) {
            System.out.println(user1.getName()+" - "+user1.getPassword());
        }
    }
}

测试结果:

1 oukele
2 oukele - oukele

 

jdbc.properties文件:

jdbc.driver=org.mariadb.jdbc.Driver
jdbc.url=jdbc:mariadb://localhost:3306/test
jdbc.user=oukele
jdbc.password=oukele

示例代码下载: https://github.com/oukele/spring-hibernate-spring-data-jpa

以上是关于Spring整合Hibernate实现Spring Data JPA (简单使用)的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate 与 Spring 的整合

Spring与Hibernate整合,实现Hibernate事务管理

Spring框架学习spring整合hibernate

Spring整合Hibernate实现JPA持久化

Spring整合Hibernate实现Spring Data JPA (简单使用)

SSH程序框架之Spring与HIbernate整合