jpa入门操作

简述


ORM思想是将实体类与表关系的映射,属性与字段映射,操作实体类就相当于操作数据库表,快速的增删改查。
JPA是一种规范,内部是接口和抽象类,hibernate是一个实现框架,SpringDATAJPA是Spring的集成。

jpa全称java presistence api。


依赖

<dependencies>
        <!--hibernate对jpa的支持-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.7.Final</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--c3p0-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>5.0.7.Final</version>
        </dependency>

        <!--日志-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>2.11.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
    </dependencies>

jpa的核心配置文件

配置到路径下一个叫做META-INF的文件夹下
命名:persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--配置持久化单元
        需要配置持久化单元名称name
        事务管理方式transaction-type:jtp=分布式事务管理
                                    RESOURCE_LOCAL=本地事务管理
        -->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--jpa的实现方式-->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <!--可选信息-->
        <properties>
            <!--数据库信息-->
            <!--
            用户名,javax.persistence.jdbc.user
            密码,  javax.persistence.jdbc.password
            驱动,javax.persistence.jdbc.driver
            url,javax.persistence.jdbc.url  ///代表本地数据库3306端口
            -->
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="root"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/>

            <!--可选配置:配置jpa实现方(即hibernate)的配置信息-->
            <!--显示sql-->
            <property name="hibernate.show_sql" value="true"/>
            <!--自动创建数据库表 
            create:程序运行时,创建数据库表,如果有表现删除表
            update:程序运行时,创建表,如果有表不会创建表
            none:不会创建表
            -->
            <property name="hibernate.hdm2ddl.auto" value="create"/>
        </properties>
    </persistence-unit>
</persistence>

实体类:
在这里插入图片描述
运行步骤
/**
* 保存一个客户到数据中
* Jpa操作步骤
* 1.加载配置文件创建工厂(实体管理类工厂)对象
* 2.通过实体管理类工厂获取实体管理器
* 3.获取事务对象,开启事务.
* 4.完成增删改查
* 5.提交(回滚)
* 6.释放资源
*/
在这里插入图片描述
EntityManagerFactory的创建过程比较浪费资源:
· 内部维护了数据库信息
· 维护了缓存信息
· 维护了所有实体管理器对象
· 根据配置信息创建了数据库表。
· 是一个线程安全的对象。
解决思路,创建一个公共的对象,静态代码块的形式创建EntityManagerFactory。

entityManager方法:
presist:保存
merge:更新
remove:删除
find/getRefrence:根据id查询 区别是立即加载与延迟加载
getRefrence不会立即发送sql语句查询数据库,当调用查询结果对象的时候,才会发送。getRefrence获取的对象是动态代理的对象。

transaction事务:
begin:开启事务
commit:提交事务
rollback:回滚

释放的时候与创建顺序相反

//根据实体类增加
em.persist(customer);//保存操作
// 根据id查询 class:实体类字节码,参数2主键的取值
Customer customer = entityManager.find(Customer.class, 1L);
// . 根据主键删除 先查再删除,不能直接new一个实体类set主键
em.remove(customer)
// 更新 同样是查到以后在修改实体类,再merge


jpql查询

java Persistence query language
jap提供的面向对象的查询
jpql与sql的语法相似
步骤:
1.创建query对象entityManager.createQuery(String)
2.对参数赋值
3.发送查询并封装结果

1.查询全部
2.分页查询
3.统计查询
4.条件查询
5.排序

查询全部以及倒序查询
在这里插入图片描述
查询总数 count
在这里插入图片描述
唯一结果query.getSingleResult();

分页查询

在这里插入图片描述
在entityManager.createQuery(jpql)与getResultList之间进行赋值。

条件查询

在这里插入图片描述
query.setParameter(int index,Object o)参数一是占位符的位置,起始1,参数2为插入的字符。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值