JPA使用基本步骤及插入数据示例

JPA使用基本步骤

1.环境搭建

(1). pom.xml配置
在创建spring boot项目时选择mysql驱动和JPA支持即可
(2). persistence.xml配置
在resource下创建META-INF文件夹(jpa默认配置路径),在该文件夹下创建persistence.xml文件,在设置中选择相应的模板导入,之后写入如下配置。

<?xml version="1.0" encoding="UTF-8"?>
<!--
name:持久化单元名称,创建实体类管理工厂是需要使用
transaction-type:事务管理的方式
        JPA:分布式事务管理
        RESOURCE_LOCAL:本地事务管理
-->
<persistence-unit name="myjpa" transaction-type="RESOURCE_LOCAL">
<!--
jpa实现方式
数据库信息
可选配置:配置jpa实现方的配置信息
-->
<!--jpa实现方式  使用的hibernate-->
<provider >org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <!--数据库信息
    用户名 javax.persistence.jdbc.user
     密码 javax.persistence.jdbc.password
       驱动 javax.persistence.jdbc.driver
        数据库地址 javax.persistence.jdbc.url
    -->
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
        <property name="javax.persistence.jdbc.user" value="root"/><!--不能用username-->
        <property name="javax.persistence.jdbc.password" value="123456"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///sourcesharedb?serverTimezone=GMT%2B8"/><!--后面的时区必写-->
        <!--jpa实现方的配置信息
        显示sql语句   true\false

        自动创建数据库表   hinernate.hbm2ddl.auto   create 程序运行时创建数据库表(先删后创)
        \update  程序运行时创建表(不删)
        \none    不会创建表
        -->
        <property name="hinernate.show_sql" value="true"/>
        <property name="hinernate.hbm2ddl.auto" value="update"/>

    </properties>


</persistence-unit>

2.创建实体类并与数据库表映射

@Entity//声明实体类
@Data//相当于get/set方法
@Table(name=“user”)//实体类和表的映射关系
public class User {

@Id//主键声明
//@GeneratedValue(strategy = GenerationType.AUTO)主键生成策略//identity自增式增长需数据库底层支持/sequence 序列,需底层数据库支持()如果是自己设置的话建议不写这句
@Column(name="id_user")//表中字段与类属性的映射关系
private String id;
@Column(name="username")
private String name;
@Column(name="password")
private String password;

3.使用JPA对数据库实行增加操作

JPA操作步骤

  • 1.加载配置文件,创建工厂(实体管理器工厂)
  • 2.通过工厂获取实体管理器
  • 3.获取事务对象,开启事务(增删改之前一定开启事务)
  • 4.完成增删改查
  • 5.提交事务或回滚事务
  • 6.释放资源
  • */
    //加载配置文件,根据配置文件内容加载尸体管理器
    EntityManagerFactory managerFactory=Persistence.createEntityManagerFactory(“myjpa”);
    //通过实体管理器工厂获取实体管理器
    EntityManager entityManager=managerFactory.createEntityManager();
    //获取事务对象,开启事务
    EntityTransaction transaction=entityManager.getTransaction();//获取事务对象
    transaction.begin();//开启事务
    //完成增删改查
    User user=new User(“3370”,“张三”,“987654”);
    //保存
    entityManager.persist(user);//保存操作
    //提交事务
    transaction.commit();
    //释放资源
    entityManager.close();
    managerFactory.close();

完成删改查

/*
* 根据id查询客户
*
* /
@Test
public void testFind(){
//1.获取尸体管理器对象
EntityManager entityManager=JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction transaction=entityManager.getTransaction();
transaction.begin();
//3.增删改查
/

* find:根据id查询数据
* class:查询数据的结果需要包装的实体类类型的字节码
* id:查询的主建名称
* 立即加载
* 可以用null来判断查询结果是否·为空
* */
User user=entityManager.find(User.class,“3370”);
//System.out.println(user);
//4.提交事务
transaction.commit();
//5.释放资源
entityManager.close();
}

