-
常用方法
- 查询
String hql = "from User";
- 条件查询
替换占位符 ?
String hql = "from User where userId < ? and userName = ?";
替换占位符 :
string hql = "from User where userId < :aaa and userName = :bbb";
query.setParameter("aaa", 100);
query.setParameter("bbb", "李四");
- 模糊查询
String hql = "from User where userName like ?";
- uniqueResult() 查询一条数据
String hql = "from User where userId = ?";
User user = (User) query.uniqueResult();
- 查询总条数
String hql = "select count(*) from User ";
总条数接受必须使用Long
Long countItem = (Long)query.uniqueResult();
- 投影查询
先创建相对应的构造函数
语法:select new User(userName,userAge) form 对象
- 分页查询
其中注意两点:
setFirstResult(x) 指定从第 x 条开始查询,索引的位置为从0开始 ;
setMaxResults (y) 每页显示 y 条数据 ;
测试删除
String hql = "delete from User where userId = ?";
query.executeUpdate();
测试修改
String hql = "update User set userName = ? where userId = ?";
query.executeUpdate();
关联关系
在领域模型中, 类与类之间最普遍的关系就是关联关系.
分为 :一对一,一对多,多对一,多对一
- 场景
以 Customer 和 Order 为例: 一个用户能发出多个订单, 而一个订单只能属于一个客户. 从 Order 到 Customer 的关联是多对一关联; 而从 Customer 到 Order 是一对多关联
实体Customer和Order
|
public class Customer {
private Integer custId; private String custName; private Integer custSex; private Set<Order> orders =new HashSet<Order>(); } |
|
public class Order {
private Integer orderId; private String orderName; private Customer customer; } |
-
-
-
-
- 一对多
-
-
-
|
<class name="com.mr.hibernate.pojo.Customer" table="T_CUSTOMER"> <id name="custId" type="java.lang.Integer"> <column name="CUST_ID" /> <generator class="native" /> </id> <property name="custName" type="java.lang.String"> <column name="CUST_NAME" /> </property> <property name="custSex" type="java.lang.Integer"> <column name="CUST_SEX" /> </property> <set name="orders" cascade="save-update,delete"> <key> <column name="CUST_ID" /> </key> <one-to-many class="com.mr.hibernate.pojo.Order" /> </set> </class> |
-
<set> 元素来映射持久化类的 set 类型的属性
- name: 设定待映射的持久化类的属性的
-
<key> 元素设定与所关联的持久化类对应的表的外键
- column: 指定关联表的外键名
-
<one-to-many> 元素设定集合属性中所关联的持久化类
-
class: 指定关联的持久化类的类名
- 多对一
-
class: 指定关联的持久化类的类名
|
<class name="com.mr.hibernate.pojo.Order" table="T_ORDER"> <id name="orderId" type="java.lang.Integer"> <column name="ORDER_ID" /> <generator class="native" /> </id> <property name="orderName" type="java.lang.String"> <column name="ORDER_NAME" /> </property>
<many-to-one name="customer" column="CUST_ID" class="com.mr.hibernate.pojo.Customer" cascade="save-update,delete"></many-to-one> </class> |
-
<many-to-one> 元素来映射组成关系
- name: 设定待映射的持久化类的属性的名字
- column: 设定和持久化类的属性对应的表的外键
- class:设定待映射的持久化类的属性的类型
- 级联关系
cascade 属性, 它用于指定如何操纵与当前对象关联的其他对象.