使用HQL查询所有User记录
Session session = HibernateUitl.getOpenSession();
Transaction transaction = session.beginTransaction();
String hql="from com.lanou3g.User";
Query<User> query = session.createQuery(hql);
//预见结果集
//(多个就用list处理 单个就用uniqueResult处理)
List<User> list = query.list();
System.out.println(list);
transaction.commit();
session.close();
使用冒号占位符
Session session = HibernateUitl.getOpenSession();
Transaction transaction = session.beginTransaction();
//使用:问号占位符替代
//:后面相当于是占位符的名字
//在替换时 直接使用:后面的名字即可
//注意:冒号后面不要加空格 加了也会被算为名字的一部分
String hql="from com.lanou3g.User where?"+"username=:username and password=:password";
Query<User> query = session.createQuery(hql);
query.setParameter("username", "wanglong");
query.setParameter("password", "123");
User user = query.uniqueResult();
System.out.println(user);
transaction.commit();
session.close();
分页
Session session = HibernateUitl.getOpenSession();
Transaction transaction = session.beginTransaction();
String hql="from User";
Query<User> query = session.createQuery(hql, User.class);
//添加分页
//limit first,max
query.setFirstResult(0);
query.setMaxResults(2);
List<User> list = query.list();
System.out.println(list);
transaction.commit();
session.close();
无语句查询总记录数
Session session = HibernateUitl.getOpenSession();
Transaction transaction = session.beginTransaction();
//获取Criteria对象
Criteria criteria=session.createCriteria(User.class);
criteria.setProjection(Projections.rowCount());
Long num = (Long)criteria.uniqueResult();
System.out.println(num);
transaction.commit();
session.close();
配置一对多关系
<!-- 配置一对多关系
name 表示实体类对象中的属性名
column:两张表联系的外键
注意:外键名 必须填一致 否则会多创建一个外键出来
class:与哪个类进行联系(一对多)
-->
<!--
级联操作
作用:减化代码量(量不大)
cascade
save-update 级联保存和更新
delete 级联删除
all save-update+delete
建议:要写最多写到save-update
-->
<!--
inverse(反转)
默认值是 false 不放弃维护外键
true 放弃维护外键
作用:提高效率的
linkman能不能放弃维护外键?
一对多的表关系
如果要放弃维护外键关系
只能是一的一方放弃维护
-->
<set name="linkmans" cascade="save-update" inverse="true">
<key column="lkm_cust_id"></key>
<one-to-many class="Linkman"/>
</set>
配置多对一关系
<!-- 配置多对一的关系
name 表示多对一对象的属性名
class表示多对一对象的类
column表示外键
注意:上面在配置property时 不要重复配置外键
-->
<many-to-one name="customer" class="Customer" column="lkm_cust_id"></many-to-one>
配置多对多关系
<!-- 配置多对多关系
name 容器名字
table 中间表的名字
key column 中间表引用我的id
class 对应那个表的类名
column 对应那个表的外键(引用那个表的键)
-->
<!--
注意:多对多时 必须要有一方放弃时对外键的维护
-->
<set name="roles" table="sys_user_role" inverse="true">
<key column="user_id"></key>
<many-to-many class="Role" column="role_id"></many-to-many>
</set>
<set name="users" table="sys_user_role">
<key column="role_id"></key>
<many-to-many class="User" column="user_id"></many-to-many>
</set>