说明:本文来介绍在项目中集成Hibernate,并基于模板类(HibernateTemplate)使用Hibernate,本文只涉及Hibernate的保存方法。
一、下载Hibernate的jar包。
1、先进入官网:http://hibernate.org/。点击Hibernate ORM中的more,进入后点击Downloads,此时会发现,只能下载到最新版本的Hibernate,更早的版本提供在SourceForge或者Maven中。
2、这里选择更早的版本,点击页面提供的链接,进入SourceForge中,选择所需的版本进行下载,这里选择3.6.10.Final版本。
3、下载完后解压,得到如下目录结构的jar包。
二、将Hibernate的jar包导入到项目中
1、进入Project Settings中,选择Libraries,中间一栏点击“+”号新增,设置名称为Hibernate,之后选择应用的module为SpringPro。
2、点击Attach Classes...,选择Hibernate的jar包,下图所示选择的jar为需要用到的。
3、点击应用后,左边栏选择Modules,中间栏选择Web,右边栏的中间部分将Hibernate的jar包也复制到lib目录下。之后应用即可。
三、配置Hibernate
1、这里采用基于注解的方式配置Hibernate,首先需要在appliactionContext.xml文件中加入以下两段内容。
<!-- 配置一个sessionFactory,指定数据源、自动扫描包下带注解的实体类,设置Hibernate控制属性-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="packagesToScan" value="com.hzb.domain"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
</bean>
<!-- 配置 HibernateTempalte Bean -->
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate"
p:sessionFactory-ref="sessionFactory"/>
@Entity
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private int userId;
@Column(name = "user_name")
private String userName;
@Column(name = "password")
private String password;
@Column(name = "last_ip")
private String lastIp;
@Column(name = "last_visit")
private Date lastVisit;
}
@Repository
//使用 @Repository 定义一个dao的bean
public class UserDao {
@Autowired
//使用 @Autowired 将Spring容器中的bean JdbcTemplate注入进来
private JdbcTemplate jdbcTemplate;
@Autowired
//将 HibernateTemplate 注入进来
private HibernateTemplate hibernateTemplate;
//通过用户名和密码查询用户的个数
public int getMatchCount(String userName, String password) {
String sqlStr = " SELECT count(*) FROM t_user "
+ " WHERE user_name =? and password=? ";
return jdbcTemplate.queryForInt(sqlStr, new Object[]{userName, password});
}
//保存
public void save(User user) {
hibernateTemplate.save(user);
}
//通过用户名查询用户
public User findUserByUserName(final String userName) {
String sqlStr = " SELECT user_id,user_name "
+ " FROM t_user WHERE user_name =? ";
final User user = new User();
jdbcTemplate.query(sqlStr, new Object[]{userName},
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
user.setUserId(rs.getInt("user_id"));
user.setUserName(userName);
}
});
return user;
}
}
4、到次步为止,Hibernate已经配置完了,可以正常工作,为了验证是否正确,模拟一个场景:在登陆的时候,如果用户密码正确,则记录用户的当前登陆IP,并显示到main.jsp页面中。因此还需要做以下几个操作。
5、UserService中增加两个方法。
//通过用户名查询用户
public User findUserByUserName(String userName) {
return userDao.findUserByUserName(userName);
}
/**
* 保存方法
* @param user
*/
public void save(User user){
userDao.save(user);
}
public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand) {
boolean isValidUser =
userService.hasMatchUser(loginCommand.getUserName(),
loginCommand.getPassword());
if (!isValidUser) {
return new ModelAndView("login", "error", "用户名或密码错误。");
} else {
User user = userService.findUserByUserName(loginCommand.getUserName());
user.setLastIp(request.getLocalAddr());
user.setLastVisit(new Date());
this.userService.save(user);
return new ModelAndView("main").addObject("user",user);
}
}
7、在main.jsp中接收从LoginController传过来的用户并显示相关内容。
<%@ page import="com.hzb.domain.User" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%
User user =(User) request.getAttribute("user");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>网站主页</title>
</head>
<body>
<%=user.getUserName()%>
欢迎您进入网站主页!
你的登陆IP是<%=user.getLastIp()%>。
</body>
</html>