spring data

1、jpa、spring data jpa、hibernate、spring data jdbc之間的關係

jpa是java提供持久化的一套規範,一套接口,而接口是需要實現才能工作的,而Hibernate就是實現了這套規範的orm框架

spirng data jpa是spring提供的一套簡化JPA開發的框架,按照約定好的【方法命名規則】寫dao層接口,就可以在不寫接口實現的情況下,實現對數據庫的訪問和操作。同時提供了很多除了CRUD之外的功能,如分頁、排序、複雜查詢等等。

Spring Data JPA 可以理解爲 JPA 規範的再次封裝抽象,底層還是使用了 Hibernate 的 JPA 技術實現

spring data jdbc和spring data jpa是同級關係

 

Spring Data 項目的目的是爲了簡化構建基於 Spring 框架應用的數據訪問計數,包括非關係數據庫、Map-Reduce 框架、雲數據服務等等;另外也包含對關係數據庫的訪問支持。 
Spring Data 包含多個子項目:

  • Commons - 提供共享的基礎框架,適合各個子項目使用,支持跨數據庫持久化
  • Hadoop - 基於 Spring 的 Hadoop 作業配置和一個 POJO 編程模型的 MapReduce 作業
  • Key-Value - 集成了 Redis 和 Riak ,提供多個常用場景下的簡單封裝
  • Document - 集成文檔數據庫:CouchDB 和 MongoDB 並提供基本的配置映射和資料庫支持
  • Graph - 集成 Neo4j 提供強大的基於 POJO 的編程模型
  • Graph Roo AddOn - Roo support for Neo4j
  • JDBC Extensions - 支持 Oracle RAD、高級隊列和高級數據類型
  • JPA - 簡化創建 JPA 數據訪問層和跨存儲的持久層功能
  • Mapping - 基於 Grails 的提供對象映射框架,支持不同的數據庫
  • Examples - 示例程序、文檔和圖數據庫
  • Guidance - 高級文檔

2、spring data jdbc

 <!-- maven依賴 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

配置數據源:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springdata?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=ok

dao層代碼:


import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.asiainfo.group.dao.UserDao;

@Repository
public class UserDaoImpl implements UserDao{
	
	@Autowired
	private JdbcTemplate JdbcTemplate;
	
	@Override
	public void listUser() {
		List<Map<String, Object>> users = JdbcTemplate.queryForList("select * from user");
		for (Map<String, Object> user : users) {
			System.err.println(user.get("id"));
			System.err.println(user.get("username"));
			System.err.println(user.get("birthday"));
			System.err.println(user.get("sex"));
		}
	}

}

 

3、spring data jpa

spring data jpa提供的接口

  • Repository 接口
  • CrudRepository 接口
  • pagingAndSortingRepository 接口
  • JpaRepository 接口
  • JpaSpecificationExecutor 接口

這些接口的底層原理是JPA的規範EntityManager

配置文件:

spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/springdata
spring.datasource.username = root
spring.datasource.password = ok
spring.jpa.hibernate.ddl-auto = none
spring.jpa.show-sql = true

實體類:


import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

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

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id")
	private int id;
	
	@Column(name="username")
	private String username;
	
	@Column(name="birthday",nullable=true)
	private Date birthday;
	
	@Column(name="sex")
	private String sex;

	public int getId() {
		return id;
	}

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

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	
	
	
	
	
}

 

利用spring data jpa提供的接口方式

我們只用寫dao接口,不用寫實現類了,因爲會生成代理實現類

UserDao類:


import org.springframework.data.repository.CrudRepository;

import com.asiainfo.group.entity.User;

public interface UserDao extends CrudRepository<User, Integer>{
	
}

 

 

自定義方式

另外,也可以自定義BaseDao和BaseDaoImpl,實現類裏依賴注入EntityManager即可:

BaseDao類:


import java.io.Serializable;

public interface BaseDao<T,ID extends Serializable> {

	void saveOrUpdate(T entity);
}

BaseDaoImpl類:


import java.io.Serializable;

import javax.persistence.EntityManager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Transactional
@Repository
public class BaseDaoImpl<T, ID extends Serializable> implements BaseDao<T,ID>{

	@Autowired
	private EntityManager em;
	
	@Override
	public void saveOrUpdate(T entity) {
		em.persist(entity);
		
	}

}

UserDao類:


import com.asiainfo.group.entity.User;

public interface UserDao extends BaseDao<User,Integer>{
	
}

UserDaoImpl類:


import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.asiainfo.group.entity.User;

@Repository("baseUserDao")
@Transactional
public class UserDaoImpl extends BaseDaoImpl<User,Integer> implements UserDao {

}

 

發佈了98 篇原創文章 · 獲贊 68 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章