package com.test;

import com.demo.User;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import java.util.Arrays;
import java.util.List; /*
* 没有借住HibernateUtil小工具
*/
public class crudTest { private static SessionFactory sessionFactory; // 工厂只有一个 根据配置文件来生成的
static {
Configuration cfg = new Configuration();
// cfg.configure();//默认自动配置src下的hibernate.cfg.xml
// cfg.addResource("com/demo/user.hbm.xml");//增加一个映射文件 在配置里面已经配置过了)
// cfg.addClass(User.class);//去user类所在的包中查找名称为User,后缀为.hbm.xml的文件
cfg.configure("hibernate.cfg.xml");// 读取指定的主配置文件(位置也可不需指定,默认自动查找src下的cfg.xml)
sessionFactory = cfg.buildSessionFactory(); // 生成session工厂
} @Test
public void testSave() throws Exception {
User u = new User();
u.setName("bb");
u.setPassword("");
u.setType("root"); Session ses = sessionFactory.openSession(); // 打开一个新的session
Transaction ts = ses.beginTransaction(); // 开始事务---- 创建事务的对象ts try {
ses.save(u);// 往表user1存数据
ts.commit();// 提交事务
} catch (HibernateException he) {
he.printStackTrace();
System.out.println("死了");
ts.rollback();//事务的回滚
} finally {
ses.close();
sessionFactory.close();
System.out.println("插入成功");
}
} @Test
public void testGet() throws Exception {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction(); User user = (User) session.get(User.class, );// 获取User表中的字段1
System.out.println(user);// toString方法已经重写 [User:id=1,name=hoobey,password=456,type=admin] tx.commit();
session.close();
} @Test
public void testHQL() {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hql = null; // 执行查询
// 1.简单的查询
/* hql = "FROM User"; */ // 2.带上过滤条件以及排序from User as u --使用别名 as可以省略
/* hql="from User u where u.id = 1"; */
// 3.指定select子句
hql = "select u.id , u.name from User u";//查询多个指定的列时 返回的是数组 输出使用Array.toString() List list = session.createQuery(hql).list();
for(Object obj : list){
if(obj.getClass().isArray()){
System.out.println(Arrays.toString((Object[])obj));//查询返回的数组时
}else{
System.out.println(obj);//查询返回的是原属性的类型时 直接输出 }
}
}
// ---------------第二部分的学习----------------------------- // 1,聚集函数:count(), max(), min(), avg(), sum()
// hql = "SELECT COUNT(*) FROM User"; // 返回的结果是Long型的
// hql = "SELECT min(id) FROM Employee"; // 返回的结果是id属性的类型
// Number result = (Number) session.createQuery(hql).uniqueResult();
// System.out.println(result.getClass());
// System.out.println(result); // 2,分组: Group By ... Having
// hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name";
// hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1";
// hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1";
// ---
// hql = "SELECT e.name,COUNT(e.id) " + //
// "FROM Employee e " + //
// "WHERE id<9 " + //
// "GROUP BY e.name " + //
// "HAVING count(e.id)>1 " + //
// "ORDER BY count(e.id) ASC";
// ---
// hql = "SELECT e.name,COUNT(e.id) AS c " + //
// "FROM Employee e " + //
// "WHERE id<9 " + //
// "GROUP BY e.name " + //
// "HAVING count(e.id)>1 " + // 在having子句中不能使用列别名
// "ORDER BY c ASC"; // 在orderby子句中可以使用列别名 // 3,连接查询 / HQL是面向对象的查询
// >> 内连接(inner关键字可以省略)
// hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d";
// hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d";
// >> 左外连接(outer关键字可以省略)
// hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";
// >> 右外连接(outer关键字可以省略)
// hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d";
// 可以使用更方便的方法
// hql = "SELECT e.id,e.name,e.department.name FROM Employee e"; // 4,查询时使用参数
// >> 方式一:使用'?'占位
// hql = "FROM Employee e WHERE id BETWEEN ? AND ?";
// List list = session.createQuery(hql)//
// .setParameter(0, 5)// 设置参数,第1个参数的索引为0。
// .setParameter(1, 15)//
// .list(); // >> 方式二:使用变量名
// hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax";
// List list = session.createQuery(hql)//
// .setParameter("idMax", 15)//
// .setParameter("idMin", 5)//
// .list(); // 当参数是集合时,一定要使用setParameterList()设置参数值
// hql = "FROM Employee e WHERE id IN (:ids)";
// List list = session.createQuery(hql)//
// .setParameterList("ids", new Object[] { 1, 2, 3, 5, 8, 100 })//
// .list(); // 5,使用命名查询
// Query query = session.getNamedQuery("queryByIdRange");
// query.setParameter("idMin", 3);
// query.setParameter("idMax", 10);
// List list = query.list(); // 6,update与delete,不会通知Session缓存
// >> Update
// int result = session.createQuery(//
// "UPDATE User e SET e.name=? WHERE user_id = 2")//
// .setParameter(0, "hghg")//
// .executeUpdate(); // 返回int型的结果,表示影响了多少行。
// System.out.println("result = " + result); // User user = (User)session.get(User.class, 1);
// System.out.println(user.getName());
// >> Delete
/*
* int result = session.createQuery(// "DELETE FROM Employee e WHERE id>15")// .executeUpdate(); // 返回int型的结果,表示影响了多少行。 System.out.println("result = " + result);
*/ // ----- 执行查询并显示结果
// // List list = session.createQuery(hql).list();
// for (Object obj : list) {
// if (obj.getClass().isArray()) {
// System.out.println(Arrays.toString((Object[]) obj));
// } else {
// System.out.println(obj);
// }
// } tx.commit();
session.close();
}
}

