SSM框架的搭建

Spring介绍:

spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java 应用都可以从 Spring 中受益。 简单来说, Spring 是一个轻量级的控制反转(IoC )和面向切面( AOP )的容器框架。

如何搭建SSM(SpringMvc+mybatis+Spring)java web工程

SpringMVC介绍

Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在Spring Web Flow 里面。 Spring MVC  分离了 控制器 、模型 对象 、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

No.1   首先将web工程结构建好

MyBatis介绍

  MyBatis  本是 apache 的一个开源项目 iBatis , 2010 年这个项目由apache software foundation  迁移到了 google code ,并且改名为 MyBatis  。MyBatis 是一个基于 Java 的 持久层 框架。 iBATIS 提供的 持久层 框架包括SQL Maps 和 Data Access Objects ( DAO ) MyBatis  消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。 MyBatis  使用简单的  XML 或注解用于配置和原始映射,将接口和  Java  的 POJOs ( Plain Old Java Objects ,普通的  Java 对象)映射成数据库中的记录。

首先不是maven架构整合的  SSM 框架

 

创建数据库、表db_zsl   t_user   user_t【最下面有sql语句】

1.项目整体结构

图片 1

2.添加相关jar 包

图片 2

3.项目整体结构出来了

4.创建model【User】

 

[java] view plain copy

 图片 3图片 4

  1. package com.lyt.model;  
  2.   
  3. /**  
  4.  * 用户  
  5.  * @author 
  6.  *  
  7.  */    
  8. public class User {    
  9.     
  10.     private int id;    
  11.     private String userName;   
  12.     private String age;    
  13.       
  14.     @Override  
  15.     public String toString() {  
  16.         return "User [id=" + id + ", age=" + age + ", userName=" + userName  
  17.                 + "]";  
  18.     }  
  19.     public User(){    
  20.         super();    
  21.     }    
  22.     public int getId() {    
  23.         return id;    
  24.     }    
  25.     public void setId(int id) {    
  26.         this.id = id;    
  27.     }    
  28.     public String getAge() {    
  29.         return age;    
  30.     }    
  31.     public void setAge(String age) {    
  32.         this.age = age;    
  33.     }    
  34.     public String getUserName() {    
  35.         return userName;    
  36.     }    
  37.     public void setUserName(String userName) {    
  38.         this.userName = userName;    
  39.     }    
  40.     public User(int id, String age, String userName) {    
  41.         super();    
  42.         this.id = id;    
  43.         this.age = age;    
  44.         this.userName = userName;    
  45.     }    
  46. }    

5.创建DAO接口【在mybatis中 mapper就相当于dao】

 

 

[java] view plain copy

 图片 5图片 6

  1. package com.lyt.mapper;  
  2. import java.util.List;  
  3. import com.lyt.model.User;  
  4. /** 
  5.  * 做为 DAO的接口 
  6.  * @author 
  7.  */  
  8. public interface UserMapper {    
  9. void save(User user);    
  10. boolean update(User user);    
  11. boolean delete(int id);    
  12.     User findById(int id);    
  13.     List<User> findAll();    
  14. }    

5.创建DAO接口【在mybatis中 mapper就相当于dao】

 

[java] view plain copy

 图片 7图片 8

  1. package com.lyt.mapper;  
  2. import java.util.List;  
  3. import com.lyt.model.User;  
  4. /** 
  5.  * 做为 DAO的接口 
  6.  * @author */  
  7. public interface UserMapper {    
  8. void save(User user);    
  9. boolean update(User user);    
  10. boolean delete(int id);    
  11.     User findById(int id);    
  12.     List<User> findAll();    
  13. }    

6.实现dao接口【mybatis中就是UserMapper.xml文件】

