在上一章中已经搭建好了一个hibernate的环境,那么这一章我们就使用这个环境来进行基本CRUD。在这之前我们先了解一个东西:主键生成策略。就是当向数据库表中插入记录的时候,这个记录的主键该如何生成.用法:将hbm.xml文件中<id>节点下的 <generator/>节点中的class 改成以下关键字即可。以下是简介版。推荐使用uuid

01 assigned
主键由外部程序负责生成,在 save() 之前必须指定一个,Hibernate不负责维护主键生成。也就是可以每次指定主键。该方式不推荐

02 increment
这种方式在每次插入前,需要通过“select max(主键) from 表名 ”这种方式先查询最大ID,然后通过ID+1来作为新的主键值。这种方式也不推荐,因为这样会出现线程安全问题。

03 identity
identity由底层数据库生成标识符。identity是由数据库自己生成的,但这个主键必须设置为自增长,使用identity的前提条件是底层数据库支持自动增长字段类型,如DB2、SQL Server、MySQL、Sybase和HypersonicSQL等,Oracle这类没有自增字段的则不支持。

04 sequence
采用数据库提供的sequence机制生成主键,需要数据库支持sequence。如oralce、DB、SAP DB、PostgerSQL、McKoi中的sequence。MySQL这种不支持sequence的数据库则不行

05 hilo
hilo(高低位方式high low)是hibernate中最常用的一种生成方式,需要一张额外的表保存hi的值。保存hi值的表至少有一条记录(只与第一条记录有关),否则会出现错误。可以跨数据库。

06 native
native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用sequence。

07 uuid
UUID:Universally Unique Identifier,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字,标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

好了,接下来开始这章的主要内容。hibernate的三种方式实现CRUD。首先在src/test/java文件夹下新建package(com.test),新建类 Test.类中写一个方法叫做temp,加上@Test标记

@Test
public void temp() { }

我们可以在cfg.xml中的<session-factory>节点中添加如下代码,以便在控制台来查看我们提交的sql语句。方便修改错误。

      <!--显示sql语句 -->
<property name="show_sql">true</property>
<!--格式化Hibernate的SQL输出语句。 -->
<property name="format_sql">true</property>

在temp方法中写上如下代码:代码写完后选择项目鼠标右键Run As ->Junit Test 运行

第一种:Hibernate提供的Query By Criteria API来查询对象 即QBC。

增加:

        //添加一条数据
// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// 开启事物
Transaction transaction = session.beginTransaction();
// 实例化对象
Student st = new Student();
st.setName("王五");
st.setSex("男");
st.setAddress("长沙");
//提交数据
session.save(st);
// 提交事物
transaction.commit();
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

查询单个:

        // 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// 开启事物
//Transaction transaction = session.beginTransaction();
// 根据主键得到对象(查询单个记录)
Student st = session.get(Student.class, );
System.out.println(st);
// 提交数据
// session.save(st);
// 提交事物
// transaction.commit();
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

修改:

      // 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// 开启事物
Transaction transaction = session.beginTransaction();
// 根据主键得到对象(查询单个记录)
Student st = session.get(Student.class, );
// 设置修改值
st.setName("李四");
// 提交数据 saveOrUpdate意为:存在修改,不存在增加 修改也可以用Update
session.saveOrUpdate(st);
System.out.println(st);
// 提交事物
transaction.commit();
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

查询所有:

    // 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// 开启事物
// Transaction transaction = session.beginTransaction();
// 查询所有记录
List<Student> ls = session.createCriteria(Student.class).list();
for (Student student : ls) {
System.out.println(student);
}
// 提交数据 saveOrUpdate意为:存在修改,不存在增加 修改也可以用Update
// session.saveOrUpdate(st);
// 提交事物
// transaction.commit();
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

删除:

    // 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// 开启事物
Transaction transaction = session.beginTransaction();
// 根据主键得到对象(查询单个记录)
Student st = session.get(Student.class, );
// 提交数据
session.delete(st);
// 提交事物
transaction.commit();
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

第二种:Hibernate官方推荐的标准查询Hibernate Query Language 即HQl查询

查询所有: 注意:用HQL查询from后面接的是实体类名

    // 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();

List<Student> ls = session.createQuery("from Student").list();
         for (Student student : ls) {
         System.out.println(student);
          }

// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

查询单个属性:

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
List<String> ls = session.createQuery("select name from Student").list();
for (String student : ls) {
System.out.println(student);
} // 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

查询多个属性:object[]实现

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession(); List<Object[]> ls = session.createQuery("select name,sex,age from Student").list();
for (Object[] student : ls) {
System.out.println(student[] + "----" + student[] + "----" + student[]);
} // 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

查询多个属性:构造方法实现(先要在实体类中重载构造方法)

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
List<Student> ls = session.createQuery("select new Student(name,sex) from Student").list();
for (Student student : ls) {
System.out.println(student);
} // 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

条件查询:

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// List<Student> ls = session.createQuery("from Student where age
// between ? and ?").setInteger(0, 10).setInteger(1, 50).list();
List<Student> ls = session.createQuery("from Student where age between :begin and :end")
.setParameter("begin", ).setParameter("end", ).list();
for (Student student : ls) {
System.out.println(student);
}
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

聚合函数:

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
String parm = session.createQuery("select max(age) from Student").uniqueResult().toString();
System.out.println(parm);
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

