基于IDEA的SSH项目之五:集成Hibernate

说明:本文来介绍在项目中集成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"/>
2、给实体类和类中的字段加上注解(类中的其他内容省略显示了)

@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;
}
3、在DAO层类中注入HibernateTemplate。并使用HibernateTemplate新增一个保存方法,另外这里增加了一个通过用户名查询用户的方法。

@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);
    }
6、在LoginController中的loginCheck方法里面增加几行代码。

    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>
四、启动服务,登陆测试。



此时整个项目的程序包见: http://download.csdn.net/detail/przzl/7337679
项目的lib文件夹见: http://download.csdn.net/detail/przzl/7337715


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值