Spring MVC+整合Batis 经过测试版

曾经使用过Spring和Spring mvc 但是之后多使用框架开发,渐渐淡忘。为拾起来特写此博文,其中参考了很多文章和例子,也报了很多错误幸亏有互联网让我们能够找到适合自己的答案。(PS:网上很多发布的都没有经过测试,导致各种问题),不多说来来来我们坐下谈谈Spring mvc

        首先我使用的是使用Maven创建的web项目,具体做法“右键--选中Maven Project” 然后创建工程。详情不懂的请参考我的另一篇文章使用Maven创建web项目

创建成功共我们的目录结构总体是这样的


1.第一步 pom.xml

  既然要使用Spring 和 Spring mvc 必须引用相关的JAR文件 (ps:最下面的build几点可以忽略我之所以贴上是保证完整性)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.flower.dujiaohao</groupId>
  <artifactId>dujiaohao</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>dujiaohao</name>
  <dependencies>
  	<!-- spring mvc 相关配置 -->
  	<dependency>
        <groupId>org.springframework</groupId>  
        <artifactId>spring-tx</artifactId>  
        <version>4.3.3.RELEASE</version>  
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>  
        <artifactId>spring-oxm</artifactId>  
        <version>4.3.3.RELEASE</version>  
    </dependency>
  	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aop</artifactId>
	    <version>4.3.3.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>4.3.3.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	    <version>4.3.3.RELEASE</version>
	</dependency>
	<dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-context-support</artifactId>  
        <version>4.3.3.RELEASE</version>  
    </dependency> 
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-expression</artifactId>
	    <version>4.3.3.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-web</artifactId>
	    <version>4.3.3.RELEASE</version>
	</dependency>
	<dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-jdbc</artifactId>  
        <version>4.3.3.RELEASE</version>  
    </dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <version>4.3.3.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>4.3.3.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>commons-logging</groupId>
	    <artifactId>commons-logging</artifactId>
	    <version>1.2</version>
	</dependency>
	
	<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <scope>provided</scope>
        <version>3.0.1</version>
    </dependency>
    <!-- mybatis配置 --> 
	<dependency>  
        <groupId>org.mybatis</groupId>  
        <artifactId>mybatis</artifactId>  
        <version>3.2.6</version>  
    </dependency>  
    <dependency>  
        <groupId>org.mybatis</groupId>  
        <artifactId>mybatis-spring</artifactId>  
        <version>1.2.2</version>  
    </dependency>  
	<dependency>
	    <groupId>javax.annotation</groupId>
	    <artifactId>javax.annotation-api</artifactId>
	    <version>1.2</version>
	</dependency>
	<!-- 导入Mysql数据库链接jar包 -->  
    <dependency>  
        <groupId>mysql</groupId>  
        <artifactId>mysql-connector-java</artifactId>  
        <version>5.1.30</version>  
    </dependency>  
    <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->  
    <dependency>  
        <groupId>commons-dbcp</groupId>  
        <artifactId>commons-dbcp</artifactId>  
        <version>1.2.2</version>  
    </dependency> 
    <dependency>  
        <groupId>log4j</groupId>  
        <artifactId>log4j</artifactId>  
        <version>1.2.17</version>  
    </dependency> 
    <!-- 映入JSON -->  
    <dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-core</artifactId>  
        <version>2.1.0</version>  
    </dependency>  
    <dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-databind</artifactId>  
        <version>2.1.0</version>  
    </dependency>  
    <dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-annotations</artifactId>  
        <version>2.1.0</version>  
    </dependency>  
	
	
  </dependencies>
  
  
  
  <build>
  	<plugins>
  		<!-- 加上这个配置就会规避 pom.xml的war处出现failOnMissingWebXml的错误,且web工程不必使用web.xml -->
  		<plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-war-plugin</artifactId>
             <version>2.1.1</version>
             <configuration>
             	<!-- 这段配置为指定项目中web.xml的位置,但我使用了failOnMissingWebXml配置故注释掉此段
                 <warSourceDirectory>  
                     ${basedir}/src/main/webapp  
                 </warSourceDirectory>  
                 <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>  -->
             
                 <failOnMissingWebXml>false</failOnMissingWebXml>
             </configuration>
        </plugin>
  	</plugins>
  </build>
</project>

