zoukankan      html  css  js  c++  java
  • spring4.1.3+springmvc+mybatis3.2.1整合

    注意:这里使用了mybatis3.2.1版本,刚开始用了3.4.1的版本,会报一个很奇怪的错(java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;),换了这个包就好了

    1. 所需包,spring的jar包,mybatis的jar包,spring-mybatis.jar,数据库连接的mysql-connection.jar,日志的log4j.jar(33个包,如果用到了jstl还需要加入jstl包,36个)

    2. 在web.xml中添加spring的监听,以及配置springmvc的核心文件。

    
    <?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>
    
      <!-- spring文件的监听 -->
    
       <listener>
    
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
        </listener>
    
      <!-- spring 加载配置文件的路径 -->
    
      <context-param>
    
        <param-name>contextConfigLocation</param-name>
    
        <param-value>classpath:beans.xml</param-value>
    
      </context-param>  
    
      <!-- 配置springmvc核心控制器 -->
    
       <servlet>
    
            <servlet-name>spring</servlet-name>
    
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
            <load-on-startup>1</load-on-startup>
    
       </servlet>
    
        <servlet-mapping>
    
            <servlet-name>spring</servlet-name>
    
            <url-pattern>/</url-pattern>
    
        </servlet-mapping>
    
        <!-- 加个过滤器,让所有请求页面的编码方式都为utf-8 -->
    
    <filter>
    
        <filter-name>CharEncodingFilter</filter-name>
    
        <filter-class>com.sram.filter.CharEncodingFilter</filter-class>
    
        <init-param>
    
         <param-name>encoding</param-name>
    
         <param-value>UTF-8</param-value>
    
        </init-param>
    
      </filter>
    
      
    
      <filter-mapping>
    
        <filter-name>CharEncodingFilter</filter-name>
    
        <!-- /*表示所有的请求都过滤 -->
    
        <url-pattern>/*</url-pattern>
    
      </filter-mapping>
    
      
    
      <welcome-file-list>
    
        <welcome-file>index.jsp</welcome-file>
    
      </welcome-file-list>
    
    </web-app>
    

    至此,web.xml文件配置结束

    1. 在WEB-INF目录添加spring-servlet.xml(ps:web.xml中配置的servlet核心名字叫spring,它就会去找叫spring-servlet.xml的springmvc配置文件)

    配置如下:

    
    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans" 
    
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
        xmlns:p="http://www.springframework.org/schema/p" 
    
        xmlns:context="http://www.springframework.org/schema/context"
    
        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">
    
     
    
    <!-- 注解探测器 -->
    
    <context:component-scan base-package="com.sram.controller"/>
    
    <!-- 打开mvc驱动 -->
    
    <mvc:annotation-driven />
    
    
        <bean 
    
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    
        <property name="prefix" value="/WEB-INF/jsp/"/>
    
        <property name="suffix" value=".jsp"/>
    
    </bean>
    
     
    
    </beans>
    
    1. 在src目录下添加spring的配置文件,beans.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:context="http://www.springframework.org/schema/context"
    
         xmlns:aop="http://www.springframework.org/schema/aop"
    
         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/aop 
    
             http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    
             http://www.springframework.org/schema/tx 
    
             http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    
     
    
    <!-- 打开spring的Annotation -->
    
    <context:annotation-config/>
    
    
    <!-- 设置spring去哪些包中找Annotation -->
    
        <context:component-scan base-package="com.sram"/>
    
        
    
        
    
        <!-- 创建数据库连接 -->
    
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
    
        <property name="url" value="${jdbc.url}"/>
    
        <property name="username" value="${jdbc.username}"/>
    
        <property name="password" value="${jdbc.password}"/>
    
    </bean>
    
    
    <!-- 引入src目录下的jdbc.properties文件 -->
    
        <context:property-placeholder location="classpath:jdbc.properties"/>
    
        
    
    <!-- 创建spring的SqlSessionFactory -->
    
    <bean id="sqlSessionFactory" 
    
    class="org.mybatis.spring.SqlSessionFactoryBean">
    
        <property name="dataSource" ref="dataSource"/>
    
         
    
        <!-- 加载实体类映射文件 -->
    
        <property name="mapperLocations" value="classpath:com/sram/model/*.xml"></property>
    
    <!--  加载实体类对象 -->
    
    <property name="typeAliasesPackage" value="com.sram.model"></property>
    
     </bean>
    
     
    
    <!-- 配置spring的事务处理 -->
    
     <!-- 创建 事务管理器 -->
    
     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    
        <property name="dataSource" ref="dataSource"></property>
    
     </bean>
    
     <!-- 配置aop,spring是通过aop进行事务管理 -->
    
     <aop:config>
    
        <!-- 设置在哪些方法中打开事务 -->
    
        <aop:pointcut id="allMethods" 
    
                expression="execution(* com.sram.dao.*.*(..))"/>
    
        <!-- 加入事务控制的具体位置 -->
    
        <aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods"/>
    
      </aop:config>
    
    
      <!-- 配置哪些方法要加入事务控制 -->
    
      <tx:advice id="txAdvice" transaction-manager="txManager">
    
        <tx:attributes>
    
         <!-- 所有方法加入事务 -->
    
         <tx:method name="*" propagation="REQUIRED"/>
    
        </tx:attributes>
    
      </tx:advice>
    
     
    
    </beans>
    
    1. 数据源文件jdbc.properties内容如下

    jdbc.driverClassName=com.mysql.jdbc.Driver

    jdbc.url=jdbc:mysql://localhost:3306/mybatis

    jdbc.username=root

    jdbc.password=root

    1. 日志文件log4j.properties
    
    log4j.rootLogger=INFO, stdout  
    
    #log4j.logger.test=info  
    
    #log4j.logger.org.apache.jasper = DEBUG  
    
    #log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG  
    
    #log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG  
    
    #log4j.logger.com.fiscal = DEBUG  
    
    #log4j.logger.com.system = DEBUG  
    
    log4j.logger.com.ibatis = DEBUG  
    
    log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG  
    
    log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG  
    
    log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG  
    
    log4j.logger.java.sql.Connection = DEBUG  
    
    log4j.logger.java.sql.Statement = DEBUG  
    
    log4j.logger.java.sql.PreparedStatement = DEBUG 
    
    log4j.logger.java.sql.ResultSet = INFO  
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
    
    #log4j.appender.fileout=org.apache.log4j.RollingFileAppender  
    
    #log4j.appender.fileout.File=e:/log/ibatis.log   
    
    #log4j.appender.fileout.MaxFileSize=10000KB   
    
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout   
    
    #log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} :%m%n   
    
    #log4j.appender.fileout.layout=org.apache.log4j.PatternLayout   
    
    #log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH:mm:ss} :%m%n  
    
    #log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout   
    
    # log4j.logger.org=info 
    

    配置文件结束 jdbc.propertise和log4j.propertise放在src根目录下

    1. 下面写测试代码
    • UserController.java
    
    package com.tt.controller;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    
    
    import javax.annotation.Resource;
    
    
    
    import com.tt.dao.IUserDao;
    
    import com.tt.model.User;
    
    import org.springframework.stereotype.Controller;
    
    import org.springframework.ui.Model;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import org.springframework.web.bind.annotation.RequestMethod;
    
    
    
    @Controller("userController")
    
    @RequestMapping("user")
    
    public class UserController {
    
    
    
        private IUserDao userDao;
    
    
    
        @Resource
    
        public void setUserDao(IUserDao userDao) {
    
            this.userDao = userDao;
    
        }
    
    
    
        public UserController() {
    
    
    
        }
    
    
    
        @RequestMapping(value = "/users", method = RequestMethod.GET)
    
        public String list(Model model) {
    
            User u = userDao.loadById(1);
    
            System.out.println(u);
    
            //model.addAttribute("users", users);
    
            return "list";
    
        }
    
    }
    
    • CharEncodingFilter.java
    
    package com.tt.filter;
    
    
    
    import javax.servlet.*;
    
    import java.io.IOException;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    public class CharEncodingFilter implements Filter{
    
        private String encoding;
    
    
    
       public void destroy() {
    
    
    
       }
    
    
    
       public void doFilter(ServletRequest request, ServletResponse response,
    
             FilterChain chain) throws IOException, ServletException {
    
    
    
          request.setCharacterEncoding(encoding);
    
          //response.setCharacterEncoding(encoding);
    
          chain.doFilter(request, response);
    
       }
    
    
    
       public void init(FilterConfig config) throws ServletException {
    
    
    
          //config中保存这过滤器的配置信息,如果在web.xml中配置的过滤器编码不是utf8,则改成utf8;
    
          String e = config.getInitParameter("encoding");
    
          if(e == null || e.equals("")) {
    
             encoding = "UTF-8";
    
          }
    
          else {
    
             encoding = e;
    
          }
    
       }
    
    }
    
    • User.java
    
    package com.tt.model;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    public class User {
    
        private int id;
    
        private String name;
    
        private String password;
    
    
    
        public User() {
    
        }
    
    
    
        public User(String name, String password) {
    
            super();
    
            this.name = name;
    
            this.password = password;
    
        }
    
    
    
    
    
        public User(int id, String name, String password) {
    
            super();
    
            this.id = id;
    
            this.name = name;
    
            this.password = password;
    
        }
    
    
    
        public String getName() {
    
            return name;
    
        }
    
    
    
        public void setName(String name) {
    
            this.name = name;
    
        }
    
    
    
        public String getPassword() {
    
            return password;
    
        }
    
    
    
        public void setPassword(String password) {
    
            this.password = password;
    
        }
    
    
    
        public int getId() {
    
            return id;
    
        }
    
    
    
        public void setId(int id) {
    
            this.id = id;
    
        }
    
    
    
        @Override
    
        public String toString() {
    
            return "User [id=" + id + ", name=" + name + ", password="
    
                    + password + "]";
    
        }
    
    }
    
    • User.xml
    
    <?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="com.tt.model.User">
    
    
    
       <select id="load" parameterType="int" resultType="com.tt.model.User">
    
          select * from t_user where id = #{id}
    
       </select>
    
    
    
    </mapper>
    
    • UserException.java
    
    package com.tt.model;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    public class UserException extends RuntimeException {
    
        public UserException() {
    
            super();
    
    
    
        }
    
    
    
        public UserException(String message, Throwable cause,
    
                             boolean enableSuppression, boolean writableStackTrace) {
    
            super(message, cause, enableSuppression, writableStackTrace);
    
    
    
        }
    
    
    
        public UserException(String message, Throwable cause) {
    
            super(message, cause);
    
    
    
        }
    
    
    
        public UserException(String message) {
    
            super(message);
    
    
    
        }
    
    
    
        public UserException(Throwable cause) {
    
            super(cause);
    
    
    
        }
    
    }
    
    • IUserDao.java
    
    package com.tt.dao;
    
    
    
    import com.tt.model.User;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    public interface IUserDao {
    
        void add(User user);
    
    
    
        void delete(int id);
    
    
    
        void update(User user);
    
    
    
        User loadById(int id);
    
    
    
        User loadByName(String username);
    
    
    
        User login(String username, String password);
    
    }
    
    • UserDao.java
    
    package com.tt.dao;
    
    
    
    import com.tt.model.User;
    
    import com.tt.model.UserException;
    
    import org.apache.ibatis.session.SqlSession;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    
    import org.springframework.stereotype.Repository;
    
    
    
    import javax.annotation.Resource;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    
    
    @Repository("userDao")
    
    public class UserDao implements IUserDao{
    
        private SqlSessionFactory sqlSessionFactory = null;
    
    
    
       @Resource
    
       public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
    
          this.sqlSessionFactory = sqlSessionFactory;
    
       }
    
    
    
       public void add(User user) {
    
    
    
       }
    
    
    
       public void delete(int id) {
    
    
    
       }
    
    
    
       public void update(User user) {
    
    
    
       }
    
    
    
       @Override
    
       public User loadById(int id) {
    
          SqlSession sqlSession = null;
    
          User u = null;
    
          try{
    
             sqlSession = sqlSessionFactory.openSession();
    
             u = sqlSession.selectOne("com.tt.model.User.load", id);
    
          }finally{
    
             assert sqlSession != null;
    
             sqlSession.close();
    
          }
    
          return u;
    
       }
    
    
    
       public User loadByName(String username) {
    
    
    
          return null;
    
       }
    
    
    
       public User login(String username, String password) {
    
          User u = this.loadByName(username);
    
          if(u == null){
    
             throw new UserException("用户不存在");
    
          }else if(!password.trim().equals(u.getPassword())){
    
             throw new UserException("密码不对!!");
    
          }
    
          return u;
    
       }
    
    }
    
    • IUserService.java
    
    package com.tt.service;
    
    
    
    import com.tt.model.User;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    public interface IUserService {
    
    
    
        User loadById(int id);
    
    }
    
    + UserService.java
    
    
    
    package com.tt.service;
    
    
    
    import com.tt.dao.IUserDao;
    
    import com.tt.model.User;
    
    import org.springframework.stereotype.Service;
    
    
    
    import javax.annotation.Resource;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    @Service("userService")
    
    public class UserService implements IUserService{
    
    
    
    
    
        private IUserDao userDao;
    
    
    
        @Resource
    
        public void setUserDao(IUserDao userDao) {
    
            this.userDao = userDao;
    
        }
    
    
    
        @Override
    
        public User loadById(int id) {
    
            return userDao.loadById(1);
    
        }
    
    }
    
    • UserServiceTest.java
    
    package com.tt.service;
    
    
    
    import org.junit.Test;
    
    import org.junit.runner.RunWith;
    
    import org.springframework.test.context.ContextConfiguration;
    
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    
    
    import javax.annotation.Resource;
    
    
    
    /**
    
     * Created by lx7ly on 9/17/16.
    
     */
    
    @RunWith(SpringJUnit4ClassRunner.class)       //表示继承了SpringJUnit4ClassRunner类
    
    @ContextConfiguration(locations = {"classpath:spring.xml"})
    
    public class UserServiceTest {
    
    
    
        private IUserService userService;
    
    
    
        @Test
    
        public void testSetUserDao() throws Exception {
    
    
    
        }
    
    
    
        @Test
    
        public void testLoadById() throws Exception {
    
            System.out.println(userService.loadById(1));
    
        }
    
    
    
        @Resource
    
        public void setUserService(IUserService userService) {
    
            this.userService = userService;
    
        }
    
    
    
    }
    
    • list.jsp
    
    <%--
    
      Created by IntelliJ IDEA.
    
      User: lx7ly
    
      Date: 9/17/16
    
      Time: 5:34 PM
    
      To change this template use File | Settings | File Templates.
    
    --%>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <html>
    
      <head>
    
        <title>list.jsp</title>
    
      </head>
    
      <body>
    
        helloworld !! this is list.jsp
    
      </body>
    
    </html>
    
    • ssm.sql
    
    create database ssm;
    
    
    
    use ssm;
    
    
    
    create table t_user (id int primary key auto_increment, name varchar(20), password varchar(20));
    
    
    
    insert into t_user(name, password) values ('root', 'root');
    
    insert into t_user(name, password) values ('zhangsan', '123');
    
    insert into t_user(name, password) values ('李四', '123');
  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/caolei1108/p/6433228.html
Copyright © 2011-2022 走看看