[python] view plain copy

 图片 9图片 10

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"     
  3. ";    
  4. <!--     
  5. namespace:必须与对应的接口全类名一致  UserMapper.java  
  6.     id :必须与对应接口的某个对应的方法名一致即必须要和UserMapper.java接口中的方法同名。  
  7.  -->    
  8.  <mapper namespace="com.lyt.mapper.UserMapper">  
  9.     <insert id="save" parameterType="User">  
  10.         insert into t_user(user_name,user_age) values(#{userName},#{age})  
  11.     </insert>  
  12.     <update id="update" parameterType="User">    
  13.         update t_user set user_name=#{userName},user_age=#{age} where user_id=#{id}    
  14.     </update>   
  15.     <delete id="delete" parameterType="int">    
  16.         delete from t_user where user_id=#{id}    
  17.     </delete>    
  18.      <!-- mybsits_config中配置的alias类别名,也可直接配置resultType为类路径 -->      
  19.     <select id="findById" parameterType="int" resultType="User">    
  20.         select user_id id,user_name userName,user_age age from t_user where user_id=#{id}    
  21.     </select>    
  22.     <select id="findAll" resultType="User">    
  23.         select user_id id,user_name userName,user_age age from t_user    
  24.     </select>   
  25.  </mapper>  

这里对这个xml文件作几点说明: 
1、namespace必须与对应的接口全类名一致。 

1.1.1 开发环境介绍

 在这里我是采用的是mysql数据库 

  编译器版本采用的是jdk使用的是1.8

 开发工具是使用的是eclipse Mars版本

  web容器采用的是tomcat 版本是7.0版本 

 

  在这里我将我自己写好的Demo工程目录结构截图展示出来方便大家新建项目

图片 11

这张图图片清晰地将我的工程清晰地展示出来,先简单介绍下吧 ,项目主包是以com.cntv开始的 。在之下又分为好几个子包,分别是mapper、controller、service、dao、mapper、logs、config、base、entity、test包,其中controller包是负责接收前台请求执行部分业务逻辑的action,熟悉struts框架的应该知道Action哈 在这里我就不详细说了。mapper包主要是负责mybatis框架实体映射,config包是主要存储项目配置文件。  其他的包就不一一介绍了,都是些常规的包。

 

2、id必须与对应接口的某个对应的方法名一致即必须要和UserMapper.java接口中的方法同名。 

7.mybatis与Spring整合【spring-common.xml】放在src的根目录下

 对于Mybatis和Spring的整合是这篇博文的重点,需要配置的内容在下面有详细的解释。

[python] view plain copy

 图片 12图片 13

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns=""  
  3.     xmlns:xsi="" xmlns:p=""  
  4.     xmlns:context="" xmlns:tx=""  
  5.     xsi:schemaLocation="  
  6.           
  7.           
  8.           
  9.           
  10.           
  11.         ;  
  12. <!-- Mybatis和Spring的整合 -->  
  13.     <!-- 1. 数据源 : DriverManagerDataSource -->  
  14.     <bean id="dataSource"  
  15. class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  16.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  17.         <property name="url" value="jdbc:mysql://localhost:3306/db_zsl" />  
  18.         <property name="username" value="root" />  
  19.         <property name="password" value="root" />  
  20.     </bean>  
  21.     <!--  
  22. 2. mybatis的SqlSession的工厂: SqlSessionFactoryBean dataSource:引用数据源  
  23.         MyBatis定义数据源,同意加载配置  
  24.     -->  
  25.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  26.         <property name="dataSource" ref="dataSource"></property>  
  27.         <property name="configLocation" value="classpath:mybatis-config.xml" />   
  28.     </bean>  
  29.     <!--  
  30. 3. mybatis自动扫描加载Sql映射文件/接口 : MapperScannerConfigurer sqlSessionFactory  
  31.         basePackage:指定sql映射文件/接口所在的包(自动扫描)  
  32.     -->  
  33.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  34.         <property name="basePackage" value="com.lyt.mapper"></property>  
  35.         <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
  36.     </bean>  
  37.     <!--  
  38. 4. 事务管理 : DataSourceTransactionManager dataSource:引用上面定义的数据源  
  39.     -->  
  40.     <bean id="txManager"  
  41. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  42.         <property name="dataSource" ref="dataSource"></property>  
  43.     </bean>  
  44.     <!-- 5. 使用声明式事务  
  45.          transaction-manager:引用上面定义的事务管理器  
  46.      -->  
  47.     <tx:annotation-driven transaction-manager="txManager" />  
  48. </beans>  

8.mybatis配置文件【mybatis-config.xml】放在src目录下

[python] view plain copy

 图片 14图片 15

<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"   

";  

<configuration>  

<!-- 实体类,简称 -设置别名 -->  

<typeAliases>  

<typeAlias alias="User" type="com.lyt.model.User" />  

 </typeAliases>  

<!-- 实体接口映射资源 -->  

  <!--  

 说明:如果xxMapper.xml配置文件放在和xxMapper.java统一目录下,mappers也可以省略,因为org.mybatis.spring.mapper.MapperFactoryBean默认会去查找与xxMapper.java相同目录和名称的xxMapper.xml  

 -->  

<mappers>  

 <mapper resource="com/lyt/mapper/userMapper.xml" />  

</mappers>  

</configuration>   

1、配置log4j.properties

[python] view plain copy

 图片 16图片 17

  1. ### set log levels ###   
  2. log4j.rootLogger = info , Console , D  
  3. #Console  
  4. log4j.appender.Console=org.apache.log4j.ConsoleAppender  
  5. log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
  6. log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
  7. log4j.logger.java.sql.ResultSet=INFO  
  8. log4j.logger.org.apache=INFO  
  9. log4j.logger.java.sql.Connection=INFO  
  10. log4j.logger.java.sql.Statement=INFO  
  11. log4j.logger.java.sql.PreparedStatement=INFO  
  12. #output2file  
  13. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender   
  14. log4j.appender.D.File = D:/logs/log.log   
  15. log4j.appender.D.Append = true   
  16. log4j.appender.D.Threshold = INFO ## u00E8u00BEu0093u00E5u0087u00BAinfou00E7u00BAu00A7u00E5u0088u00ABu00E4u00BBu00A5u00E4u00B8u008Au00E7u009Au0084u00E6u0097u00A5u00E5u00BFu0097   
  17. log4j.appender.D.layout = org.apache.log4j.PatternLayout   
  18. log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n   

10.整合Springmvc

配置【spring-mvc.xml】放在src根目录下

[python] view plain copy

 图片 18图片 19

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns=""  
  3.     xmlns:xsi="" xmlns:context=""  
  4.     xmlns:mvc=""  
  5.     xsi:schemaLocation="   
  6.       
  7.       
  8.       
  9.       
  10.     ;  
  11.     <!-- 注解扫描包 -->  
  12.     <context:component-scan base-package="com.lyt.controller" />  
  13.     <context:component-scan base-package="com.lyt.service" />  
  14.     <!-- 开启注解 -->  
  15.     <mvc:annotation-driven />  
  16.     <!--  
  17.         配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd  
  18.     -->  
  19.     <mvc:resources mapping="/img/**" location="/img/" />  
  20.     <mvc:resources mapping="/js/**" location="/js/" />  
  21.     <mvc:resources mapping="/css/**" location="/css/" />  
  22.     <mvc:resources mapping="/html/**" location="/html/" />  
  23.     <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
  24.     <bean id="viewResolver"  
  25. class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  26.         <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
  27.         <property name="prefix" value="/WEB-INF/jsp/" />  
  28.         <property name="suffix" value=".jsp" />  
  29.     </bean>  
  30. </beans>  

11.配置web.xml

[python] view plain copy

 图片 20图片 21

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns=""  
  3.     xmlns:xsi=""  
  4.     xsi:schemaLocation="   
  5.     ;  
  6.     <!-- 加载Spring容器配置 -->  
  7.     <listener>  
  8.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  9.     </listener>  
  10.     <!-- 设置Spring容器加载所有的配置文件的路径 -->  
  11.     <context-param>  
  12.         <param-name>contextConfigLocation</param-name>  
  13.         <!-- <param-value>classpath:config/spring-*.xml</param-value> -->  
  14.         <param-value>classpath:spring-common.xml,classpath:spring-mvc.xml</param-value>  
  15.     </context-param>  
  16.     <!-- 配置SpringMVC核心控制器 -->  
  17.     <servlet>  
  18.         <servlet-name>springMVC</servlet-name>  
  19.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  20.         <!-- 配置初始配置化文件,前面contextConfigLocation看情况二选一 -->    
  21.         <init-param>  
  22.             <param-name>contextConfigLocation</param-name>  
  23.             <param-value>classpath:spring-common.xml,classpath:spring-mvc.xml</param-value>  
  24.         </init-param>  
  25.         <!-- 启动加载一次 -->    
  26.         <load-on-startup>1</load-on-startup>  
  27.     </servlet>  
  28.     <!--为DispatcherServlet建立映射 -->  
  29.     <servlet-mapping>  
  30.         <servlet-name>springMVC</servlet-name>  
  31.         <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->  
  32.         <url-pattern>/</url-pattern>  
  33.     </servlet-mapping>  
  34.     <!-- 防止Spring内存溢出监听器 -->  
  35.     <listener>  
  36.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  37.     </listener>  
  38.     <!-- 解决工程编码过滤器 -->  
  39.     <filter>  
  40.         <filter-name>encodingFilter</filter-name>  
  41.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  42.         <init-param>  
  43.             <param-name>encoding</param-name>  
  44.             <param-value>UTF-8</param-value>  
  45.         </init-param>  
  46.         <init-param>  
  47.             <param-name>forceEncoding</param-name>  
  48.             <param-value>true</param-value>  
  49.         </init-param>  
  50.     </filter>  
  51.     <filter-mapping>  
  52.         <filter-name>encodingFilter</filter-name>  
  53.         <url-pattern>/*</url-pattern>  
  54.     </filter-mapping>  
  55.     <welcome-file-list>  
  56.         <welcome-file>index.jsp</welcome-file>  
  57.     </welcome-file-list>  
  58. </web-app>  
  59. 12.建立service以及service实现【UserService.java】

    [python] view plain copy

     图片 22图片 23

    1. package com.lyt.service;  
    2. import java.util.List;  
    3. import com.lyt.model.User;  
    4. public interface UserService {  
    5.     void save(User user);  
    6.     boolean update(User user);  
    7.     boolean delete(int id);  
    8.     User findById(int id);  
    9.     List<User> findAll();  
    10. }  
【UserServiceImpl.java】

**[python]** [view
plain](http://blog.csdn.net/liyintaoliuyun/article/details/51426479) [copy](http://blog.csdn.net/liyintaoliuyun/article/details/51426479)

 [![](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/1685450)[![](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/1685450/fork)

1.  package com.lyt.service.impl;  
2.  import java.util.List;  
3.  import javax.annotation.Resource;  
4.  import org.springframework.stereotype.Service;  
5.  import org.springframework.transaction.annotation.Transactional;  
6.  import com.lyt.mapper.UserMapper;  
7.  import com.lyt.model.User;  
8.  import com.lyt.service.UserService;  
9.   
10. @Service  
11. @Transactional  
12. // 此处不再进行创建SqlSession和提交事务,都已交由spring去管理了。  
13. public class UserServiceImpl implements UserService {  
14.  
15.     @Resource  
16.     private UserMapper mapper;  
17.     /**  
18.      * 根据  id  删除 数据  
19.      */  
20.     public boolean delete(int id) {  
21. return mapper.delete(id);  
22.     }  
23.     /**  
24.      * 查询User的全部数据  
25.      */  
26.     public List&lt;User&gt; findAll() {  
27.         List&lt;User&gt; findAllList = mapper.findAll();  
28. return findAllList;  
29.     }  
30.     /**  
31.      * 根据 id 查询 对应数据  
32.      */  
33.     public User findById(int id) {  
34.         User user = mapper.findById(id);  
35. return user;  
36.     }  
37.     /**  
38.      * 新增数据  
39.      */  
40.     public void save(User user) {  
41.         mapper.save(user);  
42.     }  
43.     /**  
44.      * 根据 id 修改对应数据  
45.      */  
46.     public boolean update(User user) {  
47. return mapper.update(user);  
48.     }  
49. }  