2.第二步 配置web.xml。现在有两种配置方法第一种为使用配置文件,另一种使用0配置方式,也就是把配置文件写到代码中进行管理。我们这次就是用最广泛使用的第一种方式进行配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance  http://www.springmodules.org/schema/cache/springmodules-cache.xsd http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     id="WebApp_ID" version="2.5">
     
     <!-- Spring和mybatis的配置文件 -->  
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath:spring-mybatis.xml</param-value>  
    </context-param>  
     <!--  编码过滤器  --> 
    <filter>  
        <filter-name>encodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <async-supported>true</async-supported>
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>encodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    <!--Spring监听器  --> 
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
    <!--防止Spring内存溢出监听器  -->
    <listener>  
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
    </listener>  
     
     
     
     <!-- 配置DispatchcerServlet -->
     <servlet>
         <servlet-name>springDispatcherServlet</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <!-- 配置Spring mvc下的配置文件的位置和名称 -->
         <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath:springconf/springmvc-servlet.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>
     
     <servlet-mapping>
         <servlet-name>springDispatcherServlet</servlet-name>
         <url-pattern>/</url-pattern>
     </servlet-mapping>
     
     
     <servlet-mapping>
     	<servlet-name>default</servlet-name>
     	<url-pattern>*.css</url-pattern>
	 </servlet-mapping>
	 <servlet-mapping>
	      <servlet-name>default</servlet-name>
	      <url-pattern>*.gif</url-pattern>
	 </servlet-mapping>
	 <servlet-mapping>
	    <servlet-name>default</servlet-name>
	     <url-pattern>*.jpg</url-pattern>
	 </servlet-mapping>
	 <servlet-mapping>
	     <servlet-name>default</servlet-name>
	     <url-pattern>*.js</url-pattern>
	 </servlet-mapping>
	 <servlet-mapping>
	      <servlet-name>default</servlet-name>
	      <url-pattern>*.html</url-pattern>
	 </servlet-mapping>
	 <welcome-file-list>
	 	<welcome-file>/views/index.html</welcome-file>
	 </welcome-file-list>
</web-app>

配置的Servlet-mapping可以使我们访问.html文件不必非是.jsp

第三步  配置springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
        
        
        <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.flower.dujiaohao.controllers"></context:component-scan>
        
	    <!-- 默认的注解映射的支持 -->
    	<mvc:annotation-driven />
	    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
			  <property name="messageConverters">
			   <list >
			    <ref bean="mappingJacksonHttpMessageConverter" />
			   </list>
			  </property>
		</bean>
		<!--避免IE执行AJAX时,返回JSON出现下载文件 -->  
		<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
			  <property name="supportedMediaTypes">
			   <list>
			    <value>text/html;charset=UTF-8</value>
			   </list>
			  </property>
		</bean> 
	    
	    
	    
	    
	    
	    
        
        <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name = "prefix" value="/views/"></property>
            <property name = "suffix" value = ".html"></property>
        </bean>
</beans>

第四步 配置MyBatis和Spring结合的配置文件

<?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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
        
        
        <!-- 自动扫描 -->  
		<context:component-scan base-package="com.flower.dujiaohao" /> 
		<!-- 引入配置文件 -->  
		<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
		    <property name="location" value="classpath:jdbc.properties" />  
		</bean>  
		
		<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
		    <property name="driverClassName" value="${driver}" />  
		    <property name="url" value="${url}" />  
		    <property name="username" value="${username}" />  
		    <property name="password" value="${password}" />  
		    <!-- 初始化连接大小 -->  
		    <property name="initialSize" value="${initialSize}"></property>  
		    <!-- 连接池最大数量 -->  
		    <property name="maxActive" value="${maxActive}"></property>  
		    <!-- 连接池最大空闲 -->  
		    <property name="maxIdle" value="${maxIdle}"></property>  
		    <!-- 连接池最小空闲 -->  
		    <property name="minIdle" value="${minIdle}"></property>  
		    <!-- 获取连接最大等待时间 -->  
		    <property name="maxWait" value="${maxWait}"></property>  
		</bean>  
		
		<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->  
		<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
		    <property name="dataSource" ref="dataSource" />  
		    <!-- 自动扫描mapping.xml文件 -->  
		    <property name="mapperLocations" value="classpath:com/flower/dujiaohao/mapping/*.xml"></property>  
		</bean>  
		
		<!-- DAO接口所在包名,Spring会自动查找其下的类 -->  
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
		    <property name="basePackage" value="com.flower.dujiaohao.dao" />  
		    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
		</bean>  
		
		<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->  
		<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
		    <property name="dataSource" ref="dataSource" />  
		</bean>  
</beans>

第五步 配置我们的log4j和jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://1.1.1.1:3306/test
username=123
password=456
#\u5B9A\u4E49\u521D\u59CB\u8FDE\u63A5\u6570  
initialSize=0  
#\u5B9A\u4E49\u6700\u5927\u8FDE\u63A5\u6570  
maxActive=20  
#\u5B9A\u4E49\u6700\u5927\u7A7A\u95F2  
maxIdle=20  
#\u5B9A\u4E49\u6700\u5C0F\u7A7A\u95F2  
minIdle=1  
#\u5B9A\u4E49\u6700\u957F\u7B49\u5F85\u65F6\u95F4  
maxWait=60000  