排序:

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
List<Student> ls = session.createQuery("from Student order by age desc").list();
for (Student student : ls) {
System.out.println(student);
}
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

分组:构造方法实现(先要在实体类中重载构造方法)

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// List<Student> ls = session.createQuery("select new
// Student(sex,max(age)) from Student group by sex").list();
List<Object[]> ls = session.createQuery("select sex,max(age) from Student group by sex").list();
for (Object[] student : ls) {
System.out.println(student[] + "--" + student[]);
}
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

Like:

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
List<Student> ls = session.createQuery("from Student where name like ?").setParameter(, "%1%").list();
for (Student student : ls) {
System.out.println(student);
}
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

分页:

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
List<Student> ls = session.createQuery("from Student").setFirstResult().setMaxResults().list();
for (Student student : ls) {
System.out.println(student);
}
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

修改:

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// 开启事物
Transaction transaction = session.beginTransaction();
session.createQuery("update Student set name = :name where age=10").setParameter("name", "哈哈").executeUpdate(); // 提交事物
transaction.commit();
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

删除:

// 获取配置信息
Configuration configuration = new Configuration().configure();
// 得到Session工厂
SessionFactory factory = configuration.buildSessionFactory();
// 得到Session
Session session = factory.openSession();
// 开启事物
Transaction transaction = session.beginTransaction();
session.createQuery("delete Student where age=?").setParameter(, ).executeUpdate();
// 提交事物
transaction.commit();
// 关闭seeion
session.close();
// 关闭SessionFactory
factory.close();

第三种:原生态sql

这种方式基本不常用,所以就简单介绍下,具体的自己百度吧

//获取所有查询结果
session.createSQLQuery("select * from note").list();
//仅获取第一条结果
session.createSQLQuery("select * from note where id = 1").uniqueResult();

初学者易上手的SSH-hibernate02 三种查询方式的更多相关文章

  1. Hibernate的Api以及三种查询方式

    Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) ...

  2. hibernate的三种查询方式

    hibernate的三种查询方式 目录 hibernate的三种查询方式 1.HQL查询 1.1.SQL概述 1.2.实体查询 1.3.带where的查询 1.3.属性查询 1.4.实体的更新和删除 ...

  3. SSH端口三种转发方式

    本地转发 假设有ssh服务器B,telnet服务器C被防火墙与外界隔离,此时外部主机A无法直接访问C服务器. 此时可以通过本地转发的方式让A与C借助B服务器通过ssh协议通信. client fire ...

  4. EF提供的三种查询方式

    這邊簡單介紹一下,ADO.Net Entity Framework 提供的三種查詢方式, Linq to Entities Query Builder Mothed Entity SQL Langua ...

  5. django 神奇的双下划线,通过外键的三种查询方式

    一,用于跨表操作 只要是object后面字符串都是用双下划线__.其它地方用点. 如:的values中的group_code__name.group_code是一个外键 def list(reques ...

  6. mybatis学习四 mybatis的三种查询方式

    <select id="selAll" resultType="com.caopeng.pojo.Flower"> select * from fl ...

  7. Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...

  8. linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用

    ---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10  一.虚拟网络三种连接方式 当在V ...

  9. Android平台中实现对XML的三种解析方式

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

随机推荐

  1. 201521123018 《Java程序设计》第2周学习总结

    1. 本章学习总结 * String类 * Java数组Array的使用 2. 书面作业 Q1.(1) 使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)? (2)分析Stri ...

  2. 201521123013 《Java程序设计》第12周学习总结

    1. 本章学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示. Q ...

  3. 201521123016《JAVA程序设计》第1周学习总结

    本周学习总结 认识了Java包括JDK:Java开发工具包:JRE:Java执行环境:JVM:Java虚拟机 学习了一些JAVA基本语法,如:public class:public static vo ...

  4. 语句的分号、逗号和函数中var的使用

    1语句 分号 语句的结尾的分号不是必须的,但建议不要省略它,避免错误. 2逗号 1同时定义多个变量用逗号分开 2数组的最后一位,建议不要加上逗号,在有的浏览器中会导致,在逗号后添加一个undefine ...

  5. 微软云Linux服务器 Mysql、tomcat远程连接错误解决办法

    在微软云linux服务器成功配置好mysql.tomcat,通过外部链接却发现一直错误.Mysql 一直提示错误代码2003, tomcat连接一直提示EOF. 反复检查配置都无问题,最后得知是微软云 ...

  6. JS(二)

    上周给大家介绍了一下JS基础中一点东西,今天给大家介绍一下JS基础中一个重要部分,循环和函数. 04-JS中的循环结构 一.[循环结构的步骤] 1.首先要先声明循环变量. 2.判断循环条件 3.执行循 ...

  7. linux文件权限解析(摘)

    用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组 所有者 一般为文件的创建 ...

  8. jquery模板下载网站

    jquery模板下载网站 http://www.jqshare.com/

  9. IDEA- idea代码调试debug

    IDEA有很多的快捷键,下面整理Debug的快捷键,方便自己使用!(阅读本篇可能花费您2分钟,需要多的实践练习) F9 resume programe 恢复程序 Alt+F10 show execut ...

  10. [bzoj1059] [ZJOI2007] 矩阵游戏 (二分图匹配)

    小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选 ...