Spring+Spring MVC+Hibernate框架搭建实例

时间:2022-04-02 23:15:14

前言:这里只是说明整个搭建流程,并不进行原理性的讲解

一 下面所需要用到的数据库配置:

数据库方面,使用mysql创建一个users表,具体代码如下:

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `UserID` int(4) NOT NULL AUTO_INCREMENT,
  `UserName` varchar(16) NOT NULL,
  `Password` varchar(16) NOT NULL,
  `Telephone` varchar(16) NOT NULL,
  `Address` varchar(16) NOT NULL,
  PRIMARY KEY (`UserID`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', 'aa', 'aa12', 'aa', 'aa');
INSERT INTO `users` VALUES ('2', 'bb', 'bb', 'bb', 'bb');
INSERT INTO `users` VALUES ('3', 'cc', 'cc', 'cc', 'cc');
INSERT INTO `users` VALUES ('7', 'admin', 'admin', '12306', '北京*');

二 创建web项目,并导入相关jar包:

创建一个dynamic web project,然后在WEB-INF/lib下导入spring和hibernate的jar包,嫌麻烦的话也可以使用我用到的jar包,链接:http://pan.baidu.com/s/1kUse26z 。整个项目的结构是这样的:

Spring+Spring MVC+Hibernate框架搭建实例

三 创建视图页面user.jsp:

路径是:/WEB-INF/jsp/user/user.jsp,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><base href="<%=basePath%>"><title>Insert title here</title></head><body><h1>Message : ${message}</h1></body></html>

四 根据数据库表的字段建立实体类Users.java:

实体类放在cn.zifangsky.entity包中,这里采用了注解的方式来配置,Users.java代码如下:

package cn.zifangsky.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entity(name="users")public class Users implements java.io.Serializable{@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="UserID")private Integer userId;@Column(name="UserName",length=16)private String userName;@Column(name="Password",length=16)private String password;@Column(name="Telephone",length=16)private String telephone;@Column(name="Address",length=16)private String address;public Users(){}public Users(Integer userId, String userName, String password, String telephone, String address) {this.userId = userId;this.userName = userName;this.password = password;this.telephone = telephone;this.address = address;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getTelephone() {return telephone;}public void setTelephone(String telephone) {this.telephone = telephone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}

五 处理框架整合的配置文件:

(1)首先是web.xml,路径是:WEB-INF/web.xml:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>Archetype Created Web Application</display-name><!-- 配置Spring --><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/spring-*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 定义DispatcherServlet --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/springmvc-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 设置字符集 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 控制Session的开关 --><filter><filter-name>openSession</filter-name><filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>openSession</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

(2)spring mvc所需要用到的配置文件springmvc-servlet.xml,路径是:src/springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:p="http://www.springframework.org/schema/p"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="        http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context-3.0.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd        http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd ">          <!-- 启用spring mvc 注解 --><mvc:annotation-driven /><!-- 不操作静态资源 --><mvc:default-servlet-handler />      <!-- 启动自动扫描该包下所有的Bean(例如@Controller) -->    <context:component-scan base-package="cn.zifangsky.controller" />          <!-- 定义视图解析器 -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix">            <value>/WEB-INF/jsp/user/</value>        </property>        <property name="suffix">            <value>.jsp</value>        </property>    </bean>    </beans>

(3)整合hibernate所需要用到的配置文件spring-hibernate.xml,这里为了简单只用了基础的jdbc数据源,路径是src/spring-hibernate.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="        http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-4.0.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context-4.0.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd        http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd   "><!-- 声明事务管理器 --><bean id="myHibTxManager"class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义事务通知 --><tx:advice id="tx_Advice" transaction-manager="myHibTxManager"><!-- 定义事务传播规则 --><tx:attributes><!-- 对get/load/search开头的方法应用只读事务规则 --><tx:method name="get*" propagation="SUPPORTS" read-only="true" /><tx:method name="load*" propagation="SUPPORTS" read-only="true" /><tx:method name="search*" propagation="SUPPORTS" read-only="true" /><!-- 对其他方法应用REQUIRED事务规则 --><tx:method name="*" propagation="REQUIRED" /></tx:attributes></tx:advice><aop:config><!-- 对com.zxpm.biz包下的所有类的所有方法都应用事务规则 --><aop:pointcut id="bizMethods"expression="execution(* cn.zifangsky.service.*.*(..))" /><!-- 将事务通知和切面组合 --><aop:advisor advice-ref="tx_Advice" pointcut-ref="bizMethods" /></aop:config><!-- 配置数据源 --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1/zxpm" /><property name="username" value="root" /><property name="password" value="root" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="packagesToScan"><list><!-- 可以加多个包 --><value>cn.zifangsky.entity</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.show_sql">true</prop></props></property></bean></beans>

(4)加载bean配置文件spring-bean.xml,当然具体的一些bean将在下一环节中配置,路径:src/spring-bean.xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="        http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-4.2.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context-4.2.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd        http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">          <bean id="usersDAO" class="cn.zifangsky.dao.UsersDAO">          <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <bean id="userService" class="cn.zifangsky.service.UserService">        <property name="userDao" ref="usersDAO"></property>    </bean></beans>

六 业务处理DAO,Service和Controller:

(1)UsersDAO.java,在cn.zifangsky.dao这个包中:

package cn.zifangsky.dao;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.springframework.orm.hibernate5.HibernateCallback;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import cn.zifangsky.entity.Users;public class UsersDAO extends HibernateDaoSupport{    public List<Users> getAllUser(){    Object execute =  super.getHibernateTemplate().execute(new HibernateCallback<Object>() { public Object doInHibernate(Session session) throws HibernateException { String hql="from users"; Query query = session.createQuery(hql);             return query.list();}});return (List<Users>) execute;        }}

(2)UserService.java,在cn.zifangsky.service这个包中:

package cn.zifangsky.service;import cn.zifangsky.dao.UsersDAO;public class UserService {    private UsersDAO userDao;        public int userCount(){        return userDao.getAllUser().size();    }    public UsersDAO getUserDao() {        return userDao;    }    public void setUserDao(UsersDAO userDao) {        this.userDao = userDao;    }}

(3)UserController.java,在cn.zifangsky.controller这个包中:

package cn.zifangsky.controller;import javax.annotation.Resource;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.ModelAndView;import cn.zifangsky.service.UserService;@Controller@RequestMapping("/user")public class UserController {        @Resource(name="userService")    private UserService service;        @RequestMapping(value="/manager",method=RequestMethod.GET)    public ModelAndView hello2(){        ModelAndView mv = new ModelAndView();        mv.addObject("message", "HelloMVC");        mv.setViewName("user");        return mv;    }        @RequestMapping(value="/count",method=RequestMethod.GET)    public ModelAndView count(){                int c = service.userCount();                ModelAndView mv = new ModelAndView();        mv.addObject("message", c);        mv.setViewName("user");        return mv;    }}

从上面的代码可以看出,定义了两个请求,分别是:http://localhost:8080/SpringDemo/user/manager 和 http://localhost:8080/SpringDemo/user/count ,分别返回一个字符串和users这个表中数据的条数。下面我们将对这两个请求进行测试

七 测试:

测试结果如下:

http://localhost:8080/SpringDemo/user/manager 

Spring+Spring MVC+Hibernate框架搭建实例

http://localhost:8080/SpringDemo/user/count

Spring+Spring MVC+Hibernate框架搭建实例

可以看出,这个框架已经搭建成功了


注:如果在项目启动时报错的话,第一是检查配置文件中是不是有哪个地方写错了,第二是注意看下/WEB-INF/lib下有没有aopalliance.jar和aspectjweaver-1.5.4.jar这两个jar包。因为我刚开始时就是因为没有这两个jar包,在项目启动时各种报错,真的挺坑的Spring+Spring MVC+Hibernate框架搭建实例

PS:参考文章:http://www.cnblogs.com/leiOOlei/p/3727859.html

欢迎大家有时间来我个人独立博客(http://www.zifangsky.cn)踩踩Spring+Spring MVC+Hibernate框架搭建实例

本文出自 “zifangsky的个人博客” 博客,请务必保留此出处http://983836259.blog.51cto.com/7311475/1757750