JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPOL进行查询
创梦技术交流平台:资源下载,技术交流,网络赚钱:
交流qq群:1群:248318056
2群:251572072
技术交流平台:cre.iqee.cn
博文相关代码资源下载地址:cre.iqee.cn
---------------------------
2013-02-04
JPA数据的操作:增加,删除,修改,获取,使用JPOL进行查询
CRUD操作
package junit.test;
import javax.persistence.Query;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.hibernate.Session;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.Request;
import com.credream.bean.Person;
public class PersonTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Ignore
@Test
public void save(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();//开始事物
//Session.save()-->Persist();
em.persist(new Person("创梦网络")); //持久化到数据库
em.getTransaction().commit();
em.close();
factory.close();
}
@Ignore
@Test
public void getPerson(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();//开始事物
//Session.save()-->Persist();
Person person=em.find(Person.class, 1);//相当于hibernate的get()方法
System.out.println(person.getName());
//注意读取数据的时候是不需要开事物的
//只有更改的时候才需要;
em.getTransaction().commit();
em.close();
factory.close();
}
@Ignore
@Test
public void getPerson2(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
/*EntityManagerFactory
* 其实就是对hibernate的sessionFactory做了一个封装,hibernate的jpa
实现代码
* */
/*执行这句话的时候的原理
* 利用jpa类似于jdbc的驱动类:持久化驱动类,到/WEB-INF/services/有
一个文件,文件中方有
* 各种jpa产品的驱动路径名称,中查找所有的jpa产品
* (hibernate,ibatis等等)的驱动,并且放到
* providers集合中,然后遍历,最先找到哪个jpa产品的驱动可以做jpa指
定的工作,就用哪一个jar包;
*
* */
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();//开始事物
//Session.save()-->Persist();
Person person=em.getReference(Person.class, 1);
//Person person=em.getReference(Person.class, 8);
//如果不存在返回的是null值
//并且在这句话出现异常System.out.println(person.getName());
//上面得到的代理对象并没有实现数据库的查询
//相当于hibernate的load方法
System.out.println(person.getName());
//这个方法当用到person.getName()的时候才发生加载数据
//注意读取数据的时候是不需要开事物的
//只有更改的时候才需要;
em.getTransaction().commit();
em.close();
//System.out.println(person.getName());
//写在这里的话会报错,因为在真正访问数据库的时候,管理bean已经关闭了
//EntityManager
factory.close();
}
@Ignore
@Test
public void updatePerson(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();//开始事物
//Session.save()-->Persist();
Person person=em.getReference(Person.class, 1);
person.setName("一起创梦吧");
//在提交之前,jpa中是放在批处理的缓存中.
em.getTransaction().commit();
em.close();
factory.close();
}
/*
* 新建状态:new Person("创梦网络")
托管状态:1.跟事物关联 2.托管状态的时候 数据才可以更新到数据库
person.setName("一起创梦吧");
游离状态
删除状态*/
@Ignore
@Test
public void updatePerson2(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();//开始事物
//Session.save()-->Persist();
Person person=em.find(Person.class, 1);
em.clear();//把实体管理器中的所有实体变成游离状态
person.setName("一起创梦吧");
//这时候不会报错,但是不会修改数据库
em.merge(person);
/*这时候就可以了替换了,用于把游离状态的更新同步到数据库*/
//在提交之前,jpa中是放在批处理的缓存中.
em.getTransaction().commit();
em.close();
factory.close();
}
@Ignore
@Test
public void delete(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();//开始事物
//Session.save()-->Persist();
Person person=em.find(Person.class, 1);
em.remove(person);
em.getTransaction().commit();
em.close();
factory.close();
}
@Ignore
@Test
public void query(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
//sql注入攻击
//String name=request.getParameter("name");
//select o from Person o where o.id=;delete form pserson
//;delete form pserson这个时候会删除表中的所有数据
//select o from Person o where o.id=:id
//select count(o) from Person o where o.id=?1
//取得总数 1的作用是从id为1开始
Query query=em.createQuery("select o from Person o where o.id=?1");
//注意不是sql语言 jpaSql,=后面不要把值写到后面
query.setParameter(1, 2);
//query.list();hibernate中得到的是;select count(*) from person
//query.uq()可以得到结果;
//Session session=null;
//session.createQuery("").uniqueResult();相当于query.getSingleResult();
//或者是这样:
//List<Persons> persons=query.getResultList();
/*for(Person person: persons){
System.out.println(person.getName());
}*/
Person person=(Person) query.getSingleResult();
System.out.println(person.getName());
em.close();
factory.close();
}
@Ignore
@Test
public void deletequery(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();//注意要更新的时候需要开启事物
Query query=em.createQuery("delete from Person o where o.id=?1");
query.setParameter(1, 2);
query.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
}
//@Ignore
@Test
public void updatequery(){
EntityManagerFactory
factory=Persistence.createEntityManagerFactory("credream");
//执行上面这条语句的时候可以反向生成表
//--->sessionFactory-->session--->begin事物
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();//注意要更新的时候需要开启事物
//注意jpql的使用
Query query=em.createQuery("update Person o set o.name=:name o where
o.id=:id");
query.setParameter("name", "credream");
query.setParameter("id", 2);
query.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
}
}
---------------------------------
增加,删除,修改的原理:
使用了类似于jdbc的驱动类,会在类路径下查找所有的可用驱动,这个驱动类是:
Persistence.java类实现:在WEB-INF/services/在这里查找一个资源名称,是
javax.persistence.spi.peritenceProvider这个文件;如果找到这个文件后,就遍历,
放到集合中,这样查找驱动,然后连接,创建entityManagerFactory,这个文件可以在
hibernate-entitymanager.jar包中的META-INF/services/下找到,entitymanager是对
sessionFactory做了一层封装;
-------------------------------------------------------------------------
JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询相关推荐
- JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放
3.给上述生成的那个name字段:更改数据库中的字段名,是否为空,字段长度的设定,只需要 在Person.java文件中,加上 @Column(length=10,nullable=false,n ...
- JPA学习笔记---JPA实体Bean的建立+配置文件+junit测试+自动生成(对应实体Bean的)数据库表+插入数据
2013-02-03 1.第一个JPA:JPA的配置文件的配置 a.新建web项目:JPATest b.在src目录下新建META-INF文件夹 c.在META-INF文件夹下:新建 persis ...
- JPA学习笔记---JPA理解---第一个JPA程序
1. a.JPA和Hibernate是sun提出的java持久化的规范.JPA是Hibernate,和TopLink,JDO等ORM框架 基础上发展而来的. b.和jdbc类似,比如刚刚没有jdbc的 ...
- 微信小程序——数组操作 (增加删除修改遍历)map、filter、forEach、find的用法、二维数组,排序,求和、指定长度数组赋值
一.数组的操作 Array.push() ->在数组后面继续插入内容 Array.pop() ->拿走数组最后一个内容 Array-shift()->拿走数组的第一个内容 (unsh ...
- mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法
本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) creat ...
- Kotlin学习笔记12——数据类和密封类
Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...
- C# 学习笔记(19)操作SQL Server下
C# 学习笔记(19)操作SQL Server下 ADO.net操作数据库 这应该是比较老的技术了,以后有空的话学学 Linq /// <summary> /// 数据库使用类 /// & ...
- C# 学习笔记(18)操作SQL Server 中
C# 学习笔记(18)操作SQL Server 中 数据库基础操作 SQL语法可以参考 菜鸟教程 或者微软官方的SQL示例 注意SQL不区分大小写 查 1.基础查询 --最基础的查询语句, selec ...
- C# 学习笔记(17)操作SQL Server 上
C# 学习笔记(17)操作SQL Server上 安装SQL Server 微软官网 https://www.microsoft.com/zh-cn/sql-server/sql-server-dow ...
最新文章
- magento建立robots.txt文件
- Spring学习----IoC容器创建对象
- mysql导出入数据库报错_mysql数据库导出导入数据库的搜索结果-阿里云开发者社区...
- 自编码器及其相关模型
- bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】
- Spring3:类型安全依赖项注入
- 红旗桌面版本最新运用方式和题目问题解答100例-4
- TPC-C中跑赢Oracle的OceanBase,最近有何惊艳?
- javascript闭包_JavaScript闭包基本指南
- eclipse - 自动换行
- jpa 人大金仓数据库方言_KingBaseV8人大金仓数据库 | 大小写敏感问题
- drawLine()方法画粗线
- Jquery中BlockUI的遮罩效果详解
- #今日说码栏目#第四集 各类选择器
- 区块链金融的现状与展望
- ubuntu使用教程
- Linux命令之top命令
- 讲真,只有low逼才热衷于打脸
- 为什么人工智能工程师被戏称为“调参侠”?
- 什么是DDOS攻击?怎么抵抗DDOS攻击?
热门文章
- python记录(5)- find() 与 rfind()
- 习题3.5 求链表的倒数第m个元素 (20 分)
- ajax请求返回结果进入success还是error
- JAVA入门到精通-第7讲-成员方法-构造方法
- 学习 Python 的 14 张思维导图
- 我们做了一款无网远程运维的智能硬件,坐等运维工程师“翻牌”
- JAVA EE 开发中 常用的API包
- Linux系统管理-(12)-网络配置IP命令
- 也谈虚拟化的服务器选型,以及性能考虑
- python--openpyxl模块使用, 对excel表格的操作