4.5.2 实现
接下来我们来写实现类。
新建一个类,类名写上UserDao,一般dao的命名规则是表名+dao,接口的话在前面加一个大写的I,例如IUserdao
然后在SuperClass(超类)这里,点击右边的browse(浏览),在弹出框写上Hibernate,然后双击选中其中的HibernateDaoSupport,如图所示:
然后再添加接口IUserDao,类似这样:
按确定后代码如下:
这就是实现类,接下来我们来实现第一个方法,queryUserbyId,根据账号查询用户:
userValidate,这个函数根据用户名和密码验证能不能登录:
解释这堆代码,我们先来看看数据库里的user表是什么结构:
其中username是user表的主键
接下来再看看user表影射的java类是什么样子:
代码解释
1.开头的Session session = this.getSession();Transaction tx = session.beginTransaction();和结尾的tx.commit();session.close();是固定模式,大部分的dao都需要这样的开头和结尾。
2.User user = (User) session.load(User.class, userName);这行代码是Hibernate根据主键查询一条记录的方法,其中userName是主键
3.user对象就是根据用户名查询到的用户,if (user != null) 首先验证有没有这个用户,再验证user的密码和传进来的密码是否一致:
if (user.getPassword().equals(psw)) {
result = true;
}
如果一致表示可以登陆
4.result的初值是false,也就是默认不能登录,当条件成立的时候它的值才会改变,最后返回的就是result的值。
下面是实现保存或更新的代码,非常简洁,不用写update语句。那么它是怎么知道保存或更新到哪条记录呢?秘密就是这个user对象的对应”主键“的属性是否有值,如果有值,那么就会更新数据库对应的记录;如果没有值,就有可能是插入操作(当主键是自动生成的时候),或直接出错(当主键需要外部赋值的时候)。


public class UserDao extends HibernateDaoSupport implements IUserDao{
@Override
public boolean userValidate(String userName,String psw){
// TODO Auto-generated method stub
return false;
}
@Override
public void saveOrUpdate(User user){
// TODO Auto-generated method stub
}
@Override
public String queryNickName(String username){
// TODO Auto-generated method stub
return null;
}
@Override
public User queryUserbyId(String username){
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isUsernameExist(String username){
// TODO Auto-generated method stub
return false;
}
}
@Override
public User queryUserbyId(String username){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
User user=(User)session.load(User.class,username);
tx.commit();
session.close();
return user;
}
@Override
public boolean userValidate(String userName,String psw){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
boolean result=false;
User user=(User)session.load(User.class,userName);
if(user != null){
if(user.getPassword().equals(psw)){
result=true;
}
}
tx.commit();
session.close();
return result;
}

public class User implements java.io.Serializable{
private String username;
private String password;
private String role;
private String nickname;
private String createDate;
public User(){
}
public User(String username,String password,String role,String nickname,String createDate){
this.username=username;
this.password=password;
this.role=role;
this.nickname=nickname;
this.createDate=createDate;
}
public String getUsername(){
return this.username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return this.password;
}
public void setPassword(String password){
this.password=password;
}
public String getRole(){
return this.role;
}
public void setRole(String role){
this.role=role;
}
public String getNickname(){
return this.nickname;
}
public void setNickname(String nickname){
this.nickname=nickname;
}
public String getCreateDate(){
return this.createDate;
}
public void setCreateDate(String createDate){
this.createDate=createDate;
}
}
@Override
public void saveOrUpdate(User user){
Session session=this.getSession();
Transaction tx=session.beginTransaction();
session.saveOrUpdate(user);
tx.commit();
session.close();
}