Springmvc+mybatis的整合过程

由于觉得hibernate用起来不如mybatis学起来简单方便,而且我觉得自己写sql也是很开心的哈,所以这几周看了看Springmvc+mybatis的整合。

怎么说呢,网上的大侠们很多,方法大多数都可以,但是有些比较乱,所以自己写了个也可以当个日记了哈。

1.首先是工程目录:


2.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">
	
	
    <!-- 设置Spring容器加载配置文件路径 (主要配置都在这里面) -->  
	<context-param>
	    <param-name>contextConfigLocation</param-name>
	    <param-value>classpath*:config/applicationContext.xml</param-value>
  	</context-param>
  	
  	<!-- 加载spring容器配置 -->  
  	<listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  	</listener>
  	<listener>
    	<listener-class>
            org.springframework.web.context.ContextCleanupListener
        </listener-class>
  	</listener>
  
  	<!-- 配置Spring核心控制器 -->  
	<servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!-- <servlet-mapping>  
        <servlet-name>dispatcherServlet</servlet-name>  
        <url-pattern>*.do</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>dispatcherServlet</servlet-name>  
        <url-pattern>*.action</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>  
	</filter>  
	<filter-mapping>  
	    <filter-name>CharacterEncodingFilter</filter-name>  
	    <url-pattern>/*</url-pattern>  
	</filter-mapping>  

    <!-- web链接跳转页 -->  
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<error-page>
	    <error-code>404</error-code>
	    <location>/404.jsp</location>
  	</error-page>
</web-app>

web.xml中拦截了所有的url所以springmvc-servlet.xml中要进行静态资源的配置,当然如果你拦截的是*.do一类的话就没有问题了

3.applicationContext.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:tx="http://www.springframework.org/schema/tx"    
    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    
            http://www.springframework.org/schema/util 
            http://www.springframework.org/schema/util/spring-util-3.0.xsd" default-autowire="byName">
       
    <!-- dataSource 配置  -->       
 	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/数据库名?characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <!-- 最大连接数据库连接数 --> 
        <property name="maxActive" value="10"/>
        <!-- 最大等待连接中的数量   0标识没有限制 -->  
        <property name="maxIdle" value="10"/>
        <property name="initialSize" value="1" />  
        <property name="minIdle" value="1" />  
        <!-- 最大等待毫秒数  超时报错 -->  
        <property name="maxWait" value="100000" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  
        <property name="timeBetweenEvictionRunsMillis" value="60000" />    
    </bean>
    
    <!-- 对dataSource 数据源进行事务管理 -->  
  	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      	<property name="dataSource" ref="dataSource" />
  	</bean>
    
    <!-- mybatis文件配置,扫描所有mapper文件 -->  
  	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     	<!--dataSource属性指定要用到的连接池--> 
     	<property name="dataSource" ref="dataSource"/> 
     	<!--configLocation属性指定mybatis的核心配置文件--> 
     	<property name="configLocation" value="classpath:config/configuration.xml" /> 
     	<!-- 所有配置的mapper文件  注意:配置了这个选项的话configuration.xml中的mapper就不能在配置mappers 否则会因为接口相同产生冲突-->
     	<property name="mapperLocations" value="classpath*:com/mybatis/mapper/*.xml" />
  	</bean> 
  
 	<!-- spring与mybatis整合配置,扫描所有dao-->  
  	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     	<property name="basePackage" value="com.wy.dao" />
  	</bean> 
  
</beans>

事务管理还没有搞,因为没学习,等我学好后会更新哈

4.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:p="http://www.springframework.org/schema/p"
	xmlns:mvc="http://www.springframework.org/schema/mvc" 
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util"
	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    
            http://www.springframework.org/schema/util 
            http://www.springframework.org/schema/util/spring-util-3.0.xsd">

    <!-- 对com.wy包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
	<context:component-scan base-package="com.wy">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Component" />
	</context:component-scan>
	
	<!-- 支持spring3.0新的mvc注解 -->
	<mvc:annotation-driven />
	
	<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="cacheSeconds" value="0" />
		<property name="messageConverters">
			<list>
				<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
			</list>
		</property>
	</bean>
	
	<!-- 对静态资源文件的访问  否则web.xml中的拦截设置会拦截静态文件 -->
	<mvc:resources mapping="/css/**" location="/css/" />  
	<mvc:resources mapping="/js/**" location="/js/" />  
	<mvc:resources mapping="/img/**" location="/img/" />  
	
	<!-- 拦截器配置 根据路径 推荐~ -->  
   	<!-- <mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/action" />
			<mvc:mapping path="/action/*" />
			<bean class="com.helper.MyInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors> -->
	<!-- 拦截所有springmvc的url!
	<mvc:interceptors>  
		<bean class="com.helper.MyInterceptor"></bean> 
 	</mvc:interceptors> -->
 
    <!--对模型视图名称的解析,即在模型视图名称添加前后缀 -->
    <!-- jsp页面解析器,当Controller返回XXX字符串时,先通过拦截器,然后该类就会在/WEB-INF/views/目录下,查找XXX.jsp文件-->  
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/views/"></property>  
        <property name="suffix" value=".jsp"></property>  
        <!--应用JSTL -->
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    </bean>  
</beans>

拦截器写了俩种方法,一种全部拦截,另一种是更具url拦截,这里不是重点就没有写了

5.mybatis的configuration.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>  
        <typeAlias alias="Disease" type="com.wy.model.Disease" />
    </typeAliases> 
    <!-- <mappers>  
        <mapper resource="com/mybatis/mapper/tcm.xml" />  
    </mappers>   -->
</configuration>
这里因为在applicationContext中配置了mapper接口所以不用在写,否则报错
6 tcm.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.mybatis.inter.Inter"> -->
<mapper namespace="com.wy.dao.Mydao">    
    <select id="countDiseaseList" parameterType="Disease"  resultType="int">
        SELECT COUNT(*) FROM disease_sf 
        WHERE WestDiseaseName LIKE CONCAT('%',#{disease.WestDiseaseName},'%') 
        AND TcmDiseaseName LIKE CONCAT('%',#{disease.TcmDiseaseName},'%') 
        AND Category LIKE CONCAT('%',#{disease.Category},'%')
	</select>    
</mapper>  	
mybatis的接口要和dao中的一致就可以了

7.MainController

package com.wy.controller;

import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.wy.model.Disease;
import com.wy.service.Myservice;

/**
 * Controller控制层
 * @author Maxldwy
 *
 */
