zl程序教程

您现在的位置是:首页 >  后端

当前栏目

springmvc+mybatis+spring整合和struts2+hibernate5+spring5整合教程和对比

SpringMVCSpringSpring5mybatis教程 对比 整合 struts2
2023-09-11 14:21:44 时间

问题:SSM(springmvc+spring+mybatis)整合过程

手把手详细视频教程:

struts2+hibernate5+spring4快速研发班

https://edu.csdn.net/course/detail/5860

最火框架springmvc4+mybatis3+echarts3+bootstrap3教程(ssm)

https://edu.csdn.net/course/detail/4468

文字版如下:

一、SSM框架比较S2SH框架的优缺点比较

站在个人使用这两个框架的观点儿上来说的话,我觉得这个不能定死的说,常用的S2SH,SpringMVC等,

首先说S2SH,这个是用的比较多的,特别是在中小型项目中,针对大型项目就不行了,是Struts和hibernate过于庞大,过于重量级,项目大了之后配置文件多的也是麻烦事,配置文件多了之后一方面不好操作,另外比较蛋疼的是没法断点调试,特别是对底层数据库优化就做不到了

至于SpringMVC.这个相对于S2SH来说比较轻量级的框架,数据库操作层可以选择ibatis(被Google收购后就叫MyBatis了,开源的),统一管理sql甚是方便,采用纯注解更好,所以在这点儿上来说优于S2SH,可以对数据库进行优化。 


至于mybatishibernate,各有千秋吧,当然这是根据我自己的理解:

1.两者相同点:

Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由
SessionFactory 生成Session,最后由Session来开启执行事务SQL语句。其中SessionFactoryBuider,
SessionFactory,Session的生命周期都是差不多的。
Hibernate和MyBatis都支持JDBCJTA事务处理。

2.两者不同点儿:
Mybatis优势:
MyBatis可以进行更为细致的SQL优化,可以减少查询字段。MyBatis容易掌握,而Hibernate门槛较高。这是因为mybatis是直接操作底层数据库,而hibernate则是通过封装了jdbc,重量级的。不能优化sql语句
Hibernate优势
Hibernate
DAO层开发比MyBatis简单Mybatis需要维护SQL和结果映射
Hibernate
对对象的维护缓存比MyBatis好,对增删改查的对象的维护要方便。
Hibernate数据库移植性很好MyBatis的数据库移植性不好不同的数据库需要写不同SQL
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。


springmvc从设计的角度来说,更加清晰。即使我们去比对strurs2的原理图和springmvc的原理图。struts2的原理图远不如springmvc那么清晰。


二、整合过程

看看整个流程结构图:

                      


1.      创建表(包括关联关系—这个关联关系不一定要有,只是列名要有,并且和关联表列名相同)

2.      创建PO实体对象

3.      创建mapper映射文件

4.      创建personDao接口及实现类

5.      创建service接口及实现类

6.      创建controller

7.      创建列表页面jsp

8.      配置sqlMapConfig.xml

9.      配置beans.xml

10.    配置springmvc-servlet.xml

11.    配置web.xml

12.   发布并测试

当然整个顺序是可以改变的,只要逻辑没问题即可:

具体实现:


1.      创建表,web工程,导入jar包

(包括关联关系—这个关联关系不一定要有,只是列名要有,并且和关联表列名相同)

user表



book表


新建名为SSM的web工程:

      

导入jar包,(mybatis包及依赖,spring(springmvc包及依赖包),数据库驱动包)

aopalliance-1.0.jar

asm-3.3.1.jar

cglib-2.2.2.jar

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

commons-fileupload-1.2.2.jar

commons-io-2.0.1.jar

commons-lang3-3.1.jar

commons-logging-1.1.1.jar

ehcache-core-2.6.5.jar

freemarker-2.3.19.jar

javassist-3.11.0.GA.jar

junit-4.9.jar

log4j-1.2.16.jar

mybatis-3.2.2.jar

mybatis-ehcache-1.0.2.jar

mybatis-spring-1.2.0.jar

mysql-connector-java-5.1.10-bin.jar

