SpringDataJPA的集成

5.集成SpringDataJPA 1.JPA介绍及接口继承关系 JPA是Sun提出的JAVA持久化规范,就是只制定规则,不提供实现,而JPA主要实现由Hibernate,EclipseLink、OpenJPA等实现产品,SpringDataJPA的核心接口是Repository,其是所有Repository的父类,该类下没有任何接口,就是个空类,不过他有几个子类 CrudRepository(基本CRUD接口方法) <... 阅读详情

1.SpringDataJpa

1.1.SpringDataJpa的概念

它是JPA规范的再次封装抽象,底层使用了Hibernate的JPA技术实现,引用JPQL的查询语句 ,属于JavaSpring的生成体系中的一部分。SpringDataJpa上手简单,使用起来方便,开发效率高,使开发人员不需要关心和配置更多的东西。并且SpringDataJpa对对象的支持非常好,还十分的灵活。

1.2.SpringDataJpa的结构

JavaSprangDataJPA结构图

通过Intellij Idea,打开SimpleJpaRepository.java文件,单击鼠标右键show diagrams,就可以以图表的形式打开与查询类的关系层次图)。图中的实线表示继承(extends),虚线表示的是实现(implement)

2.SpringDataJPA集成项目的创建

 2.1 创建maven结构项目并引入所需要的包

 2.2 配置applicationContext.xml文件

                2.2.1   导入资源文件

                2.2.2   配置DataSource

                2.2.3   配置entityManagerFactory

                2.2.4   开启事物扫描支持

                2.2.5   SpringDataJpa的扫描

         2.3 准备一个用来存放类的Domain包

              2.3.1  父类:BaseDomain

package cn.itsource.pss.domain;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
// 在JPA里面就表示是父类,不持久化到表
public class BaseDomain {
    @Id
    @GeneratedValue
    protected Long id;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}

             2.3.2  子类:Employee

@Entity
@Table(name="employee")
public class Employee extends  BaseDomain {

    private String username;
    private String password;
    private String email; 
    private Integer age;
   //省略getter,setter与toString(注意:Alt+Insert可以自动生成)
}

2.4 完成Repository的功能

package cn.itsource.pss.repository;

import cn.itsource.pss.domain.Employee;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * 必需继续JpaRepository<1v,2v>
 *     1v:代表你要操作的是哪一个domain对象
 *     2v:这个domain对象的主键的类型
 */
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}

 2.5 测试集成是否成功

package cn.itsource.repository;

import cn.itsource.pss.domain.Employee;
...
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class EmployeeRepositoryTest  {
    @Autowired
    private EmployeeRepository employeeRepository;
    @Test
    public void testFind() throws Exception{
        List<Employee> emps = employeeRepository.findAll();
        for (Employee emp :emps){
            System.out.println(emp);
        }
    }
}

3.JpaRepository的基本功能

3.1普通的CRUD

//获取所有数据
@Test
public void testFindAll() throws Exception{
    List<Employee> emps = employeeRepository.findAll();
    for (Employee emp :emps){
        System.out.println(emp);
    }
}
//根据id到一条数据
@Test
public void testFindOne() throws Exception{
    Employee employee = employeeRepository.findOne(1L);
    System.out.println(employee);
}

//添加与修改都使用save(主要看对象有没有id)
@Test
public void testSave() throws Exception{
    Employee employee = new Employee();
    //employee.setId(103L);
    employee.setUsername("张三");
    employee.setPassword("1234");
    employee.setEmail("zhangsha@163.com");
    employeeRepository.save(employee);
}
//删除数据
@Test
public void testDelete() throws Exception{
    employeeRepository.delete(103L);
}
//得到总条数
@Test
public void testCount(){
    System.out.println(employeeRepository.count());
}

3.2分页排序功能

//进行分页功能
@Test
public void testPage() {
    //1.需要先创建一个page对象(注意:页数是从0开始计算【0就是第1页】)
    Pageable pageable = new PageRequest(0, 10);
    //2.进行查询
    Page<Employee> page = employeeRepository.findAll(pageable);
    System.out.println(page.getTotalElements()); //总条数
    System.out.println(page.getTotalPages()); //总页数
    System.out.println(page.getContent()); //当前页数据
    System.out.println(page.getNumber()); //第几页
    System.out.println(page.getNumberOfElements()); //当前页有多少个数据
    System.out.println(page.getSize()); //每页条数
}

