Spring Data JPA是Spring基於Hibernate開發的一個JPA框架。若是用過Hibernate或者MyBatis的話,就會知道對象關係映射(ORM)框架有多麼方便。html
可是Spring Data JPA框架功能更進一步,爲咱們作了 一個數據持久層框架幾乎能作的任何事情。下面來逐步介紹它的強大功能。java
直接上代碼:spring
<!-- 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 -->
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; } }
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); }
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; } }
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; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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.driver=org.mariadb.jdbc.Driver jdbc.url=jdbc:mariadb://localhost:3306/test jdbc.user=oukele jdbc.password=oukele