junit
junit
4.12
test
org.hibernate
hibernate-entitymanager
5.4.32.Final
mysql
mysql-connector-java
5.1.47
persistence.xml
org.hibernate.jpa.HibernatePersistenceProvider
com.kuang.pojo.Customer
package com.kuang.test;
import com.kuang.pojo.Customer;
import org.junit.Before;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.xml.soap.SAAJMetaFactory;
public class JpaTest {
private EntityManagerFactory factory;
@Before
public void before() {
//EntityManagerFactory 创建工厂 对应 sqlSessionFactory 用来创建 entityManager
factory = Persistence.createEntityManagerFactory("hibernateJPA");
}
@Test
public void insert() {
//其实底层实现还是hibernate
// entityManager 相当于 sqlSession 代码与数据库之间的桥梁
EntityManager entityManager = null;
EntityTransaction transaction=null;
try {
entityManager = factory.createEntityManager();
transaction = entityManager.getTransaction();//获取事务对象
transaction.begin();//事务开启
Customer customer = new Customer();
customer.setCustName("刘备");
customer.setCustAddress("锦州");
entityManager.persist(customer);
transaction.commit();//事务提交
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();//事务回滚
} finally {
if (entityManager!=null){
entityManager.close();//关闭连接
}
}
}
@Test
public void select() {
//其实底层实现还是hibernate
// entityManager 相当于 sqlSession 代码与数据库之间的桥梁
EntityManager entityManager = null;
EntityTransaction transaction=null;
try {
entityManager = factory.createEntityManager();
transaction = entityManager.getTransaction();//获取事务对象
transaction.begin();//事务开启
Customer customer = entityManager.find(Customer.class, 1L);
// Customer customer = entityManager.getReference(Customer.class, 1L);//延迟查询
// System.out.println("=======");
System.out.println(customer);
transaction.commit();//事务提交
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();//事务回滚
} finally {
if (entityManager!=null){
entityManager.close();//关闭连接
}
}
}
@Test
public void update() {
//其实底层实现还是hibernate
// entityManager 相当于 sqlSession 代码与数据库之间的桥梁
EntityManager entityManager = null;
EntityTransaction transaction=null;
try {
entityManager = factory.createEntityManager();
transaction = entityManager.getTransaction();//获取事务对象
transaction.begin();//事务开启
Customer customer = new Customer();
customer.setCustId(9L);
customer.setCustName("lzl");
customer.setCustAddress("为鲁斯");
/**
* 如果指定了主键:
* 更新 :1. 先查询 看是否有变化
* *如果有变化 更新 如果没有变化 就不更新
* 如果没有指定主键:
* 插入:
*/
//存在即修改, 不存在就添加
//注意: 修改是覆盖操作,你没给的值,就全给你覆盖为null
// 如果你不想让他查一遍,你可以自己写JPQL语句进行添加或者修改
Customer merge = entityManager.merge(customer);
transaction.commit();//事务提交
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();//事务回滚
} finally {
if (entityManager!=null){
entityManager.close();//关闭连接
}
}
}
@Test
public void update_JPQL() {
//其实底层实现还是hibernate
// entityManager 相当于 sqlSession 代码与数据库之间的桥梁
EntityManager entityManager = null;
EntityTransaction transaction=null;
try {
entityManager = factory.createEntityManager();
transaction = entityManager.getTransaction();//获取事务对象
transaction.begin();//事务开启
String jpql="update Customer set custName=:custName , custAddress=:custAddress where custId=:id";
entityManager.createQuery(jpql)
.setParameter("custName","张杰")
.setParameter("custAddress","广东")
.setParameter("id",3L)
.executeUpdate();
transaction.commit();//事务提交
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();//事务回滚
} finally {
if (entityManager!=null){
entityManager.close();//关闭连接
}
}
}
@Test
public void test_SQL() {
//其实底层实现还是hibernate
// entityManager 相当于 sqlSession 代码与数据库之间的桥梁
EntityManager entityManager = null;
EntityTransaction transaction=null;
try {
entityManager = factory.createEntityManager();
transaction = entityManager.getTransaction();//获取事务对象
transaction.begin();//事务开启
String sql="update tb_customer set cust_name=:custName , cust_address=:custAddress where cust_id=:id";
entityManager.createNativeQuery(sql)
.setParameter("custName","谢娜")
.setParameter("custAddress","湖南")
.setParameter("id",3L)
.executeUpdate();
transaction.commit();//事务提交
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();//事务回滚
} finally {
if (entityManager!=null){
entityManager.close();//关闭连接
}
}
}
@Test
public void delete() {
//其实底层实现还是hibernate
// entityManager 相当于 sqlSession 代码与数据库之间的桥梁
EntityManager entityManager = null;
EntityTransaction transaction=null;
try {
entityManager = factory.createEntityManager();
transaction = entityManager.getTransaction();//获取事务对象
transaction.begin();//事务开启
Customer customer = entityManager.find(Customer.class, 3L);
entityManager.remove(customer);// 这样删除,是删除游离状态的,会抛异常不允许这样操作 IllegalArgumentException: Removing a detached instance com.kuang.pojo.Customer#3
transaction.commit();//事务提交
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();//事务回滚
} finally {
if (entityManager!=null){
entityManager.close();//关闭连接
}
}
}
@Test
public void template() {
//其实底层实现还是hibernate
// entityManager 相当于 sqlSession 代码与数据库之间的桥梁
EntityManager entityManager = null;
EntityTransaction transaction=null;
try {
entityManager = factory.createEntityManager();
transaction = entityManager.getTransaction();//获取事务对象
transaction.begin();//事务开启
transaction.commit();//事务提交
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();//事务回滚
} finally {
if (entityManager!=null){
entityManager.close();//关闭连接
}
}
}
}