总结

我是最棒的!基础不牢,地动山摇!

Maven

一个优秀的项目构建工具

三大优势

  1. 自动构建

  2. 自动导包

    本地仓库自动寻找,找不到回到网络上的远程仓库下载。导入一个包也会自动导入这个包需要的依赖

  3. 契约编程

    maven项目的结构是一致的

    1. 有一个pom.xml 用于维护当前项目都用了那些jar包
    2. 所有的java代码都放在 src/main/java
    3. 所有的测试代码都放在src/test/java

常用命令

mvn compile //编译
mvn clean //清除
mvn clean compile //清除之后进行编译
mvn clean test //进行测试
run 代表正常通过 failure 代表代码逻辑问题
error 代表代码错误 skip 代表跳过的测试
mvn clean package //clean可以省略 打包操作
mvn source:jar //打源码包
mvn install //将打好的包导入本地仓库
mvn package -Dmaven.test.skip = true
//打包的时候跳过测试
mvn eclipse:eclipse //成为eclipse项目

JPA

ORM规范,Java持久化API

ORM代表对象关系映射(java和数据库的映射)

优点:

  1. 开发速度快
  2. 拥有世界级缓存(提高查询速度)
  3. 完全面向对象
  4. 兼容各种数据库

缺点:

  1. 学习曲线高
  2. 性能不好控制

JPA和JDBC的比较

  1. JPA的底层就是JDBC
  2. JPA开发速度快,兼容各种数据库,完全以面向对象的思维开发
  3. JPA的性能不好控制(一般只适用于做中小型项目)

JPA和Hibernate

  1. JPA是一个规范,Hibernate是它的实现

JPA的CRUD

注意事项:增删改都需要开启事务并且提交事务,查询的时候需要传入类型和id,删除的时候现根据id查询出对象,再将对象传入。有事务操作的要使用try/catch/finally包围,catch中回滚事务,finally中关闭entityManager

新增

/**
     * 新增,事务提交出错都会进行回滚
     * @param employee
     */
    @Override
    public void save(Employee employee) {
        EntityManager entityManager = null;
        try {
            entityManager = JpaUtil.createEntityManager();
            //开启事务
            entityManager.getTransaction().begin();
            //新增方法为persist
            entityManager.persist(employee);
            //提交事务
            entityManager.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            //提交错误进行回滚
            entityManager.getTransaction().rollback();
        } finally {
            //关闭entityManager
            entityManager.close();
        }
    }

删除

/**
     * 删除的注意事项,先根据id查询出employee对象,判断对象是否为null后再将该对象传入进行删除
     * @param id
     */
    @Override
    public void remove(Long id) {
        EntityManager entityManager = null;
        try {
            entityManager = JpaUtil.createEntityManager();
            //开启事务
            entityManager.getTransaction().begin();
            //先根据id查询出对象
            Employee employee = entityManager.find(Employee.class, id);
            //判断对象是否为空,防止出现空指针异常
            if(employee != null){
                entityManager.remove(employee);
            }
            //提交事务
            entityManager.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            //出错回滚
            entityManager.getTransaction().rollback();
        } finally {
            //关闭entityManager
            entityManager.close();
        }
    }

修改与新增相同,除了方法变成了merge

entityManager.remove(employee);

查询单个

 /**
     * 查询
     * @param id
     * @return
     */
    @Override
    public Employee findOne(Long id) {
        EntityManager entityManager = JpaUtil.createEntityManager();
        Employee employee = entityManager.find(Employee.class, id);
        return employee;
    }

查询所有

/**
     * 查询所有,结合jpql来操作
     * @return
     */
    @Override
    public List<Employee> findAll() {
        EntityManager entityManager = JpaUtil.createEntityManager();
        List<Employee> list = entityManager.createQuery("from Employee").getResultList();
        return list;
    }

自动建表的策略

create-drop 测试人员使用 关闭工厂对象之后会删除表

create 测试人员使用 先删除再创建

update 如果数据库中没有这张表,它会自动帮咱们创建一张(有表就不会创建),还可以进行字段的修改(只增不减)

validate 判断domain与数据库中的关系映射是否正确(只会验证domain中写好的字段)

none 没什么用

JPA中的四大对象

Persistence 创建EntityManagerFactory对象

EntityManagerFactory 重量级对象

  1. 二级缓存
  2. 预定义语句(JPQL,SQL)
  3. 连接池(数据库配置信息)
  4. 所有实体对象的关系

这个对象不能轻易的销毁和创建

1(项目):1(EntityManagerFactory):1(数据库)

本身是一个线程安全的对象

作用:创建EntityManager对象

EntityManager 轻量级对象

  1. 一级缓存
  2. 数据库的连接对象

线程不安全,保证一个线程对应一个EntityManager

作用:CRUD

EntityTransaction 事务对象(增删改必须要事务)

本地事务

JTA 跨系统,跨数据库(分布式事务)

细节配置

//列属性(length为长度,nullable 是否为空,unique 是否唯一)
@Column(length = 20,nullable = false,unique = true)

//长文本
@Lob

//时间日期:TIMESTAMP 年月日时分秒
//DATE 年月日
//TIME 时分秒
@Temporal(TemporalType.TIMESTAMP)
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIME)

//临时变量(JPA不会进行管理)
@Transient
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