配置本地提示文件window–>preferences–>搜索xml catalog–>点user specified–>
add–>key type选uri key填http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd–>Location找hibernate-mapping-3.0
public class Demo4 {
/**
* 按条件的查询,写法很麻烦
*/
@Test
public void run6(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();
// 先获取到Criteria接口
Criteria criteria = session.createCriteria(User.class);
// 添加查询的条件 select * from t_user where age > 18
// Criterion 是Hibernate提供的条件查询的对象,想传入条件的使用的工具类Restrictions
// Restrictions提供的静态的方法,拼接查询的条件
criteria.add(Restrictions.gt("age", 18));
// 继续添加条件
criteria.add(Restrictions.like("name", "%小%"));
// 没有添加条件,查询所有的数据
List<User> list = criteria.list();
System.out.println(list);
tr.commit();
session.close();
}
数据库中一对多(1:n)关系
在javaBean中的表示,以客户与联系人为例
在1方添加private Set linkmans=new HashSet();
在n方添加private Customer customer;
/**
* 多对多的测试
* @author Administrator
*/
public class Demo2 {
/**
* 现在:张三用户,有2个角色,经理和演员
* 让张三没有演员角色
*/
@Test
public void run3(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 查询张三用户
User u1 = session.get(User.class, 1L);
// 查询角色
Role r2 = session.get(Role.class, 2L);
u1.getRoles().remove(r2);
tr.commit();
}
HQL语句
内连接
HQL内连接查询语句 例 List list=session.creatQuery(“from Customer c inner join c.linkmans”) 返回的的object数组即object[]
去除重复结果 例List list=session.creatQuery(" from Customer c inner join fetch c.linkmans") 返回的是实体对象即迫切连接
然后再Set set= new HashSet(list) //fetch仅在HQL中存在,用处将返回的数据变为实体