//进行排序功能
@Test
public void testSort() {
    //排序 :第一个参数是排序的规则(DESC/ASC)  后面参数是排序的字符
    Sort sort = new Sort(Sort.Direction.DESC,"username");
    List<Employee> emps = employeeRepository.findAll(sort);
    for (Employee emp : emps) {
        System.out.println(emp);
    }
}

//分页与排序的集成
@Test
public void testPageAndSort() {
    //排序 :第一个参数是排序的规则(DESC/ASC)  后面参数是排序的字符
    Sort sort = new Sort(Sort.Direction.DESC,"username");
    Pageable pageable = new PageRequest(0, 10,sort);
    //2.进行查询
    Page<Employee> page = employeeRepository.findAll(pageable);
    for (Employee employee : page) {
        System.out.println(employee);
    }
}

3.3根据条件进行查询

按照规范创建查询方法,一般按照java驼峰式书写规范加一些特定关键字,例如我们想通过员工的名来获取到对应的员工的对象。

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    //根据名称模糊查询
    List<Employee> findByUsernameLike(String username);
    //根据名称进行查询
    List<Employee> findByUsername(String username);
}

这种方案看起来有意思,但是功能它都只针对简单的单表查询(而且如果条件太多,这个名称还是比较麻烦),如果遇到复杂的查询,还有方案就显得力不从心了。

3.4@Query注解查询

在Respository方法中一定要按照查询方法的命名规则,其实是比较麻烦的如果我们想不遵循 查询方法的命名规则,还可以使用@Query的方法进行查询。

只需要将@Query定义在Respository的方法之上即可。

例如:根据用户名和密码拿到相应的员工
根据参数顺序
@Query("select o from cn.itsource.pss.domain.Employee o where  o.username like ?1 and o.email like ?2")
List<Employee> query02(String username,String email);

根据参数名称
@Query("select o from cn.itsource.pss.domain.Employee o where  o.username like :username and o.email like :email")
List<Employee> query03(@Param("username") String username,@Param("email")  String email);

Query的注解注入非常灵活,在开发中也经常使用到(只是写JPQL/SQL有点麻烦)。

4.JpaSpecificationExecutor的认识

JpaSpecificationExecutor(JPA规则执行者)是JPA2.0提供的Criteria API的使用封装,可以用于动态生成Query来满足我们业务中的各种复杂场景。

Spring Data JPA为我们提供了JpaSpecificationExecutor接口,只要简单实现toPredicate方法就可以实现复杂的查询。

4.1单个条件的查询

@Test
public void testFind() {
    /**
*官方解释:
     * Root<T> root:代表了可以查询和操作的实体对象的根,
     *              可以通过它的 Path<Y> get(String attributeName); 这个方法拿到我们要操作的字段
     *              注意:只可以拿到对应的T的字段(Employee)
     * CriteriaQuery<?> query:代表一个specific的顶层查询对象
     *              包含查询的各个部分,比如select,from,where,group by ,order by 等
     *              简单理解 就是它提供 了查询ROOT的方法(where,select,having)
     * CriteriaBuilder cb:用来构建CriteriaQuery的构建器对象(相当于条件或者说条件组合)
     *              构造好后以Predicate的形式返回
     */
/**
* 非官方理解:
 * 查询的时候就需要给一个标准(规范)
 *  -》 根据规范(这个规范我们可以先简单理解为查询的条件)进行查询
 *
 *      Root:查询哪个表(定位到表和字段-> 用于拿到表中的字段)
 *            可以查询和操作的实体的根
 *              Root接口:代表Criteria查询的根对象,Criteria查询的查询根定义了实体类型,能为将来导航获得想要的结果,它与SQL查询中的FROM子句类似
 *             Root<Employee> 相当于 from Employee
 *             Root<Product> 相当于  from Product
 *      CriteriaQuery:查询哪些字段,排序是什么(主要是把多个查询的条件连系起来)
 *      CriteriaBuilder:字段之间是什么关系,如何生成一个查询条件,每一个查询条件都是什么方式
 *                      主要判断关系(和这个字段是相等,大于,小于like等)
 *      Predicate(Expression):单独每一条查询条件的详细描述 整个 where xxx=xx and yyy=yy ...
 */
    List<Employee> emps = employeeRepository.findAll(
            new Specification<Employee>() {
                @Override
                public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                    Path path = root.get("username");//拿到要做查询的字段
                    Predicate p = cb.like(path, "%1%");//like代表做模糊查询,后面就是它的条件值
                    return p;
                }
            }
    );
    for (Employee emp : emps) {
        System.out.println(emp);
    }
}

