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测试
-
RunWith让junit与spring的环境进行整合
-
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);
}
}