使用jpa的简单的增删查找操作

保存

  @Test
    public void  testAdd(){
        Customer c = new Customer();
        c.setCustName("船只");
        c.setCustLevel("VIP");
        c.setCustSource("网络");
        c.setCustIndustry("It");
        c.setCustAddress("胡安娜");
        c.setCustPhone("15512234556");

        EntityManager em = null;
        EntityTransaction tx = null;

        try {
            // 获取实体管理对象
            em = JPAUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            // 开启事务
            tx.begin();
            // 执行操作
            em.persist(c);
            // 提交事务
            tx.commit();
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

修改

    @Test
    public void  testMerge(){
        EntityManager em = null;
        EntityTransaction tx = null;

        try {
            em = JPAUtil.getEntityManager();
            tx = em.getTransaction();
            tx.begin();

            // 执行操作
            // 必修6l,java.lang.IllegalArgumentException: Provided id of the wrong type for class com.oceanstar.domain.Customer.
            Customer c1 = em.find(Customer.class, 6l);
            c1.setCustName("执行修改操作");
            em.clear(); //把c1对象从缓存中清除出去
            em.merge(c1);
            tx.commit();
        }catch (Exception e){
            tx.rollback();
            e.printStackTrace();
        }finally {
            em.close();
        }
    }

删除

	/**
	 * 删除
	 */
	@Test
	public void testRemove() {
		// 定义对象
		EntityManager em = null;
		EntityTransaction tx = null;
		try {
			// 获取实体管理对象
			em = JPAUtil.getEntityManager();
			// 获取事务对象
			tx = em.getTransaction();
			// 开启事务
			tx.begin();
			// 执行操作
			Customer c1 = em.find(Customer.class, 6L);
			em.remove(c1);
			// 提交事务
			tx.commit();
		} catch (Exception e) {
			// 回滚事务
			tx.rollback();
			e.printStackTrace();
		} finally {
			// 释放资源
			em.close();
		}
	}

根据id查询

查询一个:使用立即加载策略

find() 方法:根据id查询客户
在这里插入图片描述

// 查询实体的缓存问题
	@Test
	public void testGetOne() {
		// 定义对象
		EntityManager em = null;
		EntityTransaction tx = null;
		try {
			// 获取实体管理对象
			em = JPAUtil.getEntityManager();
			// 获取事务对象
			tx = em.getTransaction();
			// 开启事务
			tx.begin();
			// 执行操作
			Customer c1 = em.find(Customer.class, 1L);
			Customer c2 = em.find(Customer.class, 1L);
			System.out.println(c1 == c2);// 输出结果是true,EntityManager也有缓存
			// 提交事务
			tx.commit();
			System.out.println(c1);
		} catch (Exception e) {
			// 回滚事务
			tx.rollback();
			e.printStackTrace();
		} finally {
			// 释放资源
			em.close();
		}
	}

在这里插入图片描述

查询一个:延迟加载

 @Test
    public void  testFindOne(){
        EntityManager em = null;
        EntityTransaction tx = null;

        try {
            em = JPAUtil.getEntityManager();
            tx = em.getTransaction();
            tx.begin();
            Customer c1 = em.getReference(Customer.class, 2l);
            Customer c2 = em.getReference(Customer.class, 2l);
            tx.commit();
            System.out.println(c1 == c2);
        }catch (Exception e){
            tx.rollback();
            e.printStackTrace();
        }finally {
            em.close();
        }
    }

在这里插入图片描述
在这里插入图片描述

好的,我可以为你提供一个简单的示例来演示如何使用 JPA 来实现增删改查操作。 首先,你需要在项目中添加 JPA 的依赖,比如使用 Maven,可以在 pom.xml 文件中添加如下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 接下来,你需要定义一个实体类,比如我们以用户(User)为例,可以创建一个 User 类,代码如下: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer age; // getter 和 setter 方法省略 } ``` 在上面的代码中,@Entity 注解表示这是一个 JPA 实体类,@Table 注解指定了对应的数据库表名,@Id 和 @GeneratedValue 注解表示 id 字段是主键并且自动生成。 接下来,你可以创建一个 UserRepository 接口来定义对 User 表的增删改查操作,代码如下: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { List<User> findByName(String name); } ``` 在上面的代码中,@Repository 注解表示这是一个 Spring Data JPA 的仓库类,UserRepository 继承了 JpaRepository 接口,并指定了实体类 User 和主键类型 Long。在 UserRepository 中,我们可以定义一些自定义的查询方法,比如 findByName() 方法,用来根据 name 字段查询用户数据。 最后,你可以在业务逻辑中调用 UserRepository 中的方法来实现增删改查操作,比如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public User saveUser(User user) { return userRepository.save(user); } public void deleteUser(Long id) { userRepository.deleteById(id); } public User updateUser(User user) { return userRepository.save(user); } public List<User> findUserByName(String name) { return userRepository.findByName(name); } } ``` 在上面的代码中,我们使用 @Autowired 注解将 UserRepository 注入到 UserService 中,并定义了一些增删改查方法,例如 saveUser() 方法用来保存用户数据,deleteUser() 方法用来删除用户数据,updateUser() 方法用来更新用户数据,findUserByName() 方法用来根据 name 查询用户数据。 当你调用这些方法时,JPA 会自动帮你生成对应的 SQL 语句,并执行这些 SQL 语句来实现对数据库的操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值