4.2多个条件查询

@Test
public void testFind02() {
    Specification spec = new Specification<Employee>() {
        @Override
        public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
            //加上第一个条件: username like '%1%'
            Path path1 = root.get("username");
            Predicate p1 = cb.like(path1, "%1%");
            //加上第二个条件: email like '%2%'
            Path path2 = root.get("email");
            Predicate p2 = cb.like(path2,"%2%");
            //加上第二个条件: age < 20
            Path path3 = root.get("age");
            Predicate p3 = cb.lt(path3, 20);
           //下面是加上or的条件的方案
           //Predicate p3 = cb.or(p1,p2);

            //把两个查询条件放到query对象中去(条件使用where)
            CriteriaQuery where = query.where(p1, p2, p3);
            //返回查询条件
            return where.getRestriction();
        }
    };

    List<Employee> emps = employeeRepository.findAll(spec);
    for (Employee emp : emps) {
        System.out.println(emp);
    }

}

4.3条件查询+分页排序

@Test
public void testFind03() {
    Specification spec = new Specification<Employee>() {
        @Override
        public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
            //加上条件: username like '%1%'
            Path path1 = root.get("username");
            Predicate p1 = cb.and(cb.like(path1, "%1%"));
            //把两个查询条件放到query对象中去(条件使用where)
            CriteriaQuery where = query.where(p1);
            //返回查询条件
            return where.getRestriction();
        }
    };

    //排序 :第一个参数是排序的规则(DESC/ASC)  后面参数是排序的字符
    Sort sort = new Sort(Sort.Direction.DESC,"username");
    Pageable pageable = new PageRequest(0, 10,sort);

    Page<Employee> page = employeeRepository.findAll(spec, pageable);
    for (Employee emp : page) {
        System.out.println(emp);
    }
}

JpaSpecificationExecutor功能也是非常强大的,可以让我们不写一句SQL即可完成相应的查询功能。在外面也很不少公司使用这种方法,然后直接可以进行功能的抽取。

不过这个方案在设计上理解不是很容易,而且代码还比较臃肿烦杂。

5.jpa-spec插件

这是一个动态生成Query功能的一个封装版,如果我们使用这个插件,在完成查询与分页的时候功能会简单不少。

基于Spring Data Jpa的动态查询库 https://github.com/wenhao/jpa-spec

5.1功能介绍

  1. 兼容Spring Data Jpa 和JPA2.1接口。
  2. Equal/NotEqual/Like/NotLike/In/NotIn支持可变参数, Equal/NotEqual 支持空(Null)值。
  3. 每个条件支持关联查询。
  4. 支持自定义条件查询。
  5. 条件构建器。
  6. 支持分页和排序。

5.2功能测试

      5.2.1单个条件查询

@Test
public void testSpecFind01() {
    Specification<Employee> spec = Specifications.<Employee>and().like("username", "%1%").build();
    List<Employee> emps = employeeRepository.findAll(spec);
    for (Employee emp : emps) {
        System.out.println(emp);
    }
}

     5.2.2多个条件查询

@Test
public void testSpecFind02() {
    Specification<Employee> spec = Specifications.<Employee>and().like("username", "%1%")
            .like("email","%2%").lt("age", 20).build();
    List<Employee> emps = employeeRepository.findAll(spec);
    for (Employee emp : emps) {
        System.out.println(emp);
    }
}

    5.2.3条件+排序分页功能

//条件集成+分页
@Test
public void testSpecFind03() {
    Specification<Employee> spec = Specifications.<Employee>and().like("username", "%1%").build();
    //排序 :第一个参数是排序的规则(DESC/ASC)  后面参数是排序的字符
    Sort sort = new Sort(Sort.Direction.DESC,"username");
    Pageable pageable = new PageRequest(0, 10,sort);

    Page<Employee> page = employeeRepository.findAll(spec, pageable);
    for (Employee emp : page) {
        System.out.println(emp);
    }
}

6.Query查询条件

6.1BaseQuery:公共的分页条件

                        父类BaseQuery,主要写分页内容,排序方法及定义获取查询条件的方法

package cn.itsource.pss.query;
/**
 * 公共的条件与规范
 */
public abstract class BaseQuery {

    //当前页(从1开始)
    private int currentPage = 1;
    //每页条数
    private int pageSize = 10;