log4j.rootLogger=INFO,Console,File
#\u5B9A\u4E49\u65E5\u5FD7\u8F93\u51FA\u76EE\u7684\u5730\u4E3A\u63A7\u5236\u53F0  
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#\u53EF\u4EE5\u7075\u6D3B\u5730\u6307\u5B9A\u65E5\u5FD7\u8F93\u51FA\u683C\u5F0F\uFF0C\u4E0B\u9762\u4E00\u884C\u662F\u6307\u5B9A\u5177\u4F53\u7684\u683C\u5F0F  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
  
#\u6587\u4EF6\u5927\u5C0F\u5230\u8FBE\u6307\u5B9A\u5C3A\u5BF8\u7684\u65F6\u5019\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6  
log4j.appender.File = org.apache.log4j.RollingFileAppender
#\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55  
log4j.appender.File.File = D:/logs/ssm.log
#\u5B9A\u4E49\u6587\u4EF6\u6700\u5927\u5927\u5C0F  
log4j.appender.File.MaxFileSize = 10MB
# \u8F93\u51FA\u6240\u4EE5\u65E5\u5FD7\uFF0C\u5982\u679C\u6362\u6210DEBUG\u8868\u793A\u8F93\u51FADEBUG\u4EE5\u4E0A\u7EA7\u522B\u65E5\u5FD7  
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

这两个配置文件可以自行配置,我这里也是寻找的看着顺眼的代码。

以上配置基本完成,那么我们就该看下我们的java代码如何进行了

HelloWord.java

@Controller
public class HellowWord {
	@Resource
	private IConsultService consultService; 
	
	@RequestMapping("/helloword")
	public String hello(HttpServletRequest request,Model model){
		System.out.println("aaa");
		String id = request.getParameter("id");
		String username = consultService.getUsername(Long.valueOf(id));
		System.out.println(username+"+++++++++");
		model.addAttribute("username", username);
		return "success";
	}
}

ConsultDao.java

public interface ConsultDao {
    int deleteByPrimaryKey(Long consultid);

    int insert(Consult record);

    int insertSelective(Consult record);

    Consult selectByPrimaryKey(Long consultid);

    int updateByPrimaryKeySelective(Consult record);

    int updateByPrimaryKey(Consult record);
}

ConsultMapper.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.flower.dujiaohao.dao.ConsultDao" >
  <resultMap id="BaseResultMap" type="com.flower.dujiaohao.pojo.Consult" >
    <id column="consultId" property="consultid" jdbcType="BIGINT" />
    <result column="empid" property="empid" jdbcType="BIGINT" />
    <result column="payid" property="payid" jdbcType="BIGINT" />
    <result column="finish_time" property="finishTime" jdbcType="BIGINT" />
    <result column="addtime" property="addtime" jdbcType="BIGINT" />
    <result column="status" property="status" jdbcType="TINYINT" />
    <result column="userid" property="userid" jdbcType="BIGINT" />
    <result column="username" property="username" jdbcType="VARCHAR" />
    <result column="userphone" property="userphone" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    consultId, empid, payid, finish_time, addtime, status, userid, username, userphone
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
    select 
    <include refid="Base_Column_List" />
    from t_lvz_consult
    where consultId = #{consultid,jdbcType=BIGINT}
  </select>
</mapper>


IConsultService.java

public interface IConsultService {
	public String getUsername(Long consultId);
}


ConsultServiceImpl.java

@Service("consultService")
public class ConsultServiceImpl implements IConsultService{
	@Resource
	private ConsultDao dao;
	
	public String getUsername(Long consultId) {
		return dao.selectByPrimaryKey(consultId).getUsername();
	}

}

pojo包不贴了 就是字段和set和get方法没有别的

至此我们访问http://localhost:8088/dujiaohao/helloword?id=38390667235841

好了一个简单mvc+mybatis搭建完成

其中遇到的问题:1.我们在导入mybatis包时pom.xml配置写错 一直抱:

A child container failed during start这个错误  从新配置pom.xml解决

2.

运行报错 No adapter for handler

这个错误也是参考例子中com.fasterxml.jackson.core这个pom引用时没有引用全 ,最后加上一段:
<dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-core</artifactId>  
        <version>2.1.0</version>  
    </dependency>  
    <dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-databind</artifactId>  
        <version>2.1.0</version>  
    </dependency>  
    <dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-annotations</artifactId>  
        <version>2.1.0</version>  
    </dependency>

解决。不过这个错误还有很多原因造成这里就不一一解释

哦哦哦还有一个就是我的dao,mapping.xml和pojo都是使用mybatis的一个工具直接生成的因此mapping.xml配置文件中的<mapper namespace="com.flower.dujiaohao.dao.ConsultDao" >配置出错导致mybatis无法找到比配的方法。
好了好了就这么多。
至于那个工具参考文档中有提到这个工具,我这里就不多说了 附上地址:http://blog.csdn.net/zhshulin/article/details/23912615

参考文档:http://blog.csdn.net/gebitan505/article/details/44455235/


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值