Maven和JPA
Maven和JPA总结Maven三大优势常用命令JPAJPA的CRUD自动建表的策略JPA中的四大对象细节配置总结我是最棒的!基础不牢,地动山摇!Maven一个优秀的项目构建工具三大优势自动构建自动导包本地仓库自动寻找,找不到回到网络上的远程仓库下载。导入一个包也会自动导入这个包需要的依赖契约编程maven项目的结构是一致的有一个pom.xml 用于维护当前项目...
总结
我是最棒的!基础不牢,地动山摇!
Maven
一个优秀的项目构建工具
三大优势
-
自动构建
-
自动导包
本地仓库自动寻找,找不到回到网络上的远程仓库下载。导入一个包也会自动导入这个包需要的依赖
-
契约编程
maven项目的结构是一致的
- 有一个pom.xml 用于维护当前项目都用了那些jar包
- 所有的java代码都放在 src/main/java
- 所有的测试代码都放在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和数据库的映射)
优点:
- 开发速度快
- 拥有世界级缓存(提高查询速度)
- 完全面向对象
- 兼容各种数据库
缺点:
- 学习曲线高
- 性能不好控制
JPA和JDBC的比较
- JPA的底层就是JDBC
- JPA开发速度快,兼容各种数据库,完全以面向对象的思维开发
- JPA的性能不好控制(一般只适用于做中小型项目)
JPA和Hibernate
- 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 重量级对象
- 二级缓存
- 预定义语句(JPQL,SQL)
- 连接池(数据库配置信息)
- 所有实体对象的关系
这个对象不能轻易的销毁和创建
1(项目):1(EntityManagerFactory):1(数据库)
本身是一个线程安全的对象
作用:创建EntityManager对象
EntityManager 轻量级对象
- 一级缓存
- 数据库的连接对象
线程不安全,保证一个线程对应一个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
更多推荐
所有评论(0)