前言
当我们想要精确的查找某一个数据库中的信息时,最理想的方法就是通过sql语句查询,一般hibernate中可以通过query接口来写语句进行查询,这个语句可以使sql,hql,当然推荐的是hql,事实上我认为hql和sql基本差不多
一:Query接口
Query接口类型的对象可以对数据库操作,它可以使用Hql和原生SQL(native Sql)对数据库操作.官方推荐使用Hql语句
先来看一个例子
测试代码:
分析:这里用了uniqueResult()方法 ,如果我们检索一个对象,明确知道最多只有一个对象,则建议使用该方法:
如果是取出集合对象,则使用如下方法:
测试代码:
由此我们可以发现,使用list可以取出集合对象,同时方法里面写想要的hql语句
二:HQL简单语法
HQL是面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的;HQL中查的是对象而不是表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:
Query q = session.createQuery(hql);
1:between.. and..
测试代码:
List
list=session.createQuery(“from User where id between 0 and 2”).list();
2:in /not in
List
list=session.createQuery(“from User where id in (1,2)”).list();
其他如group by,having,聚集函数等都类似于sql语句,换汤不换药。
参数绑定:
先看例子:
|
|
主要通过set与?的形式来注入参数,注意这里第一个?对应set的序号为0
使用绑定参数的好处:
1.可读性好.
2.性能提高.
3.防止sql注入
HQL语句远不止这些,这里只简单介绍了其中一些,
三:映射文件的配置
映射文件的内容繁多,这里只简单介绍其中一些常见属性。大体说来,映射文件主要对class的映射,还包括属性,属性又分为主键,普通属性和集合属性,甚至还有复合属性,每种属性都需要进行不同的配置。
先从入门程序中的例子说起:
其中:package : 表示该类在哪个包下,name : 表示类名 table 表示 该类和哪个表映射
同时在class内部可以配置各种属性
主键:
主键就是持久化类中标识属性,用于唯一标识该对象,主要通过
Name :表示类的哪个属性是主键 必须指定
Column:指定在数据库中主键对应的列明 不必须指定
Type:与数据库中对应字段类型一致 不必须指定
例外:主键需指定主键生产策略,即generator,一般用于自增长,针对不同数据库,关键词不一样,由于是mysql,所以自增长选择increment
以上的代码表示:
|
|
普通属性:
使用
Type,column,not-null(是否允许为空),lazy(是否支持延迟加载,默认为false不支持),
代码如下:
|
|