会计考友 发表于 2012-8-4 12:37:27

JAVA基础:Hibernate数据查询(4)

以上两种方式编写的代码都使用相同的SQL语句来完成它们的功能,如下:   selectg.*, s.* from Group g
  left outer join Student s
  on g.id = s.group_id
  where g.name like '%2005'
  Native SQL查询
  本地SQL查询指的是直接使用本地数据库的SQL语言进行查询。这样做对于将 原来的SQL/JDBC程序迁移到Hibernate应用很有用
  创建一个基于SQL的Query
  Native SQL查询是通过SQLQuery接口来控制的,它通过调用Session.createSQLQuery()方法来获得。如:
  String sql = "select {s.*} from t_student s where s.age>22";
  //{}用来引用数据表的别名,{s.*}表示使用s来做为t_student表的别名
  SQLQuery sqlQuery = session.createSQLQuery(sql);
  sqlQuery.addEntity("s",Student.class);
  List list = sqlQuery.list();
  for(int i = 0 ; i < list.size(); i++)
  {
  Student stu = (Student)list.get(i);
  }
  //createSQLQuery(String sql)利用传入的sql参数构造一个SQLQuery实例。使用该方法时,还需要传入查询的实体类,因此在配合使用SQLQuery的addEntity()方法一起使用。
  命名SQL查询
  与HQL的命名查询相似,也可以将 本地的SQK查询语句定义在映射文件中,然后像调用一个命名HQL查询一样专题报道调用命名SQL查询。
  如:   
  

    select {s.*} from t_student s where s.age > 22
  ]]>
  
  
  配合以上配置我们可以如下编写代码来查询 Query query = session.getNamedQuery("QueryStudents");
  List list = query.list();
  for(int i = 0 ; i < list.size();i++)
  {
  Student stu = (Student)list.get(i);
  }
  也可以在命名查询是设定参数,如下:

    select {s.*} from t_student s where s.age > :age
  ]]>
  

  

会计考友 发表于 2012-8-4 12:37:28

JAVA基础:Hibernate数据查询(4)

</p>  程序代码: Query query = session.getNamedQuery("QueryStudents");
  query.setInteger("age",22);
  List list = query.list();
  for(int i = 0 ; i < list.size();i++)
  {
  Student stu = (Student)list.get(i);
  }自定义insert , update和delete语句:
  Hibernate 3.x的映射文件中新添加,,3个标记。可以使用这3个标记自定义自己的insert ,update,delete语句,如:
  
  insert into t_student(name,age,id) values(?,?,?)
  
  
  update t_student set name=?,age=? where id=?
  
  
  delete from t_student where id = ?
  
  对于以上自定义的SQL语句,要注意以下几点
  1:insert 和update语句中定义的字段必须和映射文件声明的属性相应,一个都不能少。
  2:在insert 和update语句中,属性出现的顺序必须和映射文件中的顺序一样。
  3:在insert语句中,主键id总是放在最后。
  在程序中实现以上自定义的insert语句如下: Student stu = new Student();
  stu.setName("Bill");
  stu.setAge(22);
  session.save(stu);如果不想在insert或update语句中包括所有属性,则可以在属性定义时 加上insert ="false"或update="false"如下:
  
  insert into t_student(age,id) values(?,?)
  
页: [1]
查看完整版本: JAVA基础:Hibernate数据查询(4)