spring-data-aop 使用EntityManager操作数据库
spring-data-aop 使用EntityManager
操作数据库
作为Bean注入
import javax.persistence.EntityManager;
@ Autowired
private EntityManager entityManager;
CURD操作
createQuery
针对JPQL的查询、删除、修改操作
-
查询
List customers = entityManager.createQuery("select c from Customer c where c.customerName like '%" + keyboard + "%'", Customer.class).getResultList;
使用JPQL语句时,查询全字段切记不能用
*
,正确全字段查询如我上方示例或者
String sql = "select c from Customer c where c.customerName = :keyboard"; TypedQuery query = entityManager.createQuery(sql, Customer.class); query.setParameter("keyboard", "jack");//设置JPQL参数 List resultList = query.getResultList();//获取查询结果
我更推荐使用第二种方式编写代码~
-
删除 / 修改
import org.springframework.transaction.annotation.Transactional; @Transactional public void deleteCustomer(String keyboard){ String sql = "delete from Customer c where c.customerName = :key";// JPQL删除语句 Query query = entityManager.createQuery(sql); query.setParameter("key", keyboard);//设置JPQL参数 int executed = query.executeUpdate();// 执行删除 }
修改
与删除
类似,仅把JPQL修改成update
语句即可,不需要改其他代码。
总结
使用
entityManager
执行 删除/修改 操作时,必须要在方法上加@Transactional
事务注解!
createNativeQuery
原生SQL查询
-
查询
String sql = "select c.* from customer c where c.customer_name = :key";// 原生SQL entityManager.createNativeQuery(sql, Customer.class); Query query = entityManager.createNativeQuery(querySql, Customer.class); query.setParameter("key", "jack");//设置JPQL参数 List resultList = query.getResultList();
-
增加(不推荐使用)
@Transactional public void updateCustomer(String name){ String updateSql = "insert into customer(age,name) values (:age,:name)"; Query query = entityManager.createNativeQuery(updateSql, Customer.class); query.setParameter("age", 20); query.setParameter("name", name); int executed = query.executeUpdate(); }
-
删除/修改
@Transactional public void updateCustomer(String customerName){ String updateSql = "update customer c set c.customer_age = :age where c.customer_name = :key"; Query query = entityManager.createNativeQuery(updateSql, Customer.class); query.setParameter("age", 20); query.setParameter("key", customerName); int executed = query.executeUpdate(); }
删除
与修改
类似,仅把SQL修改成delete
语句即可,不需要改其他代码。
find
按主键查询一条数据
第一个参数是类,第二个参数是主键值
Customer customer = (Customer) entityManager.find(Customer, 103);
persist
将对象作为一条数据写入表
@Transactional
public void saveCustomer(String name){
Customer customer = new Customer(null,name,18);
entityManager.persist(customer);
}
在 spring-data-jpa 中,使用
persist
方法本身并不会自动启动或提交事务。persist
方法只是将实体标记为新建状态,准备持久化到数据库。为了让这些更改生效并实际写入数据库,你需要在一个事务的上下文中调用persist
方法。因此,通常建议在使用persist
方法时结合@Transactional
注解,以确保操作的原子性和一致性
拓展
使用 entityManager
查询自定义的结果集
-
使用
createQuery
查询// 我定义了一个不是entity的类,仅查询customer表中的姓名和年纪字段,不查id String sql = "select new com.train.dto.CustomerDTO(c.customerName,c.customerAge) from Customer c where c.customerName = :key"; entityManager.createQuery(sql, CustomerDTO.class); query.setParameter("key", "jack");//设置JPQL参数 List resultList = query.getResultList();
-
使用
createNativeQuery
查询String sql = "select c.* from Customer c where c.customer_name = :key"; Query query = entityManager.createNativeQuery(sql); query.setParameter("key", "jack");//设置JPQL参数 List<Object[]> resultList = query.getResultList(); for (Object[] result : resultList) { CustomerDTO dto = new CustomerDTO(); dto.setAge((Long) result[1]); dto.setName((String) result[2]); }
原文地址:https://blog.csdn.net/qq_35215728/article/details/143503882
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!