zoukankan      html  css  js  c++  java
  • JPA学习笔记

    JPA

    ORM思想及JPA规范

    ORM思想

    JDBC对数据库的操作

    实体类

    public class User {
        private Integer userId;
        private String userName;
        private String address;
    }
    

    数据库表

    CREATE TABLE t_user(
    	id 			INT 	AUTO_INCREMENT,
        username 	VARCHAR,
        address		VARCHAR
    )
    

    JDBC操作步骤

    1. 准备语句

      String sql = "insert into t_user(username, address) values(?, ?)";

    2. 获取连接

      Connection con = DriverManger.getConnection(username, password, url);

    3. 创建statment

      PreparedStatment pst = con.PreparedStatment(sql);

    4. 对占位符进行赋值

      pst.setString(1, user.getUserName);

      pst.setString(2, user.getAddress);

    5. 发送查询

      pst.executeUpdate();

    JDBC操作繁杂,如果实体类和数据库的表,实体类的属性和表的字段之间建立关系的话,sql的拼接就可以自动完成了。

    ORM思想

    实体类和数据库的表、实体类的属性和表的字段之间建立关系就实现了ORM思想

    ORM思想:操作实体类就相当于操作数据表

    Hibernate框架

    实现了ORM思想的框架比较多,比较有代表性的有Mybatis,Hibernate

    Hibernate是一个开源的关系映射框架,他对JDBC进行了非常轻量级的对象封装,将POJO与数据库表建立映射关系,是一个全自动的ORM框架。它可以自动生成SQL语句,自动执行

    JPA规范

    出现顺序:ORM思想->Hibernate框架->JPA规范

    JPA规范内部是由接口和抽象类组成的,其思想跟JDBC规范是一样的

    image-20210730125912321

    image-20210730130211482

    JPA基本使用

    环境搭建

    Maven坐标

    lombok
    log4j
    mysqlDriver
    junit
    hibernate
    c3p0  数据库连接池
    

    JPA核心配置文件

    配置到类路径的META-INF文件夹下,命名为persistence.xml,约束模板可以在idea中找到

    image-20210803123207894

    image-20210803123320429

    客户实体类&映射关系

    @Entity
    @Table(name = "cst_customer")
    public class Customer {
        @Id  // 声明主键
        @GeneratedValue(strategy = GenerationType.IDENTITY)  // 主键生成策略
        @olumn(name = "cst_id")
        private Long custId;
        @olumn(name = "cst_address")
        private String custAddress;
        @olumn(name = "cst_industry")
        private String custIndustry;
        @olumn(name = "cst_level")
        private String custLevel;
        @olumn(name = "cst_name")
        private String custName;
        @olumn(name = "cst_phone")
        private String custPhone;
        @olumn(name = "cst_source")
        private String custSource;
        
        //getter&setter
    }
    

    CRUD基本操作

    使用的JPA规范,底层实现是Hibernate

    image-20210803124111615

    setCustIndustry

    保存:persist

    更新:merge

    删除:remove

    查找:find/getRefrence

    立即加载vs延迟加载

    JPQL的使用

    JPA提供的插叙语句,跟sql语句很相似,只不过JPQL是面向对象的,它查询的是对象及对象的属性

    sql:查询的是表和表中的字段

    jpql:查询的是实体类和实体类中的属性

    image-20210803125046900

    查询全部:

    sql:SELECT * FROM cst_customer

    jpql:from com.yaohl0911.customer

    分页查询:

    统计查询:

    条件查询:

    排序查询:

    Spring Data JPA

    Spring Data JPA概述

    Spring对JPA规范的封装

    image-20210803125724086

    Spring Data JPA入门操作

    环境搭建

    maven坐标

    spring配置

    实体类&映射关系

    @Entity
    @Table(name = "cst_customer")
    public class Customer {
        @Id  // 声明主键
        @GeneratedValue(strategy = GenerationType.IDENTITY)  // 主键生成策略
        @olumn(name = "cst_id")
        private Long custId;
        @olumn(name = "cst_address")
        private String custAddress;
        @olumn(name = "cst_industry")
        private String custIndustry;
        @olumn(name = "cst_level")
        private String custLevel;
        @olumn(name = "cst_name")
        private String custName;
        @olumn(name = "cst_phone")
        private String custPhone;
        @olumn(name = "cst_source")
        private String custSource;
        
        //getter&setter
    }
    

    DAO层接口

    只需要编写接口,不需要实现

    需要继承两个接口:JpaRepository,JpaSpecificationExecutor(是不是过时了?),且提供对应的泛型

    image-20210803130705220

    image-20210803130922576

    findOne/getOne

    getOne需要加上事务的支持@Transactional

    findOne用em.find实现,立即加载

    getOne用em.getRefance实现,延迟加载(返回动态代理对象,什么时候用什么时候查询)

    save

    update

    delete

    findAll

    count

    exists

    Spring Data JPA运行原理

    JdkDynamicAopProxy
    
    SimpleJpaRepository
    

    image-20210803132158759

    1. 通过jdkDynamicAopProxy的invoke方法创建了一个动态代理对象,即SimpleJpaRepository
    2. SimpleJpaRepository当中封装了JPA的操作(借助JPA的ap完成数据库的CRUD)
    3. 通过Hibernate完成数据库的操作(封装了JDBC)

    JPQL实现方式

    Spring Data JPA复杂查询

    借助接口中定义好的方法完成查询

    多表操作

    复杂查询

  • 相关阅读:
    WINCE串口驱动MDD层代码简单分析
    WinCE下,快速编译驱动及BSP
    如何使用ulink2烧写二进制文件
    PB6.0 快速编译单个驱动技巧
    WinCE5.0和WinCE6.0下,编译选项介绍
    WINCE串口驱动PDD层代码简单分析
    浅谈WinCE平台USB摄像头驱动开发流程
    WinCE中,环境变量的添加,删除和查询
    WinCE API
    WINCE 6.0安装顺序说明
  • 原文地址:https://www.cnblogs.com/yaohl0911/p/15108024.html
Copyright © 2011-2022 走看看