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

简介:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 。整个项目的结构是这样的:

wKiom1b5PsqzayY4AABUPSy5Ub4975.png

三 创建视图页面user.jsp:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ 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代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<? 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<? 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<? 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<? 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这个包中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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这个包中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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这个包中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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 

wKioL1b521mD5FVKAAAhKLxcuOA075.png

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

wKiom1b52sbjpmDdAAAbTibyX3Y370.png

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


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



本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1757750,如需转载请自行联系原作者

相关文章
|
2月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
38 1
|
2月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
42 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
2月前
|
数据库 Java 数据库连接
Struts 2 与 Hibernate 的完美邂逅:如何无缝集成两大框架,轻松玩转高效 CRUD 操作?
【8月更文挑战第31天】本文通过具体示例介绍了如何在 Struts 2 中整合 Hibernate,实现基本的 CRUD 操作。首先创建 Maven 项目并添加相关依赖,接着配置 Hibernate 并定义实体类及其映射文件。然后创建 DAO 接口及实现类处理数据库操作,再通过 Struts 2 的 Action 类处理用户请求。最后配置 `struts.xml` 文件并创建 JSP 页面展示用户列表及编辑表单。此示例展示了如何配置和使用这两个框架,使代码更加模块化和可维护。
44 0
|
2月前
|
设计模式 存储 前端开发
MVC 框架的主要问题是什么?
【8月更文挑战第30天】
31 0
|
3月前
|
前端开发 Java 应用服务中间件
我以为我对Spring MVC很了解,直到我遇到了...
所有人都知道Spring MVC是是开发的,却鲜有人知道Spring MVC的理论基础来自于1978 年提出MVC模式的一个老头子,他就是Trygve Mikkjel Heyerdahl Reenskaug,挪威计算机科学家,名誉教授。Trygve Reenskaug的MVC架构思想早期用于图形用户界面(GUI) 的软件设计,他对MVC是这样解释的。MVC 被认为是解决用户控制大型复杂数据集问题的通用解决方案。最困难的部分是为不同的架构组件想出好的名字。模型-视图-编辑器是第一个。
115 1
我以为我对Spring MVC很了解,直到我遇到了...
|
2月前
|
Java 数据库连接 数据库
Spring Data JPA 与 Hibernate 之区别
【8月更文挑战第21天】
38 0
|
3月前
|
前端开发 Java Spring
Spring MVC中使用ModelAndView传递数据
Spring MVC中使用ModelAndView传递数据
|
3月前
|
SQL Java 数据库连接
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
59 0
|
3月前
|
Java 数据库连接 数据库
如何在Spring Boot中集成Hibernate
如何在Spring Boot中集成Hibernate
|
3月前
|
XML 前端开发 Java
Spring Boot与Spring MVC的区别和联系
Spring Boot与Spring MVC的区别和联系