Hibernate:JPA的CRUD

JPA:它是java persistence api,java持久化规范

  • JPA是一套ORM规范,hibernate实现了JPA规范。
  • hibernate中有自己的ORM操作数据库方式(JPA没出现时),也有JPA规范实现的操作数据库方式。
  • 在数据库增删改查操作中,我们hibernate和JPA的操作都要会。

1、导入jpa支持的jar包

2、在src目录下新建META-INF文件夹,然后在文件夹下创建persistence.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
	version="2.0">
   
   <!-- 配置持久化单元,可以配置多个,但是名称不能重复
   		name:用于指定持久化单元名称
   		transaction-type:指定事务的类型
	 		JTA:Java Transaction API
	 		RESOURCE_LOCAL:指的是本地代码事务(我们用这个)-->
	<persistence-unit name="myJPAUnit" transaction-type="RESOURCE_LOCAL">
	<!-- JPA规范的提供商,可以不写 -->
	<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
	<!-- 指定由JPA注解的实体类位置,可以不写 -->
	<class>org.haiwen.entity.Goods</class>
	<properties>
		<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
		<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate" />
		<property name="hibernate.connection.username" value="root" />
		<property name="hibernate.connection.password" value="root" />
		<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
		<property name="hibernate.show_sql" value="true" />
		<property name="hibernate.format_sql" value="true" />
		<property name="hibernate.hbm2ddl.auto" value="update" />
		<!-- 设置hibernate的连接池提供商 -->
		<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
	</properties>
	</persistence-unit>
</persistence>

3、工具类JPAUtils.java

public class JPAUtils {

	private static EntityManagerFactory factory;

	static {
		factory = Persistence.createEntityManagerFactory("myJPAUnit");// 与配置文件映射
	}
	// 获取JPA操作数据库的对象
	public static EntityManager createEntityManager() {
		return factory.createEntityManager();
	}
	public static void main(String[] args) {
		createEntityManager();
	}
}

4、实体类Goods.java

//使用的注解都是JPA规范,所以导包,都需要导入javax.persistence包下的
@Entity // 表明该类是一个实体类
@Table(name = "goods") // 建立当前类和数据库表的对应关系
public class Goods {

	@Id // 表明当前字段是主键
	@Column(name = "goods_id") // 表明对应数据库字段是goods_id
	// @GeneratedValue:指定主键生成策略
	// strategy:使用JPA中提供的主键生成策略
	// generator:使用hibernate中的主键生成策略
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer goodsId;
	@Column(name = "goods_name")
	private String goodsName;
	@Column(name = "goods_price")
	private Float goodsPrice;
	@Column(name = "goods_number")
	private Integer goodsNumber;

保存

public void save() {
	Goods goods = new Goods();
	goods.setGoodsName("孟婆汤");
	goods.setGoodsNumber(10);
	goods.setGoodsPrice(520f);

	// 1.获取EntityManager对象
	EntityManager entityManager = JPAUtils.createEntityManager();
	// 2.获取事务对象
	EntityTransaction entityTransaction = entityManager.getTransaction();
	// 3.开启事务
	entityTransaction.begin();
	// 4.执行保存操作
	entityManager.persist(goods);
	// 5.提交事务
	entityTransaction.commit();
	// 6.关闭资源
	entityManager.close();
}

查找 - 立即加载

public void find() {
	EntityManager entityManager = JPAUtils.createEntityManager();
	EntityTransaction entityTransaction = entityManager.getTransaction();
	entityTransaction.begin();
	Goods goods = entityManager.find(Goods.class, 1);
	System.out.println(goods);
	entityTransaction.commit();
	entityManager.close();
}

查找 - 延迟加载

public void getReference() {
	EntityManager entityManager = JPAUtils.createEntityManager();
	EntityTransaction entityTransaction = entityManager.getTransaction();
	entityTransaction.begin();
	Goods goods = entityManager.getReference(Goods.class, 1);
	System.out.println(goods);
	entityTransaction.commit();
	entityManager.close();
}

查找 - 条件查询

public void query() {
	/**
	 * 涉及的对象:JPA的Query
	 *	获取该对象:EntityManager的createQuery(String jpql);
	 *	参数含义:JQPL,Java Persistence Query Language
	 *	写实体类名和属性名
	 */
	EntityManager entityManager = JPAUtils.createEntityManager();
	EntityTransaction entityTransaction = entityManager.getTransaction();
	entityTransaction.begin();
	Query query = entityManager.createQuery("select g from Goods g where goodsName = ?");
	query.setParameter(1, "孟婆汤");// 占位符从1开始
	List list = query.getResultList();
	for (Object object : list) {
		System.out.println(object);
	}
	entityTransaction.commit();
	entityManager.close();
}

更新 - 方法一

public void updateFind() {
	EntityManager entityManager = JPAUtils.createEntityManager();
	EntityTransaction entityTransaction = entityManager.getTransaction();
	entityTransaction.begin();
	Goods goods = entityManager.find(Goods.class, 1);
	goods.setGoodsName("人参果");
	entityTransaction.commit();
	entityManager.close();
}

更新 - 方法二

public void updateGet() {
	EntityManager entityManager = JPAUtils.createEntityManager();
	EntityTransaction entityTransaction = entityManager.getTransaction();
	entityTransaction.begin();
	Goods goods = entityManager.getReference(Goods.class, 1);
	goods.setGoodsName("唐僧肉");
	entityManager.merge(goods); // merge是合并(两个实体类合并)
	entityTransaction.commit();
	entityManager.close();
}

删除

public void remove() {
	EntityManager entityManager = JPAUtils.createEntityManager();
	EntityTransaction entityTransaction = entityManager.getTransaction();
	entityTransaction.begin();
	Goods goods = entityManager.find(Goods.class, 1);
	entityManager.remove(goods);
	entityTransaction.commit();
	entityManager.close();
}
发布了202 篇原创文章 · 获赞 37 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/lovecuidong/article/details/100134045