Spring Data JPA学习

122 阅读3分钟

Spring Data JPA

[Spring Data JPA网址][spring.io/]

[TOC]

特征

  • 支持基于 Spring 和 JPA 构建存储库
  • 支持Querydsl谓词,因此支持类型安全的 JPA 查询
  • 域类的透明审计
  • 分页支持、动态查询执行、集成自定义数据访问代码的能力
  • @Query在引导时验证带注释的查询
  • 支持基于 XML 的实体映射
  • 通过引入基于 JavaConfig 的存储库配置@EnableJpaRepositories

环境准备

​ 1.SpringData给我们提供了统一的API对数据库访问层进行操作

​ 2.统一的接口

​ 3.提供数据访问模板类,xxxTemplate

​ 4.JPA

步骤

1.添加新的依赖

JPA

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

测试

<dependency>

	 <groupId>org.springframework.boot</gropuId>

     <artifactedId>spring-boot-starter-data-jpa</artifactId>

</dependency>

2.配置文件

连接数据库基本信息

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名
spring.datasource.username=数据库用户名
spring.datasource.password=数据库密码

在此步骤中 数据库是不存在的 需要自己创建

连接数据库*

spring.datasource.type=com.alibaba.druid.pool.
						DruidDataSource

spring-data-jpa的正向工程

update 追加数据

create 删除上一张表 创建一张新的一模一样的表

create-drop 类似于create

spring.jap.hibernate.ddl.auto=update

在控制台显示sql语句

spring.jpa.show-sql=true

3.导包

pojo

@Entity //该目的是把类与表连接起来 选择javax.persistence

@Table(name="数据表") //指明数据表(和实体类做映射)

@Id //表示是数据库表中的主键

@GeneratedValue(strategy=GenerationType.IDENTITY)

//表示在表中为自增长

@Column(name="表中字段")//指定和属性映射的列

private Integer 属性名;

Dao层接口

Spring Data JPA的接口继承结构:

Repository

CrudRepository

PaingAndSortingRepository

JpaRepository

​ //当前需要映射的实体

​ //当前映射实体类id类型

public interface UserRepository extends   				                            JpaRepository<Users,Integer>{

}
Test测试
  1. RunWith让junit与spring的环境进行整合
  2. SpringBootTest让当前SpringBoot的测试类

    classes={Apps.class} 加载SpringBoot启动类

  • @RunWith(SpringJUnit4ClassRunner.class)

  • @SpringBootTest(classes={Apps.class})

  • @Autowired

    //属性接口名称

    @Autowired
    	//属性接口名称
    	private  UsersRepository  usersRepository;	
    
添加

save

@Test
public void testSave(){
	User u=new User(1,"孙艺桐","巴拉拉魔仙堡");
	User us=new User(2,"周文静","M78星云");
	//User user=new User(3,"陶庆霞","菠萝屋");
	userRepository.save(u);
	userRepository.save(us);
	//userRepository.save(user);
}
根据id查询全部

findone

@Test
public void test2(){
	User u1=userRepository.findOne(3);//id
	System.out.println(u1);
}
查询表中所有数据

findAll

@Test
public void test3(){
	List<User> list=			                 
	               (List<User>)userRepository.findAll();
	for(User user:list){
		System.out.println(user);
	}
}
修改

set+属性名

@Test
public void test4(){
	User u=userRepository.findOne(2);//查询id查部分
	u.setName("嘿嘿");//修改的内容
	userRepository.save(u);//查询全部
}
删除

delete

@Test
public void test5(){
	userRepository.delete(4);
}
单个字段排序
Sort: 定义排序规则和排序字段(对象的属性)
 * 	Direction: 排序规则 DESC降序 ASC升序
 * 	properties: 指定排序的属性
@Test
public void test1(){
	Sort sort=new Sort(Direction.DESC,"id");
	List<Users> list=   
	            (List<Users>)userRepository.findAll();
	for(Users u:list){
		System.out.println(u);
	}
}
多个字段排序
@Test
public void test2(){
	//数据库 order by 排序 Order DESC ASC正序
	Order o1=new Order(Direction.DESC,"age");
	Order o2=new Order(Direction.ASC,"id");
	Sort sort=new Sort(o1,o2);
	List<Users> list=
	        (List<Users>)userRepository.findAll(sort);
	for(Users u:list){
		System.out.println(u);
	}
	
}

4.分页

​ page //当前页的索引 索引都是从0开始的

​ size //当前显示3条数据

@Test
public void test3(){
	int page=0;//当前页的索引 索引都是从0开始的
	int size=4;//每页显示3条数据
	Pageable pageable=new PageRequest(page,size);
	Page<Users>  p=userRepository.findAll(pageable);
	System.out.println("总条数:"+p.getTotalElements());
	System.out.println("总页数:"+p.getTotalPages());
	//分页结果打印
	List<Users>	list=p.getContent();
	for(Users u:list){
		System.out.println(u);
	}
}