@Controller
@RequestMapping("/action")
//@RequestMapping("/action.do")
public class MainController {

	@Autowired
    Myservice myservice;
	
	@RequestMapping(params="method=diseasepage")
	public ModelAndView toDisease(){
		System.out.println("跳转疾病查询页面");
		ModelAndView mav = new ModelAndView("DiseasePage/Disease");
		return mav;
	}	
}
这里拦截的url是action?method=diseasepage

也可以写成拦截action/selectdisease的方法

@RequestMapping("/selectdisease") 
    public ModelAndView selectdisease(@ModelAttribute("disease") Disease disease,HttpSession httpSession){  

		ModelAndView mav = new ModelAndView();
        mav.setViewName("DiseasePage/Disease");
		return mav;
    } 
8. service层

package com.wy.service;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.ModelAttribute;
import com.wy.dao.Mydao;
import com.wy.dao.Testdao;
import com.wy.model.Disease;

/**
 * Service业务逻辑层
 * @author Maxldwy
 *
 */
@Service
public class Myservice {
	
	int pageItems = 15;//每页查询条数
	
	@Autowired
	private Mydao mydao;
	
//	@Autowired
//	private Testdao testdao;测试多个dao和对应的mapper xml文件 可行

	public int countDiseaseList(Disease disease) {
		int total = mydao.countDiseaseList(disease);//索引数据条数
		return total;
	}
	
}
9.dao层

package com.wy.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.wy.model.Disease;

/**
 * Dao操作数据库层
 * @author Maxldwy
 *
 */
@Repository
public interface Mydao {

	//查询符合条件的List条数
	public int countDiseaseList(@Param("disease")Disease disease);
	
}

注意方法和tcm.xml sql语句中的id一样就可以了

10.model模板上别忘了写@Entity就可以了

做到这里springmvc+mybatis就基本搭建完毕了,我注释写的也很全,大家应该看得懂哈

还有不知道service的业务逻辑层 和 dao数据库操作层 写的正规不正规,不好的请指点小弟哈~





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值