• JPA第一个demo


    1.认识:持久层框架,操作数据库的框架,相当于是JDBC项目中的dao层
             对数据库的表进行一个映射

    2.jpa是规范,hibernate是jpa是实现
    3.jdbc和JPA的优缺点

             JDBC:转换麻烦,对对象进行封装然后在进行拆分,移植性效果差,不存在缓存,面向SQL操作
    JPA:面向对象操作,操做对象,数据库移植性强,只用重新配置方言就行,存在缓存,一级缓存,二级缓存,查询缓存,不用书写 SQL语句,直接调用方法就是对数据的操作,JPA对性能的优化不是很高。

    4.第一个jpa项目
    CRUD:
       create建表策略:先删除表名,在创建新表

       update建表策略:先判断数据库是否有该表,没有就直接插入数据,如果没有该表就先创建该表,再向该表插入数据

    5.SpringDataJPA的几个核心API
    Persistence:用于创建EntityManagerFactory,根据传入的Persistence Unit名称来创建          对应的EntityManagerFactory。
      EntityManagerFactory(线程安全的单例):负责创建EntityManager对象,负责维护数据的二级缓存,重量级对象:配置了太多东西,数据库连接池,二级缓存,预定义的JPQL语句,所有的实体和关系

    EntityManager(线程不安全):实体管理对象,提供与持久化相关的操作,有类似Hibernate的Session一级缓存。如果不清空一级缓存的话,获取到的对象会是同一个对象,如果清空了一级缓存,获取到的对象会是不同的对象

    EntityTransaction:事务管理对象,只能控制相同一个数据库不同表的事务管理,大多数情况都使用这种

    javax.transaction.Transaction  JTA事务,处理不同数据库不同表的事务管理

    Tomcat默认不支持JTA事务(不过可以通过添加插件来解决),或者需要用JavaEE服务器:如jboss,weblogic服务器

    6.单表映射的配置细节

      要求:
    private Long id; //要求:主键,使用数据库的自动生成策略

      private String name;  //要求:varchar(20),数据库名称为username,不能为空,唯一

      private String password;

      private Integer age = 25; //要求:默认值是25,在插入数据时不允许覆盖(添加数据时不操作该字段)

      private Boolean sex;// 数据库没有布尔类型,bit对象

      private BigDecimal salary;// 19,2 工资不能为负数 check(salary>0.0)

      private Date createTime;//包含年月日时分秒,不允许修改

      private Date birthday;//包含年月日

      private Date time;//包含时分秒

      private String text;//这是一个大文本

      private String temp;//这一个字段不要同步到数据库

      持久类映射的配置

      @Entity

    public class Employee {

      @Id

      @GeneratedValue(strategy = GenerationType.AUTO)

      private Long id;

      @Column(length = 20, nullable = false, unique = true)

      private String name;

      private String password;

      // default="25"还必须同时配置一个属性insertable ="false",表示不出现在insert语句

      @Column(insertable = false, columnDefinition = "int(11) default '25'")

      private Integer age = 25;

      private Boolean sex;// 数据库没有布尔类型,bit对象

      @Column(columnDefinition = "decimal(19,2) check(salary>0.0)")

      private BigDecimal salary;// 19,2

      // update=false:一经保存就不能修改属性:身份证号码,创建时间

      // 如果填错了,客户不能改,上传身份证照片,找客服,客服验证:程序员留后台hql:

      // update Employee set idcart=? where id=?

      // 创建时间:年月日时分秒

      @Column(updatable = false)

      @Temporal(TemporalType.TIMESTAMP)

      private Date createTime;

      // 生日:年月日

      @Temporal(TemporalType.DATE)

      private Date birthday;

      // 开会时间:时分秒

      @Temporal(TemporalType.TIME)

      private Date time;

      // 大文本

      @Lob

      private String text;

      // 如果name属性希望不持久化数据库

      // @Transient // 临时属性

      private String temp;

  • 相关阅读:
    js判断是否第一次访问跳转
    dt系统中tag如何使用like与%来进行模糊查询
    DT图库列表修改内容标题字数
    第二周冲刺第四天个人博客
    04《梦断代码》阅读笔记01
    第二周冲刺第三天个人博客
    03《构建之法》阅读笔记03
    第二周冲刺第二天个人博客
    02《构建之法》阅读笔记02
    第二周冲刺第一天个人博客
  • 原文地址:https://www.cnblogs.com/8888-lhb/p/11235837.html
Copyright © 2020-2023  润新知