@Test
public void testGetReference(){
    //1.获取尸体管理器对象
    EntityManager entityManager=JpaUtils.getEntityManager();
    //2.开启事务
    EntityTransaction transaction=entityManager.getTransaction();
    transaction.begin();
    //3.增删改查
    /*
    (常用方法)
     * getReference:根据id查询数据
     *       class:查询数据的结果需要包装的实体类类型的字节码
     *          id:查询的主建名称
     *
     * 1.获取的对象是一个动态代理
     * 2.不会立即放松sql语句去查 当调用查询结果对象时才会发送sql语句
     *
     * 延迟加载(懒加载)
     * *得到一个动态代理对象
     * *什么时候用,什么时候查
     * 如果查询结果为空,会返回代理对象值,无法用null来判断
     * */
    User user=entityManager.getReference(User.class,"3371");//查询得到代理对象
        System.out.println(user);
    //4.提交事务
    transaction.commit();
    //5.释放资源
    entityManager.close();
}

@Test
public void testRemov(){
    //1.获取尸体管理器对象
    EntityManager entityManager=JpaUtils.getEntityManager();
    //2.开启事务
    EntityTransaction transaction=entityManager.getTransaction();
    transaction.begin();
    //3.增删改查--删除

    User user=entityManager.find(User.class,"3369");
    entityManager.remove(user);//删除对象,需要先查询得到对象
    //System.out.println(user);
    //4.提交事务
    transaction.commit();
    //5.释放资源
    entityManager.close();
}
@Test
public void testMerge(){
    //1.通过工具类获取尸体管理器对象
    EntityManager entityManager=JpaUtils.getEntityManager();
    //2.开启事务
    EntityTransaction transaction=entityManager.getTransaction();
    transaction.begin();
    //3.增删改查--更新
    /*
    * 先查询得到实体类对象,然后修改对象的属性,再执行更新操作
    * */

    User user=entityManager.find(User.class,"3370");
    user.setPassword("123456");
    entityManager.merge(user);//删除对象,需要先查询得到对象
    //System.out.println(user);
    //4.提交事务
    transaction.commit();
    //5.释放资源
    entityManager.close();
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JPAJava Persistence API)可以通过实体类和注解的方式来操作数据库,包括插入数据。 如果要向两个表中插入数据,可以考虑使用JPA的关联映射来实现。具体步骤如下: 1. 在实体类中定义好两个表之间的关联关系,例如使用@OneToOne、@OneToMany或@ManyToMany注解等。 2. 创建两个实体对象,分别对应两个表。 3. 将两个实体对象关联起来,即设置它们之间的关联属性。例如,如果一个实体类中有一个@OneToOne注解,那么可以通过设置该实体对象的关联属性来关联另一个实体对象。 4. 使用EntityManager的persist()方法将两个实体对象保存到数据库中。 示例代码如下: ``` @Entity @Table(name = "table1") public class Entity1 { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 定义关联关系 @OneToOne(mappedBy = "entity1") private Entity2 entity2; // 省略其他属性和方法 } @Entity @Table(name = "table2") public class Entity2 { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 定义关联关系 @OneToOne @JoinColumn(name = "entity1_id") private Entity1 entity1; // 省略其他属性和方法 } // 创建实体对象 Entity1 entity1 = new Entity1(); Entity2 entity2 = new Entity2(); // 设置关联属性 entity1.setEntity2(entity2); entity2.setEntity1(entity1); // 保存实体对象到数据库中 entityManager.persist(entity1); entityManager.persist(entity2); ``` 上述代码中,Entity1和Entity2分别对应两个表,它们之间的关联关系通过@OneToOne注解来进行定义。在创建实体对象后,需要将它们之间的关联属性设置好,然后使用EntityManager的persist()方法将它们保存到数据库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值