ognl-3.0.6.jar

slf4j-api-1.6.2.jar

slf4j-log4j12-1.6.2.jar

spring-aop-3.2.2.jar

spring-beans-3.2.2.jar

spring-context-3.2.2.jar

spring-core-3.2.2.jar

spring-expression-3.2.2.jar

spring-jdbc-3.2.2.jar

spring-orm-3.2.2.jar

spring-tx-3.2.2.jar

spring-web-3.2.2.jar

spring-webmvc-3.2.2.jar


jar包在下载页中有,注意(struts的三个包是不要的)

    


2.      创建PO实体对象

这里建得User实体类:

[java]  view plain  copy
  1. <span style="font-family:Microsoft YaHei;font-weight: normal;">package com.itcast.ssm.domain;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. public class User implements Serializable {  
  7.     private List<Book> books;//一对多的体现  
  8.       
  9.     private Integer id;  
  10.     private String username;  
  11.     private String password;  
  12.     private Integer age;  
  13.     private String remark;  
  14.       
  15.       
  16.       
  17.     public List<Book> getBooks() {  
  18.         return books;  
  19.     }  
  20.     public void setBooks(List<Book> books) {  
  21.         this.books = books;  
  22.     }  
  23.     public Integer getId() {  
  24.         return id;  
  25.     }  
  26.     public void setId(Integer id) {  
  27.         this.id = id;  
  28.     }  
  29.     public String getUsername() {  
  30.         return username;  
  31.     }  
  32.     public void setUsername(String username) {  
  33.         this.username = username;  
  34.     }  
  35.     public String getPassword() {  
  36.         return password;  
  37.     }  
  38.     public void setPassword(String password) {  
  39.         this.password = password;  
  40.     }  
  41.     public Integer getAge() {  
  42.         return age;  
  43.     }  
  44.     public void setAge(Integer age) {  
  45.         this.age = age;  
  46.     }  
  47.     public String getRemark() {  
  48.         return remark;  
  49.     }  
  50.     public void setRemark(String remark) {  
  51.         this.remark = remark;  
  52.     }  
  53.     @Override  
  54.     public String toString() {  
  55.         return "User [id=" + id + ", username=" + username + ", password="  
  56.                 + password + ", age=" + age + ", remark=" + remark + "]";  
  57.     }  
  58.       
  59.       
  60.       
  61.       
  62.       
  63.       
  64.       
  65.       
  66. }  
  67. </span>  


Book实体类:

[java]  view plain  copy
  1. <span style="font-family:Microsoft YaHei;font-weight: normal;">package com.itcast.ssm.domain;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Book implements Serializable{  
  6.       
  7.     private Integer id;  
  8.     private String book_name;  
  9.     private Double book_money;  
  10.     //不配双向关联的  
  11.     public Integer getId() {  
  12.         return id;  
  13.     }  
  14.     public void setId(Integer id) {  
  15.         this.id = id;  
  16.     }  
  17.     public String getBook_name() {  
  18.         return book_name;  
  19.     }  
  20.     public void setBook_name(String book_name) {  
  21.         this.book_name = book_name;  
  22.     }  
  23.     public Double getBook_money() {  
  24.         return book_money;  
  25.     }  
  26.     public void setBook_money(Double book_money) {  
  27.         this.book_money = book_money;  
  28.     }  
  29.     @Override  
  30.     public String toString() {  
  31.         return "Book [id=" + id + ", book_name=" + book_name + ", book_money="  
  32.                 + book_money + "]";  
  33.     }  
  34.       
  35.       
  36.       
  37. }</span>  


3.      创建mapper映射文件(在src下),及mapper接口

