SpringBoot整合SpringDataJPA

SpringBoot整合SpringDataJPA一 SpringBootDa 介绍 SpringData 其实 SpringData 就是 Spring 提供了一个操作数据的框架 而 SpringDataJP 只是 SpringData 框架下的一个基于 JPA 标准操作数据的模块 SpringDataJP 基于 JPA 的标准数据进行操作 简化操作持久层的代码 只需要编写接口就可以 nbsp nbsp 二 SpringBoot 整

import javax.persistence.*; @Entity @Table(name="t_users") public class Users { @Id //主键id @GeneratedValue(strategy=GenerationType.IDENTITY)//主键生成策略 @Column(name="id")//数据库字段名 private Integer id; @Column(name="name") private String name; @Column(name="age") private Integer age; @Column(name="address") private String address; @ManyToOne(cascade = CascadeType.PERSIST) //表示多方 @JoinColumn(name ="role_id") //维护一个外键,外键在Users一侧 private Roles roles; public Roles getRoles() { return roles; } public void setRoles(Roles roles) { this.roles = roles; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { final StringBuffer sb = new StringBuffer("Users{"); sb.append("id=").append(id); sb.append(", name='").append(name).append('\''); sb.append(", age=").append(age); sb.append(", address='").append(address).append('\''); sb.append(", roles=").append(roles); sb.append('}'); return sb.toString(); } } 
import org.springframework.data.jpa.repository.JpaRepository; import com.bjsxt.pojo.Users; / * 参数一 T :当前需要映射的实体 * 参数二 ID :当前映射的实体中的OID的类型 * */ public interface UsersRepository extends JpaRepository 
  
    { } 
  
import com.bjsxt.pojo.Users; import org.springframework.data.repository.Repository; import java.util.List; / * Repository接口方法名称命名查询 * */ public interface UsersRepositoryByName extends Repository 
  
    { //方法名称必须要遵循驼峰式命名规则,findBy(关键字)+属性名称(首字母大写)+查询条件(首字母大写) List 
   
     findByName(String name); List 
    
      findByNameAndAge(String name,Integer age); List 
     
       findByNameLike(String name); } 
      
     
    
  
/ * Repository */ @Test public void UsersRepositoryByName(){ List 
  
    list=this.usersRepositoryByName.findByName("张三"); for (Users users:list){ System.out.println(users); } } @Test public void findByNameAndAge(){ List 
   
     list=this.usersRepositoryByName.findByNameAndAge("张三",20); for (Users users:list){ System.out.println(users); } } @Test public void findByNameLike() { List 
    
      list = this.usersRepositoryByName.findByNameLike("张%"); for (Users users : list) { System.out.println(users); } } 
     
    
  
import com.bjsxt.pojo.Users; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import java.util.List; / * 〈一句话功能简述〉
* Repository @Query * * @author admin * @create 2019/5/22 * @since 1.0.0 */ public interface UsersRepositoryQueryAnnotation extends JpaRepository { @Query("from Users where name = ?") List queryByNameUseHQL(String name); @Query(value = "select * from t_user where name=?",nativeQuery = true) List queryByNameUseSQL(String name); @Query("update Users set name=? where id=?") @Modifying //需要执行一个更新操作 void updateUsersNameById(String name,Integer id); }

 / * Repository--@Query测试 */ @Test public void testQueryByNameUseSQL() { List 
  
    list = this.usersRepositoryQueryAnnotation.queryByNameUseSQL("张三"); for (Users users : list) { System.out.println(users); } } / * Repository--@Query测试 */ @Test @Transactional //@Transactional与@Test 一起使用时 事务是自动回滚的。 @Rollback(false) //取消自动回滚 public void testUpdateUsersNameById() { this.usersRepositoryQueryAnnotation.updateUsersNameById("张三三", 1); } 
  
import com.bjsxt.pojo.Users; import org.springframework.data.repository.CrudRepository; public interface UsersRepositoryCrudRepository extends CrudRepository 
  
    { } 
  
@Test public void testCrudRepositorySave() { Users users=new Users(); users.setName("青衫"); users.setAge(30); users.setAddress("湖南怀化"); this.usersRepositoryCrudRepository.save(users); } @Test public void testCrudRepositoryUpdate() { Users users=new Users(); users.setId(4); users.setName("青"); users.setAge(18); users.setAddress("怀化"); this.usersRepositoryCrudRepository.save(users); } @Test public void testCrudRepositoryFindOne() { Users users=this.usersRepositoryCrudRepository.findOne(4); System.out.println(users); } @Test public void testCrudRepositoryFindAll() { List 
  
    list= (List 
   
     ) this.usersRepositoryCrudRepository.findAll(); for (Users user:list){ System.out.println(user); } } @Test public void testCrudRepositoryDeleteById() { this.usersRepositoryCrudRepository.delete(4); } 
    
  
import com.bjsxt.pojo.Users; import org.springframework.data.repository.PagingAndSortingRepository; public interface UsersRepositoryPagingAndSorting extends PagingAndSortingRepository 
  
    { } 
  
@Test public void testPagingAndSortingRepositorySort() { //Order 定义了排序规则 Sort.Order order=new Sort.Order(Sort.Direction.DESC,"id"); //Sort对象封装了排序规则 Sort sort=new Sort(order); List 
  
    list= (List 
   
     ) this.usersRepositoryPagingAndSorting.findAll(sort); for (Users users:list){ System.out.println(users); } } @Test public void testPagingAndSortingRepositoryPaging() { //Pageable:封装了分页的参数,当前页,煤业显示的条数。注意:它的当前页是从0开始 //PageRequest(page,size):page表示当前页,size表示每页显示多少条 Pageable pageable=new PageRequest(1,2); Page 
    
      page=this.usersRepositoryPagingAndSorting.findAll(pageable); System.out.println("数据的总条数:"+page.getTotalElements()); System.out.println("总页数:"+page.getTotalPages()); List 
     
       list=page.getContent(); for (Users users:list){ System.out.println(users); } } @Test public void testPagingAndSortingRepositorySortAndPaging() { Sort sort=new Sort(new Sort.Order(Sort.Direction.DESC,"id")); Pageable pageable=new PageRequest(0,2,sort); Page 
      
        page=this.usersRepositoryPagingAndSorting.findAll(pageable); System.out.println("数据的总条数:"+page.getTotalElements()); System.out.println("总页数:"+page.getTotalPages()); List 
       
         list=page.getContent(); for (Users users:list){ System.out.println(users); } } 
        
       
      
     
    
  
/ * 参数一 T :当前需要映射的实体 * 参数二 ID :当前映射的实体中的OID的类型 * */ public interface UsersRepository extends JpaRepository 
  
    { } 
  
/ * JpaRepository 排序测试 */ @Test public void testJpaRepositorySort() { //Order 定义了排序规则 Sort.Order order=new Sort.Order(Sort.Direction.DESC,"id"); //Sort对象封装了排序规则 Sort sort=new Sort(order); List 
  
    list= this.usersRepository.findAll(sort); for (Users users:list){ System.out.println(users); } } 
  
import com.bjsxt.pojo.Users; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; / * 〈一句话功能简述〉
* JpaSpecificationExecutor * * @author admin * @create 2019/5/23 * @since 1.0.0 */ public interface UserRepositorySpecification extends JpaRepository ,JpaSpecificationExecutor { }

/ * JpaSpecificationExecutor 单条件查询 */ @Test public void testJpaSpecificationExecutor1() { / * Specification:用于封装查查询条件 */ Specification 
  
    spec=new Specification 
   
     () { //Predicate:封装了单个查询条件 / * @param root 对查询对象属性的封装 * @param criteriaQuery 封装了我们要执行的查询中的各个部分的信息,select from order * @param criteriaBuilder 查询条件的构造器 * @return */ @Override public Predicate toPredicate(Root 
    
      root, CriteriaQuery 
      criteriaQuery, CriteriaBuilder criteriaBuilder) { //where name="张三" / * 参数一:查询的属性 * 参数二:条件的值 */ Predicate predicate=criteriaBuilder.equal(root.get("name"),"张三"); return predicate; } }; List 
     
       list=this.userRepositorySpecification.findAll(spec); for (Users users:list){ System.out.println(users); } } / * JpaSpecificationExecutor 多条件查询方式一 */ @Test public void testJpaSpecificationExecutor2() { / * Specification:用于封装查查询条件 */ Specification 
      
        spec=new Specification 
       
         () { //Predicate:封装了单个查询条件 / * @param root 对查询对象属性的封装 * @param criteriaQuery 封装了我们要执行的查询中的各个部分的信息,select from order * @param criteriaBuilder 查询条件的构造器 * @return */ @Override public Predicate toPredicate(Root 
        
          root, CriteriaQuery 
          criteriaQuery, CriteriaBuilder criteriaBuilder) { //where name="张三" and age=20 / * 参数一:查询的属性 * 参数二:条件的值 */ List 
         
           list=new ArrayList<>(); list.add(criteriaBuilder.equal(root.get("name"),"张三")); list.add(criteriaBuilder.equal(root.get("age"),20)); Predicate[] arr=new Predicate[list.size()]; return criteriaBuilder.and(list.toArray(arr)); } }; List 
          
            list=this.userRepositorySpecification.findAll(spec); for (Users users:list){ System.out.println(users); } } / * JpaSpecificationExecutor 多条件查询方式二 */ @Test public void testJpaSpecificationExecutor3() { / * Specification:用于封装查查询条件 */ Specification 
           
             spec=new Specification 
            
              () { //Predicate:封装了单个查询条件 / * @param root 对查询对象属性的封装 * @param criteriaQuery 封装了我们要执行的查询中的各个部分的信息,select from order * @param criteriaBuilder 查询条件的构造器 * @return */ @Override public Predicate toPredicate(Root 
             
               root, CriteriaQuery 
               criteriaQuery, CriteriaBuilder criteriaBuilder) { //where name="张三" and age=20 / * 参数一:查询的属性 * 参数二:条件的值 */ /*List 
              
                list=new ArrayList<>(); list.add(criteriaBuilder.equal(root.get("name"),"张三")); list.add(criteriaBuilder.equal(root.get("age"),20)); Predicate[] arr=new Predicate[list.size()];*/ //(name='张三' and age=20) or id=2 return criteriaBuilder.or(criteriaBuilder.and(criteriaBuilder.equal(root.get("name"),"张三"),criteriaBuilder.equal(root.get("age"),20)),criteriaBuilder.equal(root.get("id"),1)); } }; Sort sort=new Sort(new Sort.Order(Sort.Direction.DESC,"id")); List 
               
                 list=this.userRepositorySpecification.findAll(spec,sort); for (Users users:list){ System.out.println(users); } } 
                
               
              
             
            
           
          
         
        
       
      
     
    
  
import javax.persistence.*; import java.util.HashSet; import java.util.Set; / * 〈一句话功能简述〉
* 〈〉 * * @author admin * @create 2019/5/23 * @since 1.0.0 */ @Entity @Table(name = "t_roles") public class Roles { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "role_id") private Integer roleId; @Column(name = "role_name") private String roleName; @OneToMany(mappedBy = "roles") private Set users=new HashSet<>(); public Integer getRoleId() { return roleId; } public void setRoleId(Integer roleId) { this.roleId = roleId; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; } }

 

package com.bjsxt.pojo; import javax.persistence.*; @Entity @Table(name="t_users") public class Users { @Id //主键id @GeneratedValue(strategy=GenerationType.IDENTITY)//主键生成策略 @Column(name="id") private Integer id; @Column(name="name") private String name; @Column(name="age") private Integer age; @Column(name="address") private String address; @ManyToOne(cascade = CascadeType.PERSIST) //表示多方 @JoinColumn(name ="role_id") //维护一个外键,外键在Users一侧 private Roles roles; public Roles getRoles() { return roles; } public void setRoles(Roles roles) { this.roles = roles; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { final StringBuffer sb = new StringBuffer("Users{"); sb.append("id=").append(id); sb.append(", name='").append(name).append('\''); sb.append(", age=").append(age); sb.append(", address='").append(address).append('\''); sb.append(", roles=").append(roles); sb.append('}'); return sb.toString(); } } 
/ * 参数一 T :当前需要映射的实体 * 参数二 ID :当前映射的实体中的OID的类型 * */ public interface UsersRepository extends JpaRepository 
  
    { } 
  
/ * Copyright (C), 2015-2019, XXX有限公司 * FileName: ManyToManyTest * Author: admin * Date: 2019/5/23 14:19 * Description: * History: * 
   
    
  
/ * Copyright (C), 2015-2019, XXX有限公司 * FileName: Menus * Author: admin * Date: 2019/5/23 14:06 * Description: * History: * 
   
    
  

 

/ * Copyright (C), 2015-2019, XXX有限公司 * FileName: Roles * Author: admin * Date: 2019/5/23 11:02 * Description: * History: * 
   
    
  
/ * Copyright (C), 2015-2019, XXX有限公司 * FileName: RolesRepository * Author: admin * Date: 2019/5/23 14:21 * Description: * History: * 
   
    
  
/ * Copyright (C), 2015-2019, XXX有限公司 * FileName: ManyToManyTest * Author: admin * Date: 2019/5/23 14:19 * Description: * History: * 
   
    
  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199422.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午1:01
下一篇 2026年3月20日 下午1:01


相关推荐

  • oracle游标的使用详解_oracle游标失效

    oracle游标的使用详解_oracle游标失效1、游标的概念游标(CURSOR):游标是把从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作。2、游标的作用游标是用来处理使用SELECT语句从数据库中检索到的多行记录的工具。借助于游标的功能,数据库应用程序可以对一组记录逐条进行处理,每次处理一行。3、游标的类型…

    2025年7月27日
    4
  • k8s pod同步时区

    k8s pod同步时区

    2021年5月15日
    169
  • 什么是exploit

    什么是exploit   exploit字面上的意思是“开拓、开发”,而在激活成功教程圈子里面,公认的概念可能是“漏洞及其利用”。通俗的说,exploit就是利用一切可以利用的工具、采用一切可以采用的方法、找到一切可以找到的漏洞,并且通过对漏洞资料的分析研究,从而达到获取网站用户资料文档、添加自定义用户、甚至侵入网站获得管理员权限控制整个网站的最终目的。对于cracker来说,能够得到密码档或者添加用户就足够了。而对于h

    2025年7月16日
    11
  • ubuntu如何更新_ubuntu更新软件包列表命令

    ubuntu如何更新_ubuntu更新软件包列表命令ubuntu怎么更新?ubuntu更新命令及方法安装Ubuntu系统后,第一件事就是更新系统源。由于系统安装的默认源地址在英国,作为Ubuntu的主源,国内连接速度非常慢,所以我们要将它换成就近的

    2022年8月2日
    18
  • 分布式+JVM+多线程+spring+微服务+面试(文末PDF免费获取)

    分布式+JVM+多线程+spring+微服务+面试(文末PDF免费获取)

    2020年11月13日
    178
  • 重庆python编程培训班[通俗易懂]

    重庆python编程培训班[通俗易懂]浙江:八年级将新增Python课程内容重磅消息!浙江今年9月份开始的新学期,三到九年级信息技术课将同步替换新器材!其中,八年级将新增Python课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材规划五六年级开始接触。互联网大省——浙江领跑全国编程教育!今年9月新学期,三-九年级信息技术课将同步替换新器材。最新的教材目录显示,从小学三年级一直到九年级,内容都有不同程度的调整。三年级新增了“信息社会”和“网络生活”,四上新增了“走进多媒体”、“

    2022年5月16日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号