由于觉得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数据库操作层 写的正规不正规,不好的请指点小弟哈~