UserMapper.xml:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper  
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5. <!-- 配置命名空间,区别映射文件的名称 -->  
  6. <mapper namespace="com.itcast.ssm.mapper.UserMapper">  
  7.     <resultMap type="com.itcast.ssm.domain.User" id="UserRM">  
  8.         <id property="id" column="id"/>  
  9.         <result property="username" column="username"/>  
  10.         <result property="password" column="password"/>  
  11.         <result property="age" column="age"/>  
  12.         <result property="remark" column="remark"/>  
  13.     </resultMap>  
  14.       
  15.     <resultMap type="com.itcast.ssm.domain.User" id="bookRm" extends="UserRM">  
  16.         <collection property="books" ofType="com.itcast.ssm.domain.Book">  
  17.             <id property="id" column="book_id"/>  
  18.             <result property="book_name" column="book_name"/>  
  19.             <result property="book_money" column="book_money"/>  
  20.         </collection>  
  21.     </resultMap>  
  22.       
  23.     <!-- 带条件的查询 -->  
  24.     <select id="find" parameterType="map" resultMap="UserRM">  
  25.         select * from user  
  26.         where 1=1  
  27.         <if test="name!=null">and username like #{name}</if>  
  28.         <if test="ageStart!=null">and age>=#{ageStart}</if>  
  29.         <if test="ageEnd!=null"><![CDATA[and age<=]]>#{ageStart}</if>  
  30.     </select>  
  31.       
  32.     <!-- 插入 -->  
  33.     <insert id="insert" parameterType="com.itcast.ssm.domain.User" >  
  34.         insert into user  
  35.         (username,password,age,remark)  
  36.         values(  
  37.             #{username,jdbcType=VARCHAR},  
  38.             #{password,jdbcType=VARCHAR},  
  39.             #{age,jdbcType=INTEGER},  
  40.             #{remark,jdbcType=VARCHAR}  
  41.             )  
  42.     </insert>  
  43.       
  44.     <!-- 联合查询 -->  
  45.     <select id="findBook" parameterType="int" resultMap="bookRm">  
  46.         select   
  47.         p.id,p.username,p.password,p.age,p.remark,  
  48.         b.id as book_id,b.book_name,b.book_money  
  49.         from  
  50.         (select * from user where id=#{id}) p  
  51.         left join  
  52.         (select * from book where userid=#{id}) b  
  53.         on p.id=b.userid  
  54.     </select>  
  55. </mapper>  

UserMapper.java(接口),这个的命名规则是在mapper.xml文件中namespace="com.itcast.ssm.mapper.UserMapper",包下面的接口,和mapper.xml放在一起
[java]  view plain  copy
  1. package com.itcast.ssm.mapper;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import com.itcast.ssm.domain.User;  
  7.   
  8. public interface UserMapper {  
  9.     public List<User> find(Map map);  
  10.     public void insert(User user);  
  11.     public User findBook(Integer id);  
  12. }  



4.      创建 UserDao 接口及实现类

UserDao接口:

[java]  view plain  copy
  1. package com.itcast.ssm.dao;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import com.itcast.ssm.domain.User;  
  7.   
  8. public interface UserDao {  
  9.     public List<User> findUser(Map map);  
  10.     public boolean addUser(User user);  
  11.     public User findBook(Integer id);  
  12. }  

UserDaoImpl.java:这个是关键*********,和hibernate一样使用继承的方式将spring中的注入的数据源拿到。
[java]  view plain  copy
  1. package com.itcast.ssm.dao.Imple;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import javax.annotation.Resource;  
  7.   
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.mybatis.spring.support.SqlSessionDaoSupport;  
  10. import org.springframework.stereotype.Repository;  
  11.   
  12. import com.itcast.ssm.dao.UserDao;  
  13. import com.itcast.ssm.domain.User;  
  14. import com.itcast.ssm.mapper.UserMapper;  
  15.   
  16.   
  17. @Repository  
  18. public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{  
  19.   
  20.     /** 
  21.      * mybatis3.0.0+mybatis-spring1.0.0无需自己注入,底层给你注入 
  22.      * mybatis3.2.2+mybatis-spring1.2.0去除了这个,需要自己注入sqlsessionFactory 
  23.      *  
  24.      */  
  25.     /*super.setSqlSessionFactory(sessionFactory):调用父类方法,将sqlsessionfactory注入进去*/  
  26.     @Resource  
  27.     public void setSessionFactory(SqlSessionFactory sqlSessionFactory) {  
  28.         super.setSqlSessionFactory(sqlSessionFactory);  
  29.     }  
  30.       
  31.     /* (non-Javadoc) 
  32.      * @see com.itcast.ssm.dao.Imple.UserDao#findUser(java.util.Map) 
  33.      */  
  34.     public List<User> findUser(Map map){  
  35.         UserMapper userMapper = this.getSqlSession().getMapper(UserMapper.class);  
  36.         /*Map map = new HashMap(); 
  37.         map.put("name", "李军"); 
  38.         map.put("ageStart", 8); 
  39.         map.put("ageEnd", 30);*/  
  40.         List<User> users = userMapper.find(map);  
  41.         for(User user:users){  
  42.             System.out.println(user.toString());  
  43.         }  
  44.         System.out.println("--INTO FINDUSER METHOD!!!--");  
  45.         return users;  
  46.     }  
  47.   
  48.     public boolean addUser(User user) {  
  49.         // TODO Auto-generated method stub  
  50.         UserMapper mapper = this.getSqlSession().getMapper(UserMapper.class);  
  51.         mapper.insert(user);  
  52.         System.out.println("--INTO ADDUSER METHOD!!!--");  
  53.         return true;  
  54.     }  
  55.   
  56.     public User findBook(Integer id) {  
  57.         // TODO Auto-generated method stub  
  58.         UserMapper userMapper = this.getSqlSession().getMapper(UserMapper.class);  
  59.         System.out.println("--INTO FINDBOOK DAO METHOD!!!--");  
  60.         return userMapper.findBook(id);  
  61.     }  
  62.       
  63. }  



5.      创建service接口及实现类

UserService.java

[java]  view plain  copy
  1. package com.itcast.ssm.service;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import com.itcast.ssm.domain.User;  
  7.   
  8. public interface UserService {  
  9.     public List<User> findUser(Map map);  
  10.     public boolean addUser(User user);  
  11.     public User findBook(Integer id);  
  12. }  


UserServiceImpl.java:这个和s2sh中的service一样,注解加注入即可
[java]  view plain  copy
  1. package com.itcast.ssm.service.Impl;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import javax.annotation.Resource;  
  7.   
  8. import org.springframework.stereotype.Service;  
  9.   
  10. import com.itcast.ssm.dao.UserDao;  
  11. import com.itcast.ssm.domain.User;  
  12. import com.itcast.ssm.service.UserService;  
  13.   
  14. @Service  
  15. public class UserServiceImpl implements UserService{  
  16.   
  17.     @Resource  
  18.     private UserDao dao;  
  19.       
  20.     public List<User> findUser(Map map) {  
  21.         // TODO Auto-generated method stub  
  22.         return this.dao.findUser(map);  
  23.     }  
  24.   
  25.     public boolean addUser(User user) {  
  26.         // TODO Auto-generated method stub  
  27.         return this.dao.addUser(user);  
  28.     }  
  29.   
  30.     public User findBook(Integer id) {  
  31.         // TODO Auto-generated method stub  
  32.         return this.dao.findBook(id);  
  33.     }  
  34.   
  35. }  



6.      创建controller:这个就和s2shaction层逻辑控制层作用一样了,不过这里使用的是springmvc的架构,而不是struts2.

[java]  view plain  copy
  1. <span style="font-weight: normal;"><span style="font-family:Microsoft YaHei;font-size:18px;">package com.itcast.ssm.controller;  
  2.   
  3. import java.util.List;  
  4.   
  5. import javax.annotation.Resource;  
  6.   
  7. import org.springframework.stereotype.Controller;  
  8. import org.springframework.ui.Model;  
  9. import org.springframework.web.bind.annotation.RequestMapping;  
  10.   
  11. import com.itcast.ssm.domain.User;  
  12. import com.itcast.ssm.service.UserService;  
  13.   
  14. @Controller  
  15. public class UserController {  
  16.       
  17.     @Resource  
  18.     private UserService userService;  
  19.       
  20.     //controller在加载的时候,会同时创建/user/list;/user/list.action  
  21.     //所以无论加不加.action都可以访问得到和web.xml中配置的.action无关  
  22.     @RequestMapping("/user/list.action")  
  23.     public String userList(Model model){  
  24.         List<User> list =this.userService.findUser(null);  
  25.         for(User user:list){  
  26.             System.out.println(user.toString());  
  27.         }  
  28.         model.addAttribute("userlist", list);  
  29.           
  30.         return "/user/userlist.jsp";  
  31.     }  
  32.       
  33.     @RequestMapping("/user/toadd.action")  
  34.     public String tocreat(){  
  35.         return "/user/addUser.jsp";  
  36.     }  
  37.       
  38.     @RequestMapping("/user/add.action")  
  39.     public String addUser(User user){  
  40.         System.out.println(user.toString());  
  41.         this.userService.addUser(user);  
  42.         System.out.println("--INTO ADDUSER METHOD END!!!--");  
  43.         return "redirect:/user/list.action";  
  44.     }  
  45.       
  46.     @RequestMapping("/user/tobook.action")  
  47.     public String toBook(Integer id,Model model){  
  48.         User user = this.userService.findBook(id);  
  49.         model.addAttribute("booklist", user);  
  50.         return "/user/listBook.jsp";  
  51.     }  
  52. }</span></span><span style="font-family:Microsoft YaHei;font-size: 13.3333px;">  
  53. </span>  

到这里为止,类部分已经配置完。


7.      创建页面jsp

userlist.jsp
[html]  view plain  copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <title>My JSP 'userlist.jsp' starting page</title>  
  12.   </head>  
  13.     
  14.   <body>  
  15.   <a href="${pageContext.request.contextPath }/user/toadd.action">添加</a>  
  16.   <table>  
  17.     <tr>  
  18.         <td>Status:</td>  
  19.         <td>ID:</td>  
  20.         <td>USER:</td>  
  21.         <td>PASS:</td>  
  22.         <td>AGE:</td>  
  23.         <td>REMARK:</td>  
  24.     </tr>  
  25.     <c:forEach items="${userlist }" var="v" varStatus="status">  
  26.         <tr>  
  27.             <td>${status.index+1 }</td>  
  28.             <td>${v.id }</td>  
  29.             <td><a href="${pageContext.request.contextPath }/user/tobook.action?id=${v.id}">${v.username }</a></td>  
  30.             <td>${v.password }</td>  
  31.             <td>${v.age }</td>  
  32.             <td>${v.remark }</td>  
  33.         </tr>  
  34.     </c:forEach>  
  35.   </table>  
  36.   </body>  
  37. </html>  


addUser.jsp

[html]  view plain  copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <title>My JSP 'addUser.jsp' starting page</title>  
  11.     <script type="text/javascript">  
  12.         function formSubmit(){  
  13.             document.forms[0].action = "${pageContext.request.contextPath }/user/add.action";  
  14.             document.forms[0].submit();  
  15.         }  
  16.     </script>  
  17.   </head>  
  18.     
  19.   <body>  
  20.   <a href="#" onclick="formSubmit();">保存</a><!-- 两种提交方式都可以,这里只是掩饰多一种方式提交 -->  
  21.     <form action="${pageContext.request.contextPath }/user/add.action" method="post">  
  22.         <table>  
  23.             <tr>  
  24.                 <td>User:</td>  
  25.                 <td><input type="text" name="username" /></td>  
  26.             </tr>  
  27.             <tr>  
  28.                 <td>Pass:</td>  
  29.                 <td><input type="text" name="password"/></td>  
  30.             </tr>  
  31.             <tr>  
  32.                 <td>Age:</td>  
  33.                 <td><input type="text" name="age"/></td>  
  34.             </tr>  
  35.             <tr>  
  36.                 <td>Remark:</td>  
  37.                 <td><input type="text" name="remark"/></td>  
  38.             </tr>  
  39.             <tr>  
  40.                 <td><input type="submit" value="提交"></td>  
  41.                 <td><input type="reset" value="重置"></td>  
  42.             </tr>  
  43.         </table>  
  44.     </form>  
  45.   </body>  
  46. </html>  


listBook.jsp
[html]  view plain  copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <title>${booklist.username }的书籍列表</title>  
  12.   </head>  
  13.     
  14.   <body>  
  15.     <h2>${booklist.username }的书籍列表:<a href="${pageContext.request.contextPath }/user/list.action">返回</a></h2>  
  16.      <table>  
  17.     <tr>  
  18.         <td>列表序号:</td>  
  19.         <td>书籍序号:</td>  
  20.         <td>书籍名称:</td>  
  21.         <td>书籍金额:</td>  
  22.     </tr>  
  23.     <c:forEach items="${booklist.books }" var="p" varStatus="status">  
  24.         <tr>  
  25.             <td>${status.index+1 }</td>  
  26.             <td>${p.id}</td>  
  27.             <td>${p.book_name}</td>  
  28.             <td>${p.book_money}</td>  
  29.         </tr>  
  30.     </c:forEach>  
  31.   </table>  
  32.   </body>  
  33. </html>  




8.      配置sqlMapConfig.xml

sqlMapConfig.xml:名字不能乱写,这个在mybatis的时候配置得多,主要是配置数据源的,有点儿和hibernate的配置文件相同加载数据源,及映射文件的,但是在这里交给spring容器管理了。所以配置也是空,但是需要配置这个文件。

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6. </configuration>  



9.      配置beans.xml:这个就是配置spring容器,唯一不同的是将mapper文件和sqlMapConfig.xml加载进来

jdbc.properties文件放入src下,里面放的驱动信息

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xmlns:aop="http://www.springframework.org/schema/aop"   
  7.     xmlns:tx="http://www.springframework.org/schema/tx"  
  8.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  9.                         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd   
  10.                         http://www.springframework.org/schema/mvc   
  11.                         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd   
  12.                         http://www.springframework.org/schema/context   
  13.                         http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  14.                         http://www.springframework.org/schema/aop   
  15.                         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd   
  16.                         http://www.springframework.org/schema/tx   
  17.                         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">  
  18.                           
  19.                           
  20.     <!-- 包扫描,spring管理dao、service层 -->  
  21.     <context:component-scan base-package="com.itcast.ssm.dao,com.itcast.ssm.service"></context:component-scan>  
  22.       
  23.     <!-- JDBC.properties属性配置文件 -->  
  24.     <context:property-placeholder location="classpath:jdbc.properties"/>  
  25.       
  26.     <!-- 数据源DataSource -->  
  27.     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  28.         <property name="driverClassName" value="${jdbc.driverclass}"/>  
  29.         <property name="url" value="${jdbc.url}"/>  
  30.         <property name="username" value="${jdbc.username}"/>  
  31.         <property name="password" value="${jdbc.password}"/>  
  32.     </bean>  
  33.       
  34.     <!-- sqlSessionFactory :id名字不是乱写的,要注入用的-->  
  35.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  36.         <property name="dataSource" ref="dataSource"></property>  
  37.           
  38.         <!-- spring和mybatis整合 -->  
  39.         <!-- 1)引入mybatis核心配置文件 -->  
  40.         <property name="configLocation" value="classpath:sqlMapConfig.xml"/>  
  41.           
  42.         <!-- 2)扫描指定目录下的所有Mapper.xml -->  
  43.         <property name="mapperLocations" value="classpath:com/itcast/ssm/mapper/*.xml"></property>  
  44.           
  45.     </bean>  
  46.       
  47.     <!-- 事务 -->  
  48.     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  49.         <property name="dataSource" ref="dataSource"></property>  
  50.     </bean>  
  51.     <!-- 通知 -->  
  52.     <tx:advice id="tbAdvice" transaction-manager="txManager">  
  53.         <tx:attributes>  
  54.             <tx:method name="save*" propagation="REQUIRED"/>  
  55.             <tx:method name="add*" propagation="REQUIRED"/>  
  56.             <tx:method name="update*" propagation="REQUIRED"/>  
  57.             <tx:method name="delete*" propagation="REQUIRED"/>  
  58.               
  59.             <tx:method name="find*" read-only="true"/>  
  60.             <tx:method name="get*" read-only="true"/>  
  61.             <tx:method name="view*" read-only="true"/>  
  62.               
  63.             <tx:method name="*" read-only="true"/>  
  64.         </tx:attributes>  
  65.     </tx:advice>  
  66.     <!-- 切点 -->  
  67.     <aop:config>  
  68.         <aop:pointcut expression="execution(* com.itcast.ssm.service.*.*(..))" id="pointCut"/>  
  69.         <aop:advisor advice-ref="tbAdvice" pointcut-ref="pointCut"/>  
  70.     </aop:config>  
  71. </beans>            



