Hibernate中利用Criteria进行数据库表数据的增加查询。
2018-01-06 17:32
507 查看
Hibernate 提供了操纵对象和相应的 RDBMS 表中可用的数据的替代方法。一种方法是标准的 API,它允许你建立一个标准的可编程查询对象来应用过滤规则和逻辑条件。
Hibernate Session 接口提供了 createCriteria() 方法,可用于创建一个 Criteria 对象,使当您的应用程序执行一个标准查询时返回一个持久化对象的类的实例.
1. 使用持久化注解(以JPA标准注解为主,如有需要使用hibernate本身提供的注解)将pojo转换为po
具体步骤(建项目请参考前一篇博文):
a)在src目录下建包,并配置好hibernate.cfg.xml(如图)
b)进入By database Scheam
c)去数据库创建相应表
d)注意如下配置选择
e)至此我们会在src/com包下生成StudentInfoEntity.java类
f)创建测试类进行增删改查,增删改都和前一篇博文一样,这里我们介绍一些查询方法
2. 查询条件的限制
可以使用 Criteria 对象可用的 add() 方法去添加一个标准的限制。
4、 分页查询
这里有两种分页标准接口方法:
Hibernate Session 接口提供了 createCriteria() 方法,可用于创建一个 Criteria 对象,使当您的应用程序执行一个标准查询时返回一个持久化对象的类的实例.
Criteria criteria=session.createCriteria(StudentInfoEntity.class); |
具体步骤(建项目请参考前一篇博文):
a)在src目录下建包,并配置好hibernate.cfg.xml(如图)
b)进入By database Scheam
c)去数据库创建相应表
d)注意如下配置选择
e)至此我们会在src/com包下生成StudentInfoEntity.java类
注解名 | 含义 |
@Entity | 被@Entity注解修饰的类,说明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名如果想改变这种默认的orm规则,就要使用 |
@Table | @Table注释指定了Entity所要映射带数据库表,其中@Table.name()用来指定映射表的表名。 如果缺省@Table注释,系统默认采用类名作为映射表的表名。实体Bean的每个实例代表数据表中的一行数据,行中的一列对应实例中的一个属性。 |
@Column | @Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,属性如下: 1)name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入; 2)unique:是否唯一; 3)nullable:是否允许为空; 4)length:对于字符型列,length属性指定列的最大字符长度; 5)insertable:是否允许插入; 6)updatetable:是否允许更新; 7)columnDefinition:定义建表时创建此列的DDL; 8)secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。 |
@Basic | @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 即为 @Basic fetch: 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER. (1)、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。 (2)、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。 |
@Id | @Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。@Id标注也可置于属性的getter方法之前。 |
2. 查询条件的限制
可以使用 Criteria 对象可用的 add() 方法去添加一个标准的限制。
//创建一个 Criteria 对象 Criteria criteria=session.createCriteria(StudentInfoEntity.class); //增加查询条件(user_name为“张三”的学生信息) criteria.add(Restrictions.eq("userName","张三")); //得到结果集 List<StudentInfoEntity> list=criteria.list(); //在控制台打印结果集 list.forEach(a-> Syste 4000 m.out.println("学生id:"+a.getId()+" 姓名:"+a.getUserName()+" 年龄: "+a.getUserAge()+" 性别:"+a.getUserSex()+" 身高:"+a.getUserHeight())); |
1. 基本查询
根据姓名查询特定学生信息 package com.pojo; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Restrictions; import java.util.List; public class queryByCondition { public static void main(String[] args) { //实例化Configuration Configuration config=new Configuration().configure(); //创建会话工厂 SessionFactory sf=config.buildSessionFactory(); //创建会话 Session session=sf.openSession(); //创建一个 Criteria 对象 Criteria criteria=session.createCriteria(StudentInfoEntity.class); //增加查询条件(user_name为“张三”的学生信息) criteria.add(Restrictions.eq("userName","张三")); //得到结果集 List<StudentInfoEntity> list=criteria.list(); //在控制台打印结果集 list.forEach(a-> System.out.println("学生id:"+a.getId()+" 姓名:"+a.getUserName()+" 年龄:"+a.getUserAge()+" 性别:"+a.getUserSex()+" 身高:"+a.getUserHeight())); //关闭会话 session.close(); //关闭会话工厂 sf.close(); } } |
Session session=sf.openSession(); //创建一个 Criteria 对象 Criteria criteria=session.createCriteria(StudentInfoEntity.class); //查询所有学生信息得到结果集 List<StudentInfoEntity> list=criteria.list(); //在控制台打印结果集 list.forEach(a-> System.out.println("学生id:"+a.getId()+" 姓名:"+a.getUserName()+" 年龄:"+a.getUserAge()+" 性别:"+a.getUserSex()+" 身高:"+a.getUserHeight())); |
//创建一个 Criteria 对象 Criteria criteria=session.createCriteria(StudentInfoEntity.class); //增加查询条件(年龄在20-30之间的所有学生信息) //criteria.add(Restrictions.gt("userAge ", 20)).add(Restrictions.lt("userAge ", 30)); criteria.add(Restrictions.between("userAge",new Integer(20),new Integer(30))); //得到结果集 List<StudentInfoEntity> list=criteria.list(); |
//创建一个 Criteria 对象 Criteria criteria=session.createCriteria(StudentInfoEntity.class); //增加查询条件(身高为null的学生信息) criteria.add(Restrictions.isNull("userHeight")); //得到结果集 List<StudentInfoEntity> list=criteria.list(); |
//创建一个 Criteria 对象 Criteria criteria=session.createCriteria(StudentInfoEntity.class); //增加查询条件(年龄等于25或者身高为null的学生对象) criteria.add(Restrictions.or(Restrictions.eq("userAge",new Integer(25)), Restrictions.isNull("userHeight"))); //得到结果集 List<StudentInfoEntity> list=criteria.list(); |
Session session=sf.openSession(); //创建一个 Criteria 对象 Criteria criteria=session.createCriteria(StudentInfoEntity.class); //根据id降序排列 criteria.addOrder(Order.desc("id")); //得到结果集 List<StudentInfoEntity> list=criteria.list(); //在控制台打印结果集 list.forEach(a-> System.out.println("学生id:"+a.getId()+" 姓名:"+a.getUserName()+" 年龄:"+a.getUserAge()+" 性别:"+a.getUserSex()+" 身高:"+a.getUserHeight())); |
//创建一个 Criteria 对象 Criteria criteria=session.createCriteria(StudentInfoEntity.class); //增加查询条件(查询"张三","王五","田七"三人信息) String[] names={"张三","王五","田七"}; criteria.add(Restrictions.in("userName",names)); //得到结果集 List<StudentInfoEntity> list=criteria.list(); |
这里有两种分页标准接口方法:
方法 | 描述 |
public Criteria setFirstResult(int firstResult) | firstResult属性设置查询起始行 |
public Criteria setMaxResults(int maxResults) | maxResults 属性设置需要查询的行数。 |
//创建一个 Criteria 对象 |
相关文章推荐
- JAVA+JDBC对数据库的数据进行增加、修改、删除、查询等操作
- 在Java的Hibernate框架中对数据库数据进行查询操作
- 在Java的Hibernate框架中对数据库数据进行查询操作
- 利用工具进行数据库数据的复杂查询 [转]
- SpringBoot入门-6(利用jpa连接hibernate,并进行生成表,对表的增加,删除,查询操作)
- 利用hibernate的criteria多条件查询时得到的数据有重复
- 练习题——Gson解析、利用JDBC连接数据库进行数据的存取及查询等的综合
- 在Java的Hibernate框架中对数据库数据进行查询操作
- 利用GSON对json数据中的时间类型字符串进行处理,并且进行数据库查询
- 学习日记(二)Hibernate用法:针对数据库表数据的增加,查询,更新,删除
- 利用OpenDataSource、OPENROWSET进行分布式查询和数据的导入导出
- Hibernate数据查询 利用关联关系操纵对象 Hibernate事务 Hibernate的Cache管理
- Hibernate利用Query接口进行HQL查询
- android利用servlet获取服务器数据库数据进行登录
- 用criteria进行关联查询--hibernate 的ResultTransformer
- Hibernate基础-使用Criteria进行查询
- 利用集合完成象数据库那样存储数据,并且可以简单查询,利用map存储学生信息
- hibernate利用crm当中进行组合查询
- 在WinForm中增加查询对话框对DataGridView数据进行循环查找
- 利用Sql Server2000的规则对数据库中的数据进行限制