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进行查询相关推荐

  1. JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放

    3.给上述生成的那个name字段:更改数据库中的字段名,是否为空,字段长度的设定,只需要   在Person.java文件中,加上 @Column(length=10,nullable=false,n ...

  2. JPA学习笔记---JPA实体Bean的建立+配置文件+junit测试+自动生成(对应实体Bean的)数据库表+插入数据

    2013-02-03 1.第一个JPA:JPA的配置文件的配置 a.新建web项目:JPATest b.在src目录下新建META-INF文件夹 c.在META-INF文件夹下:新建   persis ...

  3. JPA学习笔记---JPA理解---第一个JPA程序

    1. a.JPA和Hibernate是sun提出的java持久化的规范.JPA是Hibernate,和TopLink,JDO等ORM框架 基础上发展而来的. b.和jdbc类似,比如刚刚没有jdbc的 ...

  4. 微信小程序——数组操作 (增加删除修改遍历)map、filter、forEach、find的用法、二维数组,排序,求和、指定长度数组赋值

    一.数组的操作 Array.push() ->在数组后面继续插入内容 Array.pop() ->拿走数组最后一个内容 Array-shift()->拿走数组的第一个内容 (unsh ...

  5. mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法

    本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) creat ...

  6. Kotlin学习笔记12——数据类和密封类

    Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...

  7. C# 学习笔记(19)操作SQL Server下

    C# 学习笔记(19)操作SQL Server下 ADO.net操作数据库 这应该是比较老的技术了,以后有空的话学学 Linq /// <summary> /// 数据库使用类 /// & ...

  8. C# 学习笔记(18)操作SQL Server 中

    C# 学习笔记(18)操作SQL Server 中 数据库基础操作 SQL语法可以参考 菜鸟教程 或者微软官方的SQL示例 注意SQL不区分大小写 查 1.基础查询 --最基础的查询语句, selec ...

  9. C# 学习笔记(17)操作SQL Server 上

    C# 学习笔记(17)操作SQL Server上 安装SQL Server 微软官网 https://www.microsoft.com/zh-cn/sql-server/sql-server-dow ...

最新文章

  1. magento建立robots.txt文件
  2. Spring学习----IoC容器创建对象
  3. mysql导出入数据库报错_mysql数据库导出导入数据库的搜索结果-阿里云开发者社区...
  4. 自编码器及其相关模型
  5. bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】
  6. Spring3:类型安全依赖项注入
  7. 红旗桌面版本最新运用方式和题目问题解答100例-4
  8. TPC-C中跑赢Oracle的OceanBase,最近有何惊艳?
  9. javascript闭包_JavaScript闭包基本指南
  10. eclipse - 自动换行
  11. jpa 人大金仓数据库方言_KingBaseV8人大金仓数据库 | 大小写敏感问题
  12. drawLine()方法画粗线
  13. Jquery中BlockUI的遮罩效果详解
  14. #今日说码栏目#第四集 各类选择器
  15. 区块链金融的现状与展望
  16. ubuntu使用教程
  17. Linux命令之top命令
  18. 讲真,只有low逼才热衷于打脸
  19. 为什么人工智能工程师被戏称为“调参侠”?
  20. 什么是DDOS攻击?怎么抵抗DDOS攻击?

热门文章

  1. python记录(5)- find() 与 rfind()
  2. 习题3.5 求链表的倒数第m个元素 (20 分)
  3. ajax请求返回结果进入success还是error
  4. JAVA入门到精通-第7讲-成员方法-构造方法
  5. 学习 Python 的 14 张思维导图
  6. 我们做了一款无网远程运维的智能硬件,坐等运维工程师“翻牌”
  7. JAVA EE 开发中 常用的API包
  8. Linux系统管理-(12)-网络配置IP命令
  9. 也谈虚拟化的服务器选型,以及性能考虑
  10. python--openpyxl模块使用, 对excel表格的操作