4.6 Dao常用代码
大部分的代码都是以下的格式
1.根据主键查找整条数据:
关键代码是User user= (User) session.load(User.class, username);
注意事项:
a.必须用强制类型转换(User)
b.load的第一个参数是影射类.class的形式
c.第二个参数匹配的是user表的主键
d.当主键查找不存在的时候,会抛出ObjectNotFoundException的异常
d.以下是别的表的例子:
下面是jsp使用的例子:
代码解释:
27:声明userDao
28:使用userDao调用queryUserbyId函数,结果是一个User对象
55:把查询到的user对象的nickname属性显示在jsp页面上
nickname是昵称,网页上的显示效果如下
2.无条件查找所有数据
其中hql这个是Hibernate查询语言,和sql类似,它不需要select *,直接就是from User(注意User是影射类的名字,不是表名字)
以下是类似的代码:
查找所有Chapter
3.有条件查找数据
多用于根据某关键字查找数据
StringBuffer用来构建比较长的字符串,用append一直添加内容,比直接用“+”号效率高。其中role的值需要用单引号包起来,所以在最后还使用了一个append("'");
4.保存或更新
当传入的user有主键值,并且在数据库已经存在,那么是更新;如果不存在该主键,那么是插入新数据。
5.调用同一个dao里面的其他函数
有时候可以使用同一个dao的其他函数来帮助实现,例如查找用户名是否存在:
使用了queryUserbyId,先根据用户名查找,再判断user是不是null。
6. 如何在jsp页面使用查找的List结果的数据:
这是声明dao,这个dao的名字是classDao
IClassDao classDao = (IClassDao) SpringUtil.getBean("classDao", this.getServletContext());
根据用户名查找所有班级
List classList = classDao.queryClassByTeacherId(username);
接下来的for循环,每次生成一个option,效果就是这样:
7.分页查询
首先hibernate查询的时候,需要指定两个参数:从哪里开始、查多少个
里面的setFirstResult(start)决定了从哪里开始,setMaxResults(10)决定了查找10个。然后在前台的页面,增加页面的连接,把p作为一个页面参数,例如这样:
第一页
然后在jsp页面的最开始就把这个p的值取出来,传给queryGamesByPlatform方法。
if(pstr==null||pstr.equals("")){
pstr="0";
}
int p=Integer.parseInt(pstr);
List games = gameDao.queryGamesByPlatform("ios", p);
Session session=this.getSession();
Transaction tx=session.beginTransaction();
//代码逻辑
tx.commit();
session.close();
//返回值
public User queryUserbyId(String username){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
User user=null;
try{
user=(User)session.load(User.class,username);
}
catch(ObjectNotFoundException e){
user=null;
}
tx.commit();
session.close();
return user;
}
Class表: Clazz clazz=(Clazz)session.load(Clazz.class,id);
Chapter表:Chapter chapter=(Chapter)session.load(Chapter.class,chapterId);


public List queryAllUsers(){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
String hql="from User";
List result=session.createQuery(hql).list();
tx.commit();
session.close();
return result;
}
public List queryAllChapters(){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
String hql="from Chapter";
List result=session.createQuery(hql).list();
tx.commit();
session.close();
return result;
}
//通过角色查找用户
public List queryUsersByRole(String role){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
StringBuffer buffer=new StringBuffer("from User where role='")
.append(role).append("'");
List users=session.createQuery(buffer.toString()).list();
tx.commit();
session.close();
return users;
}
public void saveOrUpdate(User user){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
session.saveOrUpdate(user);
tx.commit();
session.close();
}
public boolean isUsernameExist(String username){
User user=this.queryUserbyId(username);
if(user != null)
return true;
else
return false;
}


public List queryGamesByPlatform(String os,int page){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
int start=page*10;
StringBuffer buffer=new StringBuffer("from Game where platform='")
.append(os).append("'");
List games=session
.createQuery(buffer
.toString()).setFirstResult(start).setMaxResults(10).list();
tx.commit();
session.close();
return games;
}