一、创建Maven工程
二、实现增删改查
创建工具类
package cn.kgc.utils;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class Jpautil {
private static EntityManagerFactory factory;
static {
//根据Persistence创建 EntityManagerFactory对象
factory = Persistence.createEntityManagerFactory("myjpa");
}
//获得EntityManager对象的方法
public static EntityManager getEntityManager(){
EntityManager entityManager = factory.createEntityManager();
return entityManager;
}
}
1、添加数据
persist()方法用于添加一条数据
//添加数据
@Test
public void firstTest() {
//通过工具类获得EntityTransaction对象
EntityManager entityManager = Jpautil.getEntityManager();
//获得事物对象
EntityTransaction transaction = entityManager.getTransaction();
//开启事物
transaction.begin();
//创建实体类对象,添加10条信息
for (int i=0;i<10;i++){
Customer customer = new Customer();
customer.setName("刘高阳");
customer.setSex("男");
customer.setAge(18);
customer.setAddres("郑州市");
//5 使用Entitymanager 对象 的persist 方法向数据库添加数据
entityManager.persist(customer);
}
//提交事物
transaction.commit();
//关闭连接
entityManager.close();
// factory.close();
}
2、根据id查询数据
find方法
getReference()方法
//根据id查询数据
// 使用find方法查询数据库
// 特点:
// 1、查询的对象就是当前对象本身本身
// 2、在调用find方法时就会发送sql语句
//该方式称为立即加载
@Test
public void testFind(){
//获得entityManager对象该对象是操作数据库的核心对象
EntityManager entityManager = Jpautil.getEntityManager();
//获得entityTransaction事物对象
EntityTransaction entityTransaction = entityManager.getTransaction();
//开启事物
entityTransaction.begin();
//执行根据id查询的方法
Customer customer = entityManager.find(Customer.class, 3);
System.out.println(customer);
//提交事物
entityTransaction.commit();
//关闭核心类,释放资源
entityManager.close();
}
//根据id查询数据
// 使用getReference方法
// 特点:
// 1、该方法查询的是一个动态代理对象
// 2、当执行Reference方法时不会立即打印sql语句查询数据库,而是调用查询对象时才会调用sql语句,
// 即什么时候用什么时候发送sql语句查询数据库
//该方式成为延迟加载或懒加载
@Test
public void testReference(){
//获得entityManager对象该对象是操作数据库的核心对象
EntityManager entityManager = Jpautil.getEntityManager();
//获得entityTransaction事物对象
EntityTransaction entityTransaction = entityManager.getTransaction();
//开启事物
entityTransaction.begin();
//执行根据id查询的方法
Customer customer = entityManager.getReference(Customer.class, 1);
System.out.println(customer);
//提交事物
entityTransaction.commit();
//关闭核心类,释放资源
entityManager.close();
}
3、修改数据的方法
merge()方法 用于修改数据后保存数据库
//修改数据merge()是保存修改后的数据
@Test
public void testmerge() {
//获得entityManager对象该对象是操作数据库的核心对象
EntityManager entityManager = Jpautil.getEntityManager();
//获得entityTransaction事物对象
EntityTransaction entityTransaction = entityManager.getTransaction();
//开启事物
entityTransaction.begin();
//执行根据id查询的方法
Customer customer = entityManager.getReference(Customer.class, 2);
customer.setName("曹操");
entityManager.merge(customer);
System.out.println(customer);
//提交事物
entityTransaction.commit();
//关闭核心类,释放资源
entityManager.close();
}
4、删除数据
remove()方法用于删除数据库数据
//删除数据案例
@Test
public void testRemove() {
//获得entityManager对象该对象是操作数据库的核心对象
EntityManager entityManager = Jpautil.getEntityManager();
//获得entityTransaction事物对象
EntityTransaction entityTransaction = entityManager.getTransaction();
//开启事物
entityTransaction.begin();
//执行根据id查询的方法
Customer customer1 = entityManager.find(Customer.class, 3);
//执行删除操作
entityManager.remove(customer1);
System.out.println(customer1);
//提交事物
entityTransaction.commit();
//关闭核心类,释放资源
entityManager.close();
}
5、基于jpql 查询所有
//查询所有 基于jpql 创建
@Test
public void findAll(){
//获得entityManager对象
EntityManager entityManager = Jpautil.getEntityManager();
// 根据entityManager获得Query对象 基于jpql 创建
//sql语句:"select * from Customer" 这里的Customer指的是表
//jpql语句:"from Customer"的意思是查询实体类Customer的所有数据,这里的Customer值得是实体类
Query query = entityManager.createQuery("from Customer");
//getResultList()方法:该方法是Query对象的方法 ,返回查询的数据的集合对象
List<Customer> resultList = query.getResultList();
for (Customer customer:resultList) {
System.out.println(customer);
}
//关闭连接
entityManager.close();
}
6、基于jpql的分页查询
setFirstResult()表示从第几条开始查询
setMaxResults()表示每页展示的条数
//设置分页信息
@Test
public void fianAllWithPage(){
//创建entityManager
EntityManager entityManager = Jpautil.getEntityManager();
//获得query对象
//"from Customer"的意思是查询实体类Customer的所有数据,这里的Customer值得是实体类
Query query = entityManager.createQuery("from Customer");
//设置分页信息
query.setFirstResult(5);//表示从第几条开始查询
query.setMaxResults(10);//表示每页展示的条数
//获得查询所有的数据,返回list集合
List<Customer> resultList = query.getResultList();
for (Customer customer:resultList) {
System.out.println(customer);
}
}
7、基于jpql 根据id查询
// jpql按id 查
@Test
public void findJpqlid(){
EntityManager entityManager = Jpautil.getEntityManager();
//获得query对象
//"from Customer where id=?"表示根据id查询Customer 的对象
Query query = entityManager.createQuery("from Customer where id=?");
//设置占位符的值。第一个参数为占位符的位置,第二个参数为占位符的值
query.setParameter(1,1);
//执行查询
Customer custome =(Customer) query.getSingleResult();
System.out.println(custome);
//关闭资源
entityManager.close();
}
8、基于jpql的模糊查询
//jpql模糊查询
@Test
public void findJpqlByName(){
EntityManager entityManager = Jpautil.getEntityManager();
//"from Customer where name like ? and sex like ?" 意思是根据名字和性别进行模糊查询
Query query = entityManager.createQuery("from Customer where name like ? and sex like ?");
//设置参数 第一个参数为占位符的位置,第二个参数为占位符的值
query.setParameter(1,"%曹%");
query.setParameter(2,"%男%");
//执行查询
List<Customer> resultList = query.getResultList();
System.out.println(resultList);
//关闭资源
entityManager.close();
}
9、基于jpql的升降序查询
@Test
public void findAllByOrder(){
EntityManager entityManager = Jpautil.getEntityManager();
Query query = entityManager.createQuery("from Customer order by id desc");//desc表示降序查询,
// Query query = entityManager.createQuery("from Customer order by id asc");//asc表示升序查询
//getResultList()方法返回查询的所有数据的list集合对象
List<Customer> resultList = query.getResultList();
for (Customer customer:resultList) {
System.out.println(customer);
}
entityManager.close();
}
10、基于jpql的聚合函数查询
// 聚合函数
@Test
public void findAllCount(){
EntityManager entityManager = Jpautil.getEntityManager();
Query query = entityManager.createQuery("select count(*) from Customer");//查询表Customer某列有多少条信息
//该方法表示统计信息数量
Object customer= query.getSingleResult();
System.out.println(customer);
entityManager.close();
}