10.    配置springmvc-servlet.xml

注意:这个是springmvc中的核心文件,主要作用struts2一样的,handlMapping来控制映射转向

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xmlns:aop="http://www.springframework.org/schema/aop"  
  7.     xmlns:tx="http://www.springframework.org/schema/tx"  
  8.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  9.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  10.     http://www.springframework.org/schema/mvc   
  11.     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd   
  12.     http://www.springframework.org/schema/context   
  13.     http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  14.     http://www.springframework.org/schema/aop   
  15.     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
  16.     http://www.springframework.org/schema/tx   
  17.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">  
  18.       
  19.     <!-- 1.包扫描controller -->  
  20.     <context:component-scan base-package="com.itcast.ssm.controller"></context:component-scan>  
  21.       
  22.     <!-- 2.内部资源视图解析器  -->  
  23.     <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  24.         <property name="prefix" value="/WEB-INF/pages"/>  
  25.         <property name="suffix" value=""/>  
  26.     </bean>  
  27.       
  28. </beans>  



11.    配置web.xml

需要配置spring容器,springmvc,这两个是必要的。


[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.     <!-- 1.spring容器 listener -->  
  8.     <context-param>  
  9.         <param-name>contextConfigLocation</param-name>  
  10.         <param-value>classpath:beans.xml</param-value>  
  11.     </context-param>  
  12.     <listener>  
  13.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  14.     </listener>  
  15.       
  16.     <!-- 2.springmvc servlet -->  
  17.     <servlet>  
  18.         <servlet-name>springmvc</servlet-name>  
  19.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  20.         <init-param>  
  21.             <param-name>contextConfigLocation</param-name>  
  22.             <param-value>classpath:springmvc-servlet.xml</param-value>  
  23.         </init-param>  
  24.     </servlet>  
  25.       
  26.     <servlet-mapping>  
  27.         <servlet-name>springmvc</servlet-name>  
  28.         <url-pattern>*.action</url-pattern>  
  29.     </servlet-mapping>  
  30.        
  31.     <!-- 3.spring 中文乱码 filter -->  
  32.     <!-- 编码过滤器,解决中文乱码 -->  
  33.     <filter>  
  34.         <filter-name>SpringEncoding</filter-name>  
  35.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  36.         <init-param>  
  37.             <param-name>encoding</param-name>  
  38.             <param-value>utf-8</param-value>  
  39.         </init-param>  
  40.     </filter>  
  41.     <filter-mapping>  
  42.         <filter-name>SpringEncoding</filter-name>  
  43.         <url-pattern>/*</url-pattern>  
  44.     </filter-mapping>  
  45.       
  46.   <welcome-file-list>  
  47.     <welcome-file>index.jsp</welcome-file>  
  48.   </welcome-file-list>  
  49. </web-app>  

最后加一个log4j的日志文件,需要打印日志,当然加不加都无所谓,只是加了打印日志更清晰,在jar包中也有log4j.jar包

src下加log4j.properties

12.   发布并测试


添加


查看用户的书籍



整个搭建过程完成,并且测试成功。



三、细节重要点

手把手详细视频教程:

struts2+hibernate5+spring4快速研发班

https://edu.csdn.net/course/detail/5860

最火框架springmvc4+mybatis3+echarts3+bootstrap3教程(ssm)

https://edu.csdn.net/course/detail/4468


更多干货,请关注本账号。

原文链接:https://blog.csdn.net/mr_li13/article/details/51396849