13.建立Controller【UserController.java】

**[python]** [view
plain](http://blog.csdn.net/liyintaoliuyun/article/details/51426479) [copy](http://blog.csdn.net/liyintaoliuyun/article/details/51426479)

 [![](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/1685450)[![](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/1685450/fork)

1.  &lt;span style="font-size:14px;"&gt;package com.lyt.controller;  
2.  import java.io.IOException;  
3.  import java.io.PrintWriter;  
4.  import java.util.List;  
5.  import javax.servlet.http.HttpServletRequest;  
6.  import javax.servlet.http.HttpServletResponse;  
7.  import org.springframework.beans.factory.annotation.Autowired;  
8.  import org.springframework.stereotype.Controller;  
9.  import org.springframework.ui.Model;  
10. import org.springframework.web.bind.annotation.RequestMapping;  
11. import com.lyt.model.User;  
12. import com.lyt.service.UserService;  
13.  
14. @Controller  
15. @RequestMapping("/user")  
16. public class UserController {  
17.     @Autowired  
18.     private UserService userService;  
19.     /**  
20.      * 获取所有用户列表  
21.      * @param request  
22.      * @return  
23.      */  
24.     @RequestMapping("/getAllUser")  
25.     public String getAllUser(HttpServletRequest request,Model model){  
26.         List&lt;User&gt; user = userService.findAll();  
27.         model.addAttribute("userList", user);  
28.         request.setAttribute("userList", user);  
29. return "/allUser";  
30.     }  
31.     /**  
32.      * 跳转到添加用户界面  
33.      * @param request  
34.      * @return  
35.      */  
36.     @RequestMapping("/toAddUser")  
37.     public String toAddUser(){  
38. return "/addUser";  
39.     }  
40.     /**  
41.      * 添加用户并重定向  
42.      * @param user  
43.      * @param request  
44.      * @return  
45.      */  
46.     @RequestMapping("/addUser")  
47.     public String addUser(User user,Model model){  
48.         userService.save(user);  
49. return "redirect:/user/getAllUser";  
50.     }  
51.     /**  
52.      *编辑用户  
53.      * @param user  
54.      * @param request  
55.      * @return  
56.      */  
57.     @RequestMapping("/updateUser")  
58.     public String updateUser(User user,HttpServletRequest request,Model model){  
59. if(userService.update(user)){  
60.             user = userService.findById(user.getId());  
61.             request.setAttribute("user", user);  
62.             model.addAttribute("user", user);  
63. return "redirect:/user/getAllUser";  
64.         }else{  
65. return "/error";  
66.         }  
67.     }  
68.     /**  
69.      * 根据id查询单个用户  
70.      * @param id  
71.      * @param request  
72.      * @return  
73.      */  
74.     @RequestMapping("/getUser")  
75.     public String getUser(int id,HttpServletRequest request,Model model){  
76.         request.setAttribute("user", userService.findById(id));  
77.         model.addAttribute("user", userService.findById(id));  
78. return "/editUser";  
79.     }  
80.     /**  
81.      * 删除用户  
82.      * @param id  
83.      * @param request  
84.      * @param response  
85.      */  
86.     @RequestMapping("/delUser")  
87.     public void delUser(int id,HttpServletRequest request,HttpServletResponse response){  
88.         String result = "{\"result\":\"error\"}";  
89. if(userService.delete(id)){  
90.             result = "{\"result\":\"success\"}";  
91.         }  
92.         response.setContentType("application/json");  
93. try {  
94.             PrintWriter out = response.getWriter();  
95.             out.write(result);  
96.         } catch (IOException e) {  
97.             e.printStackTrace();  
98.         }  
99.     }  
100. }  
101. &lt;/span&gt;  




至此
大部分[架构](http://lib.csdn.net/base/architecture)以及代码已经搭建完成

我们来做前台页面--修改index.jsp

**[python]** [view
plain](http://blog.csdn.net/liyintaoliuyun/article/details/51426479) [copy](http://blog.csdn.net/liyintaoliuyun/article/details/51426479)

 [![](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/1685450)[![](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/1685450/fork)

1.  &lt;%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&gt;  
2.  &lt;%  
3.      String path = request.getContextPath();  
4.      String basePath = request.getScheme() + "://"  
5.              + request.getServerName() + ":" + request.getServerPort()  
6.              + path + "/";  
7.  %&gt;  
8.  &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;  
9.  &lt;html&gt;  
10. &lt;head&gt;  
11. &lt;base href="&lt;%=basePath%&gt;"&gt;  
12. &lt;title&gt;首页&lt;/title&gt;  
13. &lt;/head&gt;  
14. &lt;body&gt;  
15.     &lt;h5&gt;  
16.         &lt;a href="&lt;%=basePath%&gt;user/getAllUser"&gt;进入用户管理页&lt;/a&gt;  
17.     &lt;/h5&gt;  
18. &lt;/body&gt;  
19. &lt;/html&gt;  


在 WEB-INF
下新建jsp文件夹【里面新建以下文件】【addUser.jsp】【allUser.jsp】【editUser.jsp】

addUser.jsp内容

**[python]** [view
plain](http://blog.csdn.net/liyintaoliuyun/article/details/51426479) [copy](http://blog.csdn.net/liyintaoliuyun/article/details/51426479)

 [![](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/1685450)[![](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/1685450/fork)

1.  &lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;  
2.  &lt;%  
3.  String path = request.getContextPath();  
4.  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
5.  %&gt;  
6.  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;    
7.  &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;  
8.  &lt;html&gt;  
9.    &lt;head&gt;  
10.     &lt;base href="&lt;%=basePath%&gt;"&gt;  
11.     &lt;title&gt;添加用户&lt;/title&gt;  
12.     &lt;script type="text/javascript"&gt;  
13.     function addUser(){  
14.         var form = document.forms[0];  
15.         form.action = "&lt;%=basePath%&gt;user/addUser";  
16.         form.method="post";  
17.         form.submit();  
18.     }  
19. &lt;/script&gt;  
20.   &lt;/head&gt;  
21.   &lt;body&gt;  
22.     &lt;h1&gt;&lt;%=path%&gt;添加用户&lt;%=basePath%&gt;&lt;/h1&gt;  
23.     &lt;form action="" name="userForm"&gt;  
24.         姓名:&lt;input type="text" name="userName"&gt;  
25.         年龄:&lt;input type="text" name="age"&gt;  
26.         &lt;input type="button" value="添加" onclick="addUser()"&gt;  
27.     &lt;/form&gt;  
28.   &lt;/body&gt;  
29. &lt;/html&gt;  


allUser.jsp

**[python]** [view
plain](http://blog.csdn.net/liyintaoliuyun/article/details/51426479) [copy](http://blog.csdn.net/liyintaoliuyun/article/details/51426479)

 [![](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/1685450)[![](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/1685450/fork)

1.  &lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;  
2.  &lt;%  
3.  String path = request.getContextPath();  
4.  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
5.  %&gt;  
6.  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;    
7.  &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;  
8.  &lt;html&gt;  
9.    &lt;head&gt;  
10.     &lt;base href="&lt;%=basePath%&gt;"&gt;  
11.     &lt;script type="text/javascript" src="js/jquery-1.7.1.js"&gt;&lt;/script&gt;  
12.     &lt;title&gt;用户列表&lt;/title&gt;  
13.     &lt;script type="text/javascript"&gt;  
14.     function del(id){  
15.         $.get("&lt;%=basePath%&gt;user/delUser?id=" + id,function(data){  
16. if("success" == data.result){  
17.                 alert("删除成功");  
18.                 window.location.reload();  
19.             }else{  
20.                 alert("删除失败");  
21.             }  
22.         });  
23.     }  
24. &lt;/script&gt;  
25.   &lt;/head&gt;  
26.   &lt;body&gt;  
27.     &lt;h6&gt;&lt;a href="&lt;%=basePath%&gt;user/toAddUser"&gt;添加用户&lt;/a&gt;&lt;/h6&gt;  
28.     &lt;table border="1"&gt;  
29.         &lt;tbody&gt;  
30.             &lt;tr&gt;  
31.                 &lt;th&gt;姓名&lt;/th&gt;  
32.                 &lt;th&gt;年龄&lt;/th&gt;  
33.                 &lt;th&gt;操作&lt;/th&gt;  
34.             &lt;/tr&gt;  
35.             &lt;c:if test="${!empty userList }"&gt;  
36.                 &lt;c:forEach items="${userList}" var="user"&gt;  
37.                     &lt;tr&gt;  
38.                         &lt;td&gt;${user.userName }&lt;/td&gt;  
39.                         &lt;td&gt;${user.age }&lt;/td&gt;  
40.                         &lt;td&gt;  
41.                             &lt;a href="&lt;%=basePath%&gt;user/getUser?id=${user.id}"&gt;编辑&lt;/a&gt;  
42.                             &lt;a href="javascript:del('${user.id }')"&gt;删除&lt;/a&gt;  
43.                         &lt;/td&gt;  
44.                     &lt;/tr&gt;               
45.                 &lt;/c:forEach&gt;  
46.             &lt;/c:if&gt;  
47.         &lt;/tbody&gt;  
48.     &lt;/table&gt;  
49.   &lt;/body&gt;  
50. &lt;/html&gt;  


editUser.jsp

**[python]** [view
plain](http://blog.csdn.net/liyintaoliuyun/article/details/51426479) [copy](http://blog.csdn.net/liyintaoliuyun/article/details/51426479)

 [![](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/1685450)[![](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/1685450/fork)

1.  &lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;  
2.  &lt;%  
3.  String path = request.getContextPath();  
4.  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
5.  %&gt;  
6.  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;    
7.  &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;  
8.  &lt;html&gt;  
9.    &lt;head&gt;  
10.     &lt;base href="&lt;%=basePath%&gt;"&gt;  
11.     &lt;title&gt;编辑用户&lt;/title&gt;  
12.     &lt;script type="text/javascript"&gt;  
13.     function updateUser(){  
14.         var form = document.forms[0];  
15.         form.action = "&lt;%=basePath%&gt;user/updateUser";  
16.         form.method="post";  
17.         form.submit();  
18.     }  
19. &lt;/script&gt;  
20.   &lt;/head&gt;  
21.   &lt;body&gt;  
22.     &lt;h1&gt;添加用户&lt;/h1&gt;  
23.     &lt;form action="" name="userForm"&gt;  
24.         &lt;input type="hidden" name="id" value="${user.id }"/&gt;  
25.         姓名:&lt;input type="text" name="userName" value="${user.userName }"/&gt;  
26.         年龄:&lt;input type="text" name="age" value="${user.age }"/&gt;  
27.         &lt;input type="button" value="编辑" onclick="updateUser()"/&gt;  
28.     &lt;/form&gt;  
29.   &lt;/body&gt;  
30. &lt;/html&gt;  


到此 简单的整合SSM 【基本的操作内容已经完成】

让你们看下界面运行,地址:http://localhost:8088/SpringMVC_Spring_mybatis/

首页:

![](http://img.blog.csdn.net/20160518230222730?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)

点击编辑进去:

![](http://img.blog.csdn.net/20160518230242574?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)

点击添加进去:

![](http://img.blog.csdn.net/20160518230302290?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)

由于我在网络问题
 图片暂时没有上传上去。【现在我吧图片都正上去了,希望多多支持】

对应的数据库 表

**[python]** [view
plain](http://blog.csdn.net/liyintaoliuyun/article/details/51426479) [copy](http://blog.csdn.net/liyintaoliuyun/article/details/51426479)

 [![](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/1685450)[![](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/1685450/fork)

1.  /*  
2.  Navicat MySQL Data Transfer  
3.  Source Server         : localhost  
4.  Source Server Version : 50515  
5.  Source Host           : localhost:3306  
6.  Source Database       : db_zsl  
7.  Target Server Type    : MYSQL  
8.  Target Server Version : 50515  
9.  File Encoding         : 65001  
10. Date: 2016-05-16 16:10:51  
11. */  
12. SET FOREIGN_KEY_CHECKS=0;  
13. -- ----------------------------  
14. -- Table structure for `t_user`  
15. -- ----------------------------  
16. DROP TABLE IF EXISTS `t_user`;  
17. CREATE TABLE `t_user` (  
18.   `user_id` int(11) NOT NULL AUTO_INCREMENT,  
19.   `user_name` varchar(20) NOT NULL,  
20.   `user_age` varchar(20) NOT NULL,  
21.   PRIMARY KEY (`user_id`)  
22. ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;  
23. -- ----------------------------  
24. -- Records of t_user  
25. -- ----------------------------  
26. INSERT INTO `t_user` VALUES ('2', '朱佳鹏', '25');  
27. INSERT INTO `t_user` VALUES ('3', '傻狍子', '150');  
28. INSERT INTO `t_user` VALUES ('4', 'jiuqiyuliang', '23');  
29. INSERT INTO `t_user` VALUES ('5', 'jiuqiyuliang', '23');  
30. INSERT INTO `t_user` VALUES ('6', 'jiuqiyuliang', '23');  
31. INSERT INTO `t_user` VALUES ('7', 'jiuqiyuliang', '23');  
32. INSERT INTO `t_user` VALUES ('9', 'liyintao123', '23123');  
33. -- ----------------------------  
34. -- Table structure for `user_t`  
35. -- ----------------------------  
36. DROP TABLE IF EXISTS `user_t`;  
37. CREATE TABLE `user_t` (  
38.   `id` int(11) NOT NULL AUTO_INCREMENT,  
39.   `user_name` varchar(40) NOT NULL,  
40.   `password` varchar(255) NOT NULL,  
41.   `age` int(4) NOT NULL,  
42.   PRIMARY KEY (`id`)  
43. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  
44. -- ----------------------------  
45. -- Records of user_t  
46. -- ----------------------------  
47. INSERT INTO `user_t` VALUES ('1', '测试', 'sfasgfaf', '24');  

NO.2  准备好相应的jar包

这里我是采用Spring是.2.0版本 mybatis是3.3.0版本的

图片 24

 

图中框选的jar包是一些依赖性jar包   不要以为这就是完整的jar包   还有呢....

图片 25

 

到此为止 jar包已准备完毕  现在就来开始准备框架的相关的配置了  首先是Spring+mybatis关联的配置

NO.3 配置框架相关功能的配置文件

在src目录中config文件夹中新建spring-mybatis.xml文件 ,通过这个文件集成并关联Spring+mybatis框架

 

[java] view plain copy

 

  1. <span style="font-size: 14px;"><</span><span style="font-size:18px;">?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns=""  
  3.     xmlns:xsi="" xmlns:p=""  
  4.     xmlns:context=""  
  5.     xmlns:mvc=""  
  6.     xsi:schemaLocation="    
  7.             
  8.             
  9.             
  10.             
  11.         ;  
  12.     <span style="color:#ff0000;"><!-- 自动扫描 --></span>  
  13.     <context:component-scan base-package="com.cntv" />  
  14.     <span style="color:#ff0000;"><!-- 引入配置文件 --></span>  
  15.     <bean id="propertyConfigurer"  
  16.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  17.         <property name="location" value="classpath:jdbc.properties" />  
  18.     </bean>  
  19.   
  20.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  21.         destroy-method="close">  
  22.         <property name="driverClassName" value="${driver}" />  
  23.         <property name="url" value="${url}" />  
  24.         <property name="username" value="${username}" />  
  25.         <property name="password" value="${password}" />  
  26.         <span style="color:#ff0000;"><!-- 初始化连接大小 --></span>  
  27.         <property name="initialSize" value="${initialSize}"></property>  
  28.         <span style="color:#ff0000;"><!-- 连接池最大数量 --></span>  
  29.         <property name="maxActive" value="${maxActive}"></property>  
  30.         <span style="color:#ff0000;"><!-- 连接池最大空闲 --></span>  
  31.         <property name="maxIdle" value="${maxIdle}"></property>  
  32.         <span style="color:#ff0000;"><!-- 连接池最小空闲 --></span>  
  33.         <property name="minIdle" value="${minIdle}"></property>  
  34.         <span style="color:#ff0000;"><!-- 获取连接最大等待时间 --></span>  
  35.         <property name="maxWait" value="${maxWait}"></property>  
  36.     </bean>  
  37.   
  38.     <span style="color:#ff0000;"><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --></span>  
  39.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  40.         <property name="dataSource" ref="dataSource" />  
  41.         <span style="color:#ff0000;"><!-- 自动扫描mapping.xml文件 --></span>  
  42.         <property name="mapperLocations" value="classpath:com/cntv/mapper/*.xml"></property>  
  43.     </bean>  
  44.   
  45.     <span style="color:#ff0000;"><!-- DAO接口所在包名,Spring会自动查找其下的类 --></span>  
  46.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  47.         <property name="basePackage" value="com.cn.hnust.dao" />  
  48.         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
  49.     </bean>  
  50.   
  51.     <span style="color:#ff0000;"><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --></span>  
  52.     <bean id="transactionManager"  
  53.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  54.         <property name="dataSource" ref="dataSource" />  
  55.     </bean>  
  56.   
  57. </beans></span>  

 

 

 

紧接着在src下config包下新建jdbc.properties文化  把数据库的配置放在这个配置文件里面

 

[html] view plain copy

 

  1. <span style="font-size:18px;">driver=com.mysql.jdbc.Driver  
  2. url=jdbc:mysql://125.221.225.113:3306/<span style="color:#ff0000;">db_zsl</span>  
  3. username=demao  
  4. password=demao  
  5. #定义初始连接数  
  6. initialSize=0  
  7. #定义最大连接数  
  8. maxActive=20  
  9. #定义最大空闲  
  10. maxIdle=20  
  11. #定义最小空闲  
  12. minIdle=1  
  13. #定义最长等待时间  
  14. maxWait=60000</span>  

 

说明:第一行是加载jdbc驱动地址 

第二行是连接数据库 加红色字体是数据库名字  前面是Ip地址+mysql数据库端口号

userName是数据库连接用户名

password是连接数据库密码

 

接下来配置SpringMvc相关的配置 

还是跟之前一样,在src目录下的config文件夹中新建spring-mvc.xml配置文件 

 这个文件主要是负责Mvc架构视图,前后台数据交互等。

 

[html] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns=""  
  3.  xmlns:xsi="" xmlns:p=""  
  4.  xmlns:context=""  
  5.  xmlns:mvc=""  
  6.  xsi:schemaLocation="    
  7.         
  8.         
  9.         
  10.         
  11.     ;  
  12.     <span style="color:#ff0000;"><!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --></span>  
  13.     <context:component-scan base-package="com.cntv.controller" />  
  14.     <span style="color:#ff0000;"><!--避免IE执行AJAX时,返回JSON出现下载文件 --></span>  
  15.     <bean id="mappingJacksonHttpMessageConverter"  
  16.       
  17.         class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
  18.         <property name="supportedMediaTypes">  
  19.             <list>  
  20.                 <value>text/html;charset=UTF-8</value>  
  21.             </list>  
  22.         </property>  
  23.     </bean>  
  24.     <span style="color:#ff0000;"><!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 --></span>  
  25.     <bean  
  26.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
  27.         <property name="messageConverters">  
  28.             <list>  
  29.                 <ref bean="mappingJacksonHttpMessageConverter" ></ref><span style="color:#ff0000;">   <!-- JSON转换器 --></span>  
  30.             </list>  
  31.         </property>  
  32.     </bean>   
  33.     <span style="color:#ff0000;"><!-- 定义跳转的文件的前后缀 ,视图模式配置--></span>  
  34.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  35.         <span style="color:#ff0000;"><!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --></span>  
  36.         <property name="prefix" value="/" />  
  37.         <property name="suffix" value=".jsp" />  
  38.     </bean>  
  39.     <span style="color:#ff0000;"><!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --></span>  
  40.       <!--  <bean id="multipartResolver"    
  41.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
  42.         默认编码  
  43.         <property name="defaultEncoding" value="utf-8" />    
  44.         文件大小最大值  
  45.         <property name="maxUploadSize" value="10485760000" />    
  46.         内存中的最大值  
  47.         <property name="maxInMemorySize" value="40960" />    
  48.     </bean> -->  
  49. </beans></span></span>  

 

最后配置web.xml文件

项目总配置文件将spring-mybatis.xml和spring-mvc.xml集成到web.xml里面

[java] view plain copy

 

  1. <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi=""  
  3.     xmlns=""  
  4.     xsi:schemaLocation=" "  
  5.     version="3.0">  
  6.     <display-name>Archetype Created Web Application</display-name>  
  7.     <span style="color:#ff0000;"><!-- Spring和mybatis的配置文件 --></span>  
  8.     <context-param>  
  9.         <param-name>contextConfigLocation</param-name>  
  10.         <param-value>classpath:spring-mybatis.xml</param-value>  
  11.     </context-param>  
  12.     <span style="color:#ff0000;"><!-- 编码过滤器 --></span>  
  13.     <filter>  
  14.         <filter-name>encodingFilter</filter-name>  
  15.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  16.         <async-supported>true</async-supported>  
  17.         <init-param>  
  18.             <param-name>encoding</param-name>  
  19.             <param-value>UTF-8</param-value>  
  20.         </init-param>  
  21.     </filter>  
  22.     <filter-mapping>  
  23.         <filter-name>encodingFilter</filter-name>  
  24.         <url-pattern>/</url-pattern>  
  25.     </filter-mapping>  
  26.     <span style="color:#ff0000;"><!-- Spring监听器 --></span>  
  27.     <listener>  
  28.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  29.     </listener>  
  30.     <span style="color:#ff0000;"><!-- 防止Spring内存溢出监听器 --></span>  
  31.     <listener>  
  32.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  33.     </listener>  
  34.     <!-- Spring MVC servlet -->  
  35.     <servlet>  
  36.         <servlet-name>SpringMVC</servlet-name>  
  37.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  38.         <init-param>  
  39.             <param-name>contextConfigLocation</param-name>  
  40.             <param-value>classpath:spring-mvc.xml</param-value>  
  41.         </init-param>  
  42.         <load-on-startup>1</load-on-startup>  
  43.         <async-supported>true</async-supported>  
  44.     </servlet>  
  45.     <servlet-mapping>  
  46.         <servlet-name>SpringMVC</servlet-name>  
  47.         <span style="color:#ff0000;"><!-- 此处可以可以配置成*.do,对应struts的后缀习惯 --></span>  
  48.         <url-pattern>*.do</url-pattern>  
  49.     </servlet-mapping>  
  50.     <welcome-file-list>  
  51.         <welcome-file>/index.jsp</welcome-file>  
  52.     </welcome-file-list>  
  53.     <span style="color:#ff0000;"><!-- 配置SESSION超时,单位是分钟 --></span>  
  54.     <session-config>  
  55.         <session-timeout>15</session-timeout>  
  56.     </session-config>  
  57.   
  58. </web-app></span>  

NO.4 收官完成 测试框架能否正常运行

直到这里我们已经把框架配置好了现在我们就要写一些实在的东西了 把接口和service定一下

4.1.1  定义一个接口 

在dao包下新建IUserDao.java类

[java] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-size:18px;">package com.cntv.dao;  
  2.   
  3. import org.springframework.stereotype.Repository;  
  4.   
  5. import com.cntv.entity.User;  
  6. @Repository  
  7. public interface IUserDao {  
  8.     int deleteByPrimaryKey(Integer id);  
  9.   
  10.     int insert(User record);  
  11.   
  12.     int insertSelective(User record);  
  13.   
  14.     User selectByPrimaryKey(Integer id);  
  15.   
  16.     int updateByPrimaryKeySelective(User record);  
  17.   
  18.     int updateByPrimaryKey(User record);  
  19. }</span></span>  

4.1.2 定义一个service接口

 同样的在service包下新建IUserService.java类

[java] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-size:18px;">package com.cntv.service;  
  2.   
  3. import com.cntv.entity.User;  
  4.   
  5. public interface IUserService {  
  6.     public User getUserById(int userId);  
  7. }</span><span style="font-size:14px;">  
  8. </span></span>  

 

4.1.3定义一个javaBean

 

[java] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-size:18px;">package com.cntv.entity;  
  2. public class User {  
  3.     private Integer id;  
  4.   
  5.     private String userName;  
  6.   
  7.     private String password;  
  8.   
  9.     private Integer age;  
  10.   
  11.     public Integer getId() {  
  12.         return id;  
  13.     }  
  14.   
  15.     public void setId(Integer id) {  
  16.         this.id = id;  
  17.     }  
  18.   
  19.     public String getUserName() {  
  20.         return userName;  
  21.     }  
  22.   
  23.     public void setUserName(String userName) {  
  24.         this.userName = userName == null ? null : userName.trim();  
  25.     }  
  26.   
  27.     public String getPassword() {  
  28.         return password;  
  29.     }  
  30.   
  31.     public void setPassword(String password) {  
  32.         this.password = password == null ? null : password.trim();  
  33.     }  
  34.   
  35.     public Integer getAge() {  
  36.         return age;  
  37.     }  
  38.   
  39.     public void setAge(Integer age) {  
  40.         this.age = age;  
  41.     }  
  42.       
  43. }</span></span>  

 

4.1.4 定义一个mapper.xml实体映射 

很简单,在mapper文件夹下新建UserMapper.xml配置文件

[html] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "" >  
  3. <mapper namespace="com.cntv.dao.IUserDao" >  
  4.   <resultMap id="BaseResultMap" type="com.cntv.entity.User" >  
  5.     <id column="id" property="id" jdbcType="INTEGER" />  
  6.     <result column="user_name" property="userName" jdbcType="VARCHAR" />  
  7.     <result column="password" property="password" jdbcType="VARCHAR" />  
  8.     <result column="age" property="age" jdbcType="INTEGER" />  
  9.   </resultMap>  
  10.   <sql id="Base_Column_List" >  
  11.     id, user_name, password, age  
  12.   </sql>  
  13.   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >  
  14.     select   
  15.     <include refid="Base_Column_List" />  
  16.     from user_t  
  17.     where id = #{id,jdbcType=INTEGER}  
  18.   </select>  
  19.   <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >  
  20.     delete from user_t  
  21.     where id = #{id,jdbcType=INTEGER}  
  22.   </delete>  
  23.   <insert id="insert" parameterType="com.cntv.entity.User" >  
  24.     insert into user_t (id, user_name, password,   
  25.       age)  
  26.     values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},   
  27.       #{age,jdbcType=INTEGER})  
  28.   </insert>  
  29.   <insert id="insertSelective" parameterType="com.cntv.entity.User" >  
  30.     insert into user_t  
  31.     <trim prefix="(" suffix=")" suffixOverrides="," >  
  32.       <if test="id != null" >  
  33.         id,  
  34.       </if>  
  35.       <if test="userName != null" >  
  36.         user_name,  
  37.       </if>  
  38.       <if test="password != null" >  
  39.         password,  
  40.       </if>  
  41.       <if test="age != null" >  
  42.         age,  
  43.       </if>  
  44.     </trim>  
  45.     <trim prefix="values (" suffix=")" suffixOverrides="," >  
  46.       <if test="id != null" >  
  47.         #{id,jdbcType=INTEGER},  
  48.       </if>  
  49.       <if test="userName != null" >  
  50.         #{userName,jdbcType=VARCHAR},  
  51.       </if>  
  52.       <if test="password != null" >  
  53.         #{password,jdbcType=VARCHAR},  
  54.       </if>  
  55.       <if test="age != null" >  
  56.         #{age,jdbcType=INTEGER},  
  57.       </if>  
  58.     </trim>  
  59.   </insert>  
  60.   <update id="updateByPrimaryKeySelective" parameterType="com.cntv.entity.User" >  
  61.     update user_t  
  62.     <set >  
  63.       <if test="userName != null" >  
  64.         user_name = #{userName,jdbcType=VARCHAR},  
  65.       </if>  
  66.       <if test="password != null" >  
  67.         password = #{password,jdbcType=VARCHAR},  
  68.       </if>  
  69.       <if test="age != null" >  
  70.         age = #{age,jdbcType=INTEGER},  
  71.       </if>  
  72.     </set>  
  73.     where id = #{id,jdbcType=INTEGER}  
  74.   </update>  
  75.   <update id="updateByPrimaryKey" parameterType="com.cntv.entity.User" >  
  76.     update user_t  
  77.     set user_name = #{userName,jdbcType=VARCHAR},  
  78.       password = #{password,jdbcType=VARCHAR},  
  79.       age = #{age,jdbcType=INTEGER}  
  80.     where id = #{id,jdbcType=INTEGER}  
  81.   </update>  
  82. </mapper></span></span>  

这个文件就包含CRUD操作 sql语句在标签中都有定义 ,需要注意的是这里面sql语句用到的一些参数全部是从dao层获取的

mapper文件是映射数据库表对应的javaBean实体 mapper中可以写sql语句 很方便。

4.1.5 定义一个service实现类

在service包下serviceImpl包下新建UserServiceImpl类

[java] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-size:18px;">package com.cntv.service.serviceImpl;  
  2. import javax.annotation.Resource;  
  3. import javax.servlet.http.HttpServletResponse;  
  4.   
  5. import org.springframework.context.ApplicationContext;  
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  7. import org.springframework.stereotype.Service;  
  8. import com.cntv.dao.IUserDao;  
  9. import com.cntv.entity.User;  
  10. import com.cntv.service.IUserService;  
  11. import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;  
  12. @Service  
  13. public class UserServiceImpl implements IUserService {  
  14.     @Resource  
  15.     private IUserDao userDao;  
  16.     @Override  
  17.     public User getUserById(int userId) {  
  18.         // TODO Auto-generated method stub  
  19.         return this.userDao.selectByPrimaryKey(userId);  
  20.     }  
  21.    public static void main(String[] args) {  
  22.        ApplicationContext ca= new ClassPathXmlApplicationContext("spring-mybatis.xml");  
  23.        UserServiceImpl u=(UserServiceImpl) ca.getBean("userServiceImpl");  
  24.       User ue= u.getUserById(12);  
  25.        System.out.println("用户名:"+ue.getUserName());  
  26. <span>    </span>   System.out.println("用户密码:"+ue.getPassword());  
  27. }  
  28. public IUserDao getUserDao() {  
  29.     return userDao;  
  30. }  
  31. public void setUserDao(IUserDao userDao) {  
  32.     this.userDao = userDao;  
  33. }  
  34.      
  35. }</span><span style="font-size:14px;">  
  36. </span></span>  

 

 

4.1.6 定义一个controller

在src目录下的controller包下新建一个controller,在这里我新建的是UserController.java

[java] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-size:18px;">package com.cntv.controller;  
  2.   
  3. import javax.annotation.Resource;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import javax.servlet.http.HttpServletResponse;  
  6.   
  7. import org.apache.coyote.Request;  
  8. import org.springframework.http.HttpRequest;  
  9. import org.springframework.stereotype.Controller;  
  10. import org.springframework.ui.Model;  
  11. import org.springframework.web.bind.annotation.RequestMapping;  
  12. import org.springframework.web.bind.annotation.ResponseBody;  
  13. import org.springframework.web.servlet.ModelAndView;  
  14.   
  15. import com.cntv.entity.User;  
  16. import com.cntv.service.serviceImpl.UserServiceImpl;  
  17.   
  18. @Controller  
  19. public class UserController {  
  20.     @Resource  
  21.     private UserServiceImpl userService;  
  22.     @RequestMapping("test.do")  
  23.     public ModelAndView  testCon(HttpServletRequest request,Model model){  
  24.         System.out.println("hello");  
  25.         System.out.println(request.getParameter("id"));  
  26.         User u=userService.getUserById(new Integer(request.getParameter("id")));  
  27.         System.out.println(u.getUserName());  
  28.         ModelAndView mod=new ModelAndView();  
  29.         mod.setViewName("success");  
  30.         return mod;  
  31.     }  
  32.     /** 
  33.      * @deprecated 
  34.      * 根据前台封装的javaBean属性进行封装  这里是进行User对象的封装 
  35.      * 测试后台是否能正常能拿到数据        
  36.      * @param user 获取前台穿过来的对象 
  37.      * @param request 
  38.      * @return 
  39.      */  
  40.     @RequestMapping("submit.do")  
  41.     public String testBean(User user,HttpServletRequest request){  
  42.         System.out.println("========+"+user.getUserName()+"..."+user.getPassword());  
  43.         return "success";  
  44.           
  45.     }  
  46.     public UserServiceImpl getUserService() {  
  47.         return userService;  
  48.     }  
  49.     public void setUserService(UserServiceImpl userService) {  
  50.         this.userService = userService;  
  51.     }  
  52.       
  53. }</span><span style="font-size:14px;">  
  54. </span></span>  

 

 

 

Ok!!!现在就来测试下吧后台数据库和service层到底能不能打通吧  

 

图片 26

再来对照下数据库中数据吧!!

图片 27

 经过测试持久层和业务层是能互通的 测试通过!!!!

  

啦啦啦!  现在测试前后台数据能不能互通了  ....

 

前端新建一个jsp测试页面  测试请求和数据能不能到达后台controller里面

在这里我新建的是eg.jsp

 

[html] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-size:18px;"><%@ page language="java" contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ";  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  7. <script type="text/javascript" src="js/jquery-1.7.js"></script>  
  8. <title>Insert title here</title>  
  9. </head>  
  10. <body>  
  11. <input id="inp" type="hidden" maxlength="20">  
  12. <h2>Test formMait</h2>  
  13. <form action="submit.do" method="post" >  
  14. 账户<input type="text" name="userName"><br>  
  15. 密码<input type="text" name="password"><br>  
  16. <button>提交</button>  
  17.   
  18. </form>  
  19. <script type="text/javascript">  
  20.  $(function(){  
  21.     // alert("json hello");  
  22.        
  23.  })  
  24.  function clicBt(){  
  25.      console.log("hello friends!!!")  
  26.      $.ajax({  
  27.            type: "POST",  
  28.            url: "test.do?id="+$("#inp").val(),  
  29.            data: "name=John&location=Boston",  
  30.            success: function(msg){  
  31.              alert("china is hello  and you are okau!");  
  32.            }  
  33.         });  
  34.        
  35.        
  36.  }  
  37. </script>  
  38. </body>  
  39. </html></span></span>  

重点来了!!!测试前台数据和请求能不能到达后台

 

>>>>>>输入 进入测试页面 

图片 28

到后台来看看控制台有什么反应木有??

图片 29

 

本文由开元棋牌发布于数据库,转载请注明出处:SSM框架的搭建

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。