SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

一、基本概念

     使用SSM(spring、SpringMVC和Mybatis)

1.1、Spring

        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

1.2、SpringMVC

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

 1.3、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对象)映射成数据库中的记录。

二、根据图来理解使用SSM添加数据

SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

   首先导入jar

SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

  其次

  SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

 (一)配置实体

  

public class UserInfo {
       private Integer userid;//用户的id
    private Integer uage;//用户年龄
    private String uname;//用户姓名
    public Integer getUage() {
        return uage;
    }
    public void setUage(Integer uage) {
        this.uage = uage;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public Integer getUserid() {
        return userid;
    }
    public void setUserid(Integer userid) {
        this.userid = userid;
    }
    
    
    
}

(二)配置实体的小配置(Mybatis的配置)

  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.yxj.dao.IUserInfoDAO">
    <select id="add" parameterType="cn.yxj.entity.UserInfo">
    <!-- <select >-->
                                <!-- 数据库创建表的时候uid和id是关键字 -->
                    <!-- 添加值的顺序要和数据库一样 -->
        insert into userinfo values(#{uname},#{uage},SEQ_SSM.nextval)
    </select>
</mapper>

 (三)创建dao接口

//不需要dao的实现类,通过代理生成
public interface IUserInfoDAO {
//添加用户数据
 public void add(UserInfo info);
 
}

 注意点:不需要dao的实现类,通过代理生成

(四)创建service

  ServiceDao接口

public interface IUserInfoService {
    //添加用户
    public void add(UserInfo info);
}

    ServiceDaoImpl实现

public class UserInfoServiceImpl implements IUserInfoService {
    
    private IUserInfoDAO dao;
    
    public void add(UserInfo info) {
        dao.add(info);
    }
    public IUserInfoDAO getDao() {
        return dao;
    }
    public void setDao(IUserInfoDAO dao) {
        this.dao = dao;
    }
   
}

(五)配置Controller

public class UserInfoController implements Controller{
     
    private IUserInfoService service;
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String uname=request.getParameter("uname");
        Integer uage=Integer.valueOf(request.getParameter("uage"));
        
        UserInfo info=new UserInfo();
        info.setUage(uage);
        info.setUname(uname);
        
        service.add(info);
        
        return new ModelAndView("/welcome.jsp");
    }
    public IUserInfoService getService() {
        return service;
    }
    public void setService(IUserInfoService service) {
        this.service = service;
    }
}

 (六)配置application.xml

      

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
         http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
           http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-4.1.xsd  " >

          
      <!-- 01.配置数据源 -->
   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${driverClass}"></property>
         <property name="jdbcUrl" value="${jdbcUrl}"></property>
         <property name="user" value="${user}"></property>
         <property name="password" value="${password}"></property>
   </bean>
   

    <!-- 1.1 关联jdbc.properties -->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <!-- 02.配置SessionFactory -->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 03.生成dao代理對象 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>
        <property name="basePackage" value="cn.yxj.dao"></property>
    </bean>

    <!--04.配置service -->
    <bean id="userService" class="cn.yxj.service.UserInfoServiceImpl">
        <property name="dao" ref="IUserInfoDAO"></property>
    </bean>

    <!-- 05.配置action -->
    <bean id="/userAction.do" class="cn.yxj.controller.UserInfoController">
        <property name="service" ref="userService"></property>
    </bean>
    <!-- 06.配置事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 07.配置开启事务操作 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--指定在连接方法上应用的事务属性 -->
            <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
    <!-- aop配置 -->
    <aop:config>
        <aop:pointcut expression="execution(* *..service.*.*(..))"
            id="stockPointcut" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="stockPointcut" />
    </aop:config>

</beans>

 (七)配置jdbc.properties

driverClass=oracle.jdbc.driver.OracleDriver
jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl
user=T2
password=T2

(八)配置 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 别名 -->
<!-- <typeAliases>
     <package name="cn.yxj.entity"/>
  </typeAliases> -->
     <mappers>
        <mapper resource="cn/yxj/entity/IUserInfoDAO.xml" />
    </mappers>
</configuration>

(九)配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>    
  <!-- 1.针对Spring配置:读取配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <!-- 注册ServletContext监听器,创建容器对象,并且将ApplicationContext对象放到Application域中 -->
  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
 
 <!-- 针对SpringMVC的配置::::::*调度器:本质上一个serlvet            配置的关于SpringmVC组件 -->
     <servlet>
       <servlet-name>springmvc</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
       <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext.xml</param-value>
       </init-param>
       <!-- 1表示正常初始化配置文件 init-param    0、-1相当于没有设置 -->
       <load-on-startup>1</load-on-startup>
     </servlet>
     <!-- 映射文件 -->
     <servlet-mapping>
         <servlet-name>springmvc</servlet-name>
         <url-pattern>*.do</url-pattern>
     </servlet-mapping>
 
    <!-- 解决乱码的过滤器 -->
    <filter>
       <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
 
 
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 (十)配置页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <style type="text/css">
       form{
         margin:0px auto;
         border:1px solid red;
         500px;
         padding:20px;
       }
    </style>
    <title></title>
  </head>
  
  <body>
    <h1>SSM整合</h1>
    <form action="${pageContext.request.contextPath }/userAction.do" method="post">
            用户名:<input name="uname"/> <br/>
            用户年龄<input name="uage"/><br/>
       <input type="submit" value="save"/>
    </form>
  </body>
</html>

        可以运行了,但是数据库要有UserInfo这个表。