- 理解Spring Data JPA基本概念
- 独立搭建Spring Data JPA的开发环境
- Spring Data JPA的基本增删改查操作
- SPring Data JPA的内部原理
- 使用SPring Data JPA定义的方法进行查询
- SPring Data JPA中的JPQL查询
- Spring Data JPA中的方法命名规则查询
- Spring Data JPA是Spring基于ORM框架(Object Relation Mapping)、JPA规范的基础上封装的一套JPA应用框架,可以使开发者用极简的代码即可实现对数据库的访问与操作。它提供了包括增删改查在内的常用功能,且易于扩展,学习与使用。Spring Data JPA可以极大的提高开发效率!
- Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦
- JPA是一套规范,内部是有接口和抽象类组成的。hibernate是一套成熟的ORM框架,而且Hibernate实现了JPA规范,所以也可以称hibernate为JPA的一种实现方式,我们使用JPA的API编程,意味着站在更高的角度上看待问题。(面向接口编程)
- Spring Data JPA是Spring提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案。
目标:开发的时候,要带着他们的关系图进行开发(脑海中要有他们的整体架构)
需求:完成客户的增删改查
工程:Maven工程
坐标:导入Spring+hibernate+mysql驱动
第一步:pom.xml文件
5.0.2.RELEASE
5.0.7.Final
1.6.6
1.2.12
0.9.1.2
5.1.18
junit
junit
4.12
test
org.aspectj
aspectjweaver
1.6.8
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-core
${spring.version}
org.hibernate
hibernate-core
${hibernate.version}
org.hibernate
hibernate-entitymanager
${hibernate.version}
org.hibernate
hibernate-validator
5.2.1.Final
c3p0
c3p0
${c3p0.version}
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
mysql
mysql-connector-java
${mysql.version}
org.springframework.data
spring-data-jpa
1.9.0.RELEASE
org.springframework
spring-test
${spring.version}
javax.el
javax.el-api
2.2.4
org.glassfish.web
javax.el
2.2.4
第二步:整合Spring Data JPA 与Spring(编写applicationContext.xml)
目标:这个配置文件中包含几个大配置
所有的配置如下:
第三步:使用JPA注解配置映射关系
目标:会进行ORM配置,JPA映射注解
创建客户表
/*创建客户表*/
CREATE TABLE cst_customer (
cust_id BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
cust_name VARCHAR(32) NOT NULL COMMENT '客户名称(公司名称)',
cust_source VARCHAR(32) DEFAULT NULL COMMENT '客户信息来源',
cust_industry VARCHAR(32) DEFAULT NULL COMMENT '客户所属行业',
cust_level VARCHAR(32) DEFAULT NULL COMMENT '客户级别',
cust_address VARCHAR(128) DEFAULT NULL COMMENT '客户联系地址',
cust_phone VARCHAR(64) DEFAULT NULL COMMENT '客户联系电话',
PRIMARY KEY (`cust_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;`cst_customer`
客户实体类
/**
* 客户实体类
*/
@Entity
@Table(name="cst_customer")
public class Customer {
@Id
@Column(name="cust_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long custId;
@Column(name="cust_name")
private String custName;
@Column(name="cust_source")
private String custSource;
@Column(name="cust_level")
private String custLevel;
@Column(name="cust_industry")
private String custIndustry;
@Column(name="cust_address")
private String custAddress;
@Column(name="cust_phone")
private String custPhone;
省略get和set方法
}
2.1.1 编写符合Spring Data JPA规范的Dao层接口
- Spring Data JPA是Spring提供的一款对于数据访问层(Dao)层的框架,使用Spring Data JPA,只需要按照框架的规范提供dao接口,不需要实现类就可以完成数据库的增删改查、分页查询等方法的定义,极大的简化了我们的开发过程。
- 在Spring Data JPA中,对于定义符合规范的Dao层接口,我们只需要遵循以下几点就可以了:
- 创建一个Dao层接口,并实现JpaRepository和JpaSpecificationExecutor
- 提供相应的泛型
import com.itheima.domain.Customer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* 编写符合SpringDataJpa规范的dao层接口
* 1)dao接口所在的包已经在核心配置文件中固定
* 2)dao接口必须继承两个接口:
* * JpaRepository<操作的实体类,主键的类型>
* * JpaSpecificationExecutor<操作的实体类>
*/
public interface CustomerDao extends JpaRepository,JpaSpecificationExecutor{
}
Dao接口的编写规范:
1)dao接口所在的包在核心配置文件中固定了
2)dao接口继承两个接口:
JpaRepository<操作实体类,主键类型>
JpaSpecificationExecutor<操作的实体类
目标:查询一个对象,体会是否是极简的代码完成功能
/**
* Spring整合Junit的方式
*/
@RunWith(SpringJUnit4ClassRunner.class)//替换运行器
@ContextConfiguration("classpath:/applicationContext.xml")//指定核心配置文件
public class Test01_SpringDataJpa_CRUD {
@Autowired
private CustomerDao customerDao;
/**
* 查询一个对象
*/
@Test
public void test1(){
Customer customer = customerDao.findOne(6L);
System.out.println(customer);
}
}
SpringDataJpa入门:CRUD:保存和更新一个对象
目标:掌握保存和更新一个对象的方法
/**保存一个对象*/
@Test
public void test02(){
Customer c = new Customer();
c.setCustName("马化腾");
customerDao.save(c);
}
/***
* 更新:save方法具有保存和更新的功能:
* 1)有id,就是更新
* 2)没有id,就是保存
*/
@Test
public void test03(){
/**
* 推荐方式:先查询,后更新
* */
Customer c = customerDao.findOne(7L);
c.setCustName("马云");
c.setCustAddress("杭州");
Customer customer = customerDao.save(c);
System.out.println(customer);
}
目标:删除一个对象,查询所有对象
/**删除一个对象*/
@Test
public void test04(){
customerDao.delete(7L);
}
/**查询所有对象*/
@Test
public void test05(){
List customers = customerDao.findAll();
for (Customer customer : customers) {
System.out.println(customer);
}
}