    //排序方式 ASC/DESC
    private String orderByType ="ASC";
    //排序字段
    private String orderByName;

    public int getCurrentPage() {
        return currentPage;
    }
    /**
     * 专门准备的方法,因为前台用户传的是从第1页开始,而我们后台分页又是从0开的
     * @return
     */
    public int getJpaPage() {
        return currentPage - 1;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public String getOrderByType() {
        return orderByType;
    }

    public void setOrderByType(String orderByType) {
        this.orderByType = orderByType;
    }

    public String getOrderByName() {
        return orderByName;
    }

    public void setOrderByName(String orderByName) {
        this.orderByName = orderByName;
    }
}

6.2​​​​​​​EmployeeQuery:Employee特有的一些条件

                     子类EmployeeQuery,主要写对象上的字段及实现的父类的方法

package cn.itsource.pss.query;

public class EmployeeQuery extends BaseQuery {

    private String username;//姓名
    private String email;//邮件
    private Integer age;//年龄

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

6.3​​​​​​​功能测试

//根据Query对象进行查询
@Test
public void testSpecFindByQuery() {
    //创建模块一个Query对象
    EmployeeQuery baseQuery = new EmployeeQuery();
//下面的都是测试的条件,可以任何放开进行测试
    //baseQuery.setUsername("1");
    //baseQuery.setAge(20);
    //baseQuery.setEmail("2");
    //baseQuery.setOrderByName("username");
    //baseQuery.setOrderByType("DESC");
    //baseQuery.setCurrentPage(2);
    //baseQuery.setPageSize(5);

	//like(条件boolean值,字段,值)
    Specification<Employee> spec = Specifications.<Employee>and()
            .like(StringUtils.isNotBlank(baseQuery.getUsername()), "username","%"+baseQuery.getUsername()+"%")
            .like(StringUtils.isNotBlank(baseQuery.getEmail()), "email","%"+baseQuery.getEmail()+"%")
            .lt(baseQuery.getAge()!=null, "age",baseQuery.getAge())
            .build();


    //这里确定是否需要排序
    Sort sort = null;
    if(baseQuery.getOrderByName()!=null){
        Sort.Direction desc = "DESC".equals(baseQuery.getOrderByType())?Sort.Direction.DESC:Sort.Direction.ASC;
        sort = new Sort(desc,baseQuery.getOrderByName());
    }
    Pageable pageable = new PageRequest(baseQuery.getJpaPage(), baseQuery.getPageSize(),sort);

    Page<Employee> page = employeeRepository.findAll(spec, pageable);
    for (Employee emp : page) {
        System.out.println(emp);
    }
}

通过上面的功能测试,我们已经知道如果前台传数据过来,后面的查询应该怎么处理了。但是大家也应该发现了,除了创建Specification对象这一,分页排序的部分每次查询的代码都应该是一样的,所以我们现在需要做的就是把代码开始进行功能抽取。

6.4创建Specification的流程放到Query里

BaseQuery中添加抽象方法

public abstract class BaseQuery {
...
//拿到查询的条件对象(由子类实现)
	public abstract Specification createSpecification();
//拿到排序的数据
	public Sort createSort() {
    		Sort sort = null;
    		if (StringUtils.isNotBlank(orderByName)) {
        		Sort.Direction type=  "ASC".equals(orderByType.toUpperCase())? Sort.Direction.ASC:Sort.Direction.DESC;
       		 sort = new Sort(type,orderByName);
    		}
    		return sort;
	}
...
}

EmployeeQuery中实现相应方法
(以后每一个Query要做高级查询都写在这个位置)
public class EmployeeQuery extends BaseQuery {
    ...
@Override
	public Specification createSpecification() {
    	//根据条件把数据返回即可
   	return  Specifications.<Employee>and()
            .like(StringUtils.isNotBlank(username), "username","%"+username+"%")
            .like(StringUtils.isNotBlank(email), "email","%"+email+"%")
            .lt(age!=null, "age",age)
            .build();
	}
...
}

 

 

 

 

 

 

 

 

 

SpringMVC+Spring+Spring-Data-JPA整合-完整Demo 立即下载

相关推荐

java框架整合例子(spring、spring mvc、spring data jpa、hibernate)

java框架整合例子(spring、spring mvc、spring data jpa、hibernate)

Spring Data JPA 使用 SQLite

没有安装数据库,但想测试一下 spring data jpa 的功能,为了简单一点想找一个嵌入式的数据库。Java 里面有两个嵌入式数据库,H2 和 Hsqldb,但是这两个数据库我都没有现成好用客户端,不方便去随时查看数据的变化,于是就选择了 Sqlite。 网上有教程说怎么在什么 Spring JPA 里面使用SQllite这个数据库,但是都比讲比较复杂,还要自己实现一些东西,这种方式可以参考...

孙亖的专栏 5114

SAP FI模块实操:用F-28和F-32搞定客户回款与手动清账,别再让未清项报表一团糟

本文详细解析了SAP FI模块中F-28和F-32事务代码在客户回款与手动清账中的实操应用,帮助财务人员高效管理未清项报表。通过标准清账六步法和手动清账实战技巧,解决因操作不规范导致的账务混乱问题,提升应收账款管理效率。

weixin_30292843的博客 455

集成 Spring Data JPA

spring data jpa

一个想交朋友的陌生人 1124

【ELF2学习板】基于OpenMP与RK3588多核架构优化FFTW的并行计算效率

本文详细介绍了如何在ELF2学习板上利用OpenMP与RK3588多核架构优化FFTW的并行计算效率。通过编译支持OpenMP的FFTW库、合理设置线程绑定与调度策略,以及内存访问优化等技巧,显著提升了FFT计算的性能。实测数据显示,多核并行优化可使4096点FFT计算速度提升一倍以上,特别适合信号处理、图像分析等高性能计算场景。

weixin_30352645的博客 608

一文看懂分布式存储架构

目录一、集中存储结构二、分布式存储1 、分布式存储的兴起2 、分布式存储的重要性3 、分布式存储的种类和比较三、分布式理论浅析1 、一致性和可用性2 、数据分布3 、复制4 、分布式协议5、跨机房部署四、分布式文件系统1、 Google 文件系统( GFS )2、 Taobao 文件系统( TFS )3、 Fackbook Haystack 文件系统4、 CDN 内容分发网络五、分布式键值系统1、 Amazon Dynamo2、 Taobao Tiar3、 ETCD4 、产品选型比较( Etcd , Zoo

weixin_70730532的博客 2万+

SpringBoot集成JPA及基本使用

本篇从JDBC、ORM、JPA、Spring Data JPA说起,分享了SpringBoot集成JPA的实现、Repository的命名规则以及InvalidDefinitionException异常的处理

JingAi_jia917的博客 5557

数据库存储分层架构搭建:热数据 SSD 存储、冷数据归档的配置操作及性能对比分析

本文探讨了数据库存储分层架构的优化策略。随着数据量激增,传统单一存储模式面临成本与性能的平衡难题。文章提出通过热数据SSD加速和冷数据归档降本的分层方案,系统分析了热数据SSD配置、冷数据归档操作及性能对比。分层架构基于数据活跃度匹配存储介质,使热数据保持高性能访问,冷数据低成本存储,实现总体成本降低60%-80%的同时确保核心查询性能。文中详细介绍了硬件选型、数据库配置、数据迁移等技术细节,并强调了动态调整分层策略的重要性,为构建高效经济的数据库存储体系提供了完整解决方案。

jingjing45678的博客 1292

SpringBoot-SpringData-JPA集成

介绍 SpringDataJPA 的使用,包括:简介、SpringBoot集成、项目结构、框架特性、单元测试等;

BraveWangDev 1万+

MAX96717实战:如何选择Host-to-Peripheral和Pass-Through I2C模式?附配置代码

本文深入解析MAX96717芯片的两种关键I2C模式:Host-to-Peripheral与Pass-Through。通过对比其核心差异、硬件连接考量及软件配置代码,为嵌入式开发者提供了清晰的模式选择策略与实战指南,帮助优化系统设计并避免常见通信故障。

weixin_29190573的博客 463

Flutter SDK的删除与重装:一步步教你如何轻松搞定

在Flutter开发过程中,我们可能会遇到一些需要重新安装Flutter SDK的情况,例如升级Flutter版本、解决依赖冲突等。本文将详细介绍如何删除并重新安装Flutter SDK,让你轻松应对各种问题。

理论都是虚的,代码才是王道。 2247

SpringBoot | 第三十章:Spring-data-jpa的集成和使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34143774的博客 194

CAM350常用快捷键

CAM350快捷键 CAM350常用快捷键

bhxc809751502的博客 3063

MyBatis与SpringDataJPA集成

1.背景介绍 MyBatis与SpringDataJPA集成 1. 背景介绍 MyBatis和SpringDataJPA都是Java应用程序中的持久层框架,它们各自具有不同的优势和特点。MyBatis是一个基于XML的持久层框架,它可以简化数据库操作,提高开发效率。SpringDataJPA是一个基于Java Persistence API的持久层框架,它可以简化对象关系映射(ORM)和数据...

AI天才研究院 950

CH7034B显示模块原理图设计,已量产

显示桥接板的价值,不在于简单把 RGB 排线换成另一种接口,而在于能否把并行视频、时钟、显示控制、模拟输出和辅助配置同时组织成稳定系统。当前这张 CH7034B 原理图就是这种思路:U3 CH7034B 作为核心桥接芯片,输入侧是 LCD_R0~R7、LCD_G0~G7、LCD_B0~B7、LCD_DE、LCD_HSYNC、LCD_VSYNC、LCD_CLK 与 LCD_BL,输出侧则通过 DAC0~DAC2 和 DDC_SC/DDC_SD 形成模拟显示接口边界。

不脱发的程序猿 165

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

为SpringDataJpa集成QueryObject模式

接触过旧版本的读者,可以跳过,直接看下一章“spring data jpa 集成”创建 JpaUserSingleQueryService,继承自}}其中,构造参数 JpaUserRepository 为 spring data jpa 为我们生成的 Proxy;BaseSpecificationQueryObjectRepository 为我们提供基本的查询能力;首先,需要对 SimpleJpaRepository 实现进行功能扩展,并让框架实现自定义的 Repository 实现。

javajavajava 370

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringDataJpa集成

一.SpringDataJpa扩展 对SpringDataJpa的原来功能进行了相应的增加(代码是拷备) 1.BaseRepository 接口 @NoRepositoryBean:让SpringdataJpa不要自动为它生成子类 @NoRepositoryBean public interface BaseRepository&lt;T, ID extends Serializable&...

qq_31914717的博客 285

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

集成SpringDataJpa

一.什么是SpringDataJpa 它是Spring的一个子框架 集成Jpa,让咱们操作数据库变得更加的简单 二.项目导包 能够看懂这里导入了哪些包 也可以理解这些包是做什么的 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns...

一步一脚印的博客 436

集成SpringDataJpa框架01

1、集成Spring+SpringDataJpa 创建一个Maven项目,然侯开始配置项目,开始搭建框架 1.1引入项目中所需要的所有包(pom.xml) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt...

weixin_44858201的博客 251

智能商贸-day1-集成SpringDataJpa

搭建项目集成Spring+SpringDataJpa 配置pom.xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding...

chousuojing0127的博客 268

数据访问:SpringDataJPA和Hibernate的集成

1.背景介绍 1. 背景介绍 在现代软件开发中,数据访问是一个非常重要的环节。它涉及到与数据库进行交互,以便读取和写入数据。在Java领域,Spring Data JPA和Hibernate是两个非常流行的数据访问框架。Spring Data JPA是基于Java Persistence API的一种简化的数据访问方法,而Hibernate是一个基于Java的对象关系映射(ORM)框架,用于将...

AI天才研究院 376

springBoot集成springDataJpa

springboot集成spring data jpa只需两步: 第一步:导入maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> 第二...

盖世小可爱的博客 461

集成Spring+SpringDataJpa 01

集成Spring+SpringDataJpa 引入项目中所需要的所有包(pom.xml) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins...

wuguobang_Niko的博客 202

SpringBoot2.x 集成 SpringDataJpa

SpringDataJpa简介:Spring Data JPA是Spring Data家族的一员,可以轻松实现基于JPA的存储库。该模块处理对基于JPA的数据访问层的增强支持。这使得构建使用数据访问技术的Spring应用程序变得更加容易。 在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。必须编写太多样板代码来执行简单查询以及执行分页和审计。Spring Data JPA旨在通过减少实际需要的工作量来显著改善数据访问层的实现。作为开发人员,你编写repository接口,包括自定义查询器方法,Spr

RtxTitanV的博客 2287

项目day01-SpringDataJpa集成

一.什么是SpringDataJpa 它是Spring的一个子框架 集成Jpa,让咱们操作数据库变得更加的简单 二.项目导包 能够看懂这里导入了哪些包 也可以理解这些包是做什么的 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:...

a462772398的博客 158
上一篇: Java跨平台
下一篇: SpringMvc的集成&NoSession
WinerCode
博客等级 码龄8年 3粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值