hibernate的入门crud的更多相关文章

  1. Hibernate从入门到精通(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...

  2. Hibernate从入门到精通(十)多对多单向关联映射

    上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...

  3. Hibernate从入门到精通(九)一对多双向关联映射

    上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映射,即在一的 ...

  4. Hibernate从入门到精通(八)一对多单向关联映射

    上次的博文Hibernate从入门到精通(七)多对一单向关联映射我们主要讲解了一下多对一单向关联映射,这次我们继续讲解一下一对多单向映射. 一对多单向关联映射 在讲解一对多单向关联之前,按照我们的惯例 ...

  5. Hibernate从入门到精通(七)多对一单向关联映射

    上次的博文Hibernate从入门到精通(六)一对一双向关联映射中我们介绍了一下一对一双向关联映射,本次博文我们讲解一下多对一关联映射 多对一单向关联映射 多对一关联映射与一对一关联映射类似,只是在多 ...

  6. Hibernate从入门到精通(六)一对一双向关联映射

    在上次的博文Hibernate从入门到精通(五)一对一单向关联映射中我们讲解了一下一对一单向关联映射,这次我们继续讲解一下与之对应的一对一双向关联映射. 一对一双向关联 与一对一单向关联映射所不同的的 ...

  7. Hibernate从入门到精通(五)一对一单向关联映射

    上次的博文中Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理多个相关对象和 ...

  8. Hibernate从入门到精通(四)基本映射

    映射的概念 在上次的博文Hibernate从入门到精通(三)Hibernate配置文件我们已经讲解了一下Hibernate中的两种配置文件,其中提到了两种配置文件的主要区别就是XML可以配置映射.这里 ...

  9. Hibernate从入门到精通(三)Hibernate配置文件

    在上次的博文Hibernate从入门到精通(二)Hibernate实例演示我们已经通过一个实例的演示对Hibernate的基本使用有了一个简单的认识,这里我们在此简单回顾一下Hibernate框架的使 ...

随机推荐

  1. SqlServer 查看备份文件中逻辑文件信息的Sql语句

    RESTORE FILELISTONLY FROM DISK = 'D:\All\DataBase\(2013-12-18)-1.bak' 用来查看备份文件中的逻辑文件信息. 相关信息:SqlServ ...

  2. 《Linux就是这个范儿》

    <Linux就是这个范儿> 基本信息 作者: 赵鑫磊    (加)Jie Zhang(张洁) 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115359360 上架时间:2 ...

  3. Restful API 的设计规范(转)

    1. URI URI 表示资源,资源一般对应服务器端领域模型中的实体类.URI规范 不用大写; 用中杠-而不用下杠_; 参数列表要encode; URI中的名词表示资源集合,使用复数形式; 资源集合与 ...

  4. ADB与AVD的常见问题

    一.adb问题常用解决方法 若是模拟器启动正常,但是adb检测不到模拟器,我们给他一套不解释连招,下面教大家几招基础拳法. 1.基础拳法一:循环自动检测 下图那个小按钮,点它,狠狠的点它,然后点运行, ...

  5. LCA算法总结

    LCA问题(Least Common Ancestors,最近公共祖先问题),是指给定一棵有根树T,给出若干个查询LCA(u, v)(通常查询数量较大),每次求树T中两个顶点u和v的最近公共祖先,即找 ...

  6. WinPcap权威指南(三):ARP协议

    ARP协议在局域网内使用的非常广泛,它的数据包类型分为请求包和答复包.Windows系统内部有一个缓冲区,保存了最近的ARP信息,可以在cmd下使用命令arp -a来显示目前的缓存,或者使用命令arp ...

  7. textrank的方法,大概懂了

    https://www.cnblogs.com/clover-siyecao/p/5726480.html 介绍了textrank. 不过我觉得对于长文本,textrank才有用些.短文本的话,估计没 ...

  8. 不得不知的ES6十大特性

    ES6(ECMAScript2015)的出现,无疑给前端开发人员带来了新的惊喜,它包含了一些很棒的新特性,可以更加方便的实现很多复杂的操作,提高开发人员的效率. 本文主要针对ES6做一个简要介绍. 主 ...

  9. BiLSTM-CRF模型中CRF层的解读

    转自: https://createmomo.github.io/ BiLSTM-CRF模型中CRF层的解读: 文章链接: 标题:CRF Layer on the Top of BiLSTM - 1  ...

  10. CRF分词的纯Java实现

    与基于隐马尔可夫模型的最短路径分词.N-最短路径分词相比,基于随机条件场(CRF)的分词对未登录词有更好的支持.本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用  ...