spring4.3-mybatis3.4框架整合详细配置

写在前面的话:

现在是北京时间2016年11月2日凌晨1点10分18秒,我在这里写下这篇博客,希望能帮到有需要的朋友,由于个人水平有限,有不正确的地方还请各位多多指教,不甚感激!


前期工作准备

1、软件准备

JDK:1.7

IDE:Eclipse mars

Spring:4.3.0

Spring Mvc:4.3.0

MyBatis:3.4.0

数据库:mysql-5.6.24

2、硬件准备:

本尊(全球限量一个,产地:贵州凯里,当前版本:23.0,型号:男),华硕笔记本一台,好视力台灯一台,椅子一张。


正式开始配置

本来想一边讲解配置过程,一边创建目录,但是这样感觉不是很清晰,所以我干脆先把工程结构贴出来,方便大家对整个项目的结构有个大概了解,小小的运用了先全局后部分的哲学思想,哈哈。看,这就是我们要完成的工程图

看着好复杂的样子,不过不要害怕,作为一名合格的程序员就应该有跟bug革命到底的精神,下面我们来开始配置项目。


1.配置数据库

右键项目新建一个config源文件夹,用来存放我们的各种配置文件。然后在config下新建文件jdbc.properties,这个文件用来配置数据库信息,内容如下:

#MySql 数据库驱动
jdbc.driver=com.mysql.jdbc.Driver
#jdbc:mysql://连接地址:端口号(默认3306)/数据库名
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring
#用户名
jdbc.username=root
#密码
jdbc.password=123456
#连接池初始化连接
jdbc.initialSize=0
#连接池最大连接数
jdbc.maxActive=20
#连接池最大空闲连接
jdbc.maxIdle=20
#连接池最小空闲连接
jdbc.minIdle=1
#等待超时
jdbc.maxWait=60000</span>

代码都有注释,不再累述。

2.配置日志log4j

在项目下新建文件夹logs,日志文件将往这里面写;同样在config下新建文件log4j.properties,里面是关于日志的一些配置,内容如下:

#定义LOG输出级别
log4j.rootLogger=INFO,Console,File
#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n

#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出目录
log4j.appender.File.File = logs/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
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</span>

3.spring与mybatis的结合(主角登场,鼓掌)

在config目录下新建一个xml文件,命名为spring-mybatis.xml,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
    xmlns:cache="http://www.springframework.org/schema/cache"  
    xsi:schemaLocation="  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context.xsd  
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://www.springframework.org/schema/tx  
    http://www.springframework.org/schema/tx/spring-tx.xsd  
    http://www.springframework.org/schema/jdbc  
    http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd  
    http://www.springframework.org/schema/aop  
    http://www.springframework.org/schema/aop/spring-aop.xsd
   	http://www.springframework.org/schema/mvc  
	http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 
    
	<!-- 自动扫描 -->
	<context:component-scan base-package="com.pyx" />
	<!-- 引入配置文件 -->
	<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="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<!-- 初始化连接大小 -->
		<property name="initialSize" value="${jdbc.initialSize}"></property>
		<!-- 连接池最大数量 -->
		<property name="maxActive" value="${jdbc.maxActive}"></property>
		<!-- 连接池最大空闲 -->
		<property name="maxIdle" value="${jdbc.maxIdle}"></property>
		<!-- 连接池最小空闲 -->
		<property name="minIdle" value="${jdbc.minIdle}"></property>
		<!-- 获取连接最大等待时间 -->
		<property name="maxWait" value="${jdbc.maxWait}"></property>
	</bean>

	<!-- 配置spring与mybatis结合 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 自动扫描mapping.xml文件 -->
		<property name="mapperLocations" value="classpath:com/pyx/mapper/*.xml"></property>
	</bean>

	<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.pyx.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>
	<!-- 这个必须配置,否则事物不起作用 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

为了测试,只配置了最基本的功能,你可以根据自己的项目需求进行配置。

4.测试spring与mybatis的整合

在src源文件夹下新建以下包


看文件名应该能猜出个大概,这些包类有哪些功能,你应该明白,如果不明白,建议你还是再学学框架吧。

在数据库新建一张user表用于测试,我的表结构如下:

表建好后根据你的表字段就可以编写dao,mapper和Pojo了,这里介绍一个自动生成mybatis mapper的jar,参考下面的博文:

SSM框架——使用MyBatis Generator自动创建代码

新手不建议使用,还是自己手写比较好,把生成的文件复制到项目中,然后开始编写测试代码。新建test源文件夹,编写一个测试类。


package com.pyx.test;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.pyx.pojo.User;
import com.pyx.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)		
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})

public class TestMyBatis {

	@Resource
	private UserService userService = null;


	@Test
	public void mytest() {
		User user = userService.getUserById(1);
		 System.out.println("查询结果:"+user.getUsername());
	}
}

这里有几点要注意:

1,因为用了JUnit4插件测试,所以务必确认你的项目中已经加入JUnit4类库,否则会报找不到mytest方法的错误。

2,    <!-- spring和MyBatis的整合配置 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:com/pyx/mapper/*.xml"></property>
    </bean>

这里的mapperLocations一定要写对,我就是因为mapper后面少了一个“/”,所以一直在报找补到mapper方法的错误,还有如果你是用自动生成工具生成的代码,那请你一定要留意mapper文件中的包名是否正确,其他两个pojo和dao如果包名不对会立即显示错误的,但是mapper就不会,所以如果tomcat启动异常,一定要查看这个文件。

接下来开始测试,选择mytest方法右键调试方式->JUnit4测试,如果控制台输出如下结果,表示spring与mybatis已经整合成功,如果报错,根据bug信息慢慢调试吧。

5.整合spring mvc

config下新建spring-mvc.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: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-3.1.xsd  
	http://www.springframework.org/schema/context  
	http://www.springframework.org/schema/context/spring-context-3.1.xsd  
	http://www.springframework.org/schema/mvc  
	http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
	<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
	<context:component-scan base-package="com.pyx.controller" />
	<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	</bean>
	<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
	<!-- 配置返回Json数据 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
		<property name="messageConverters">
			<list>
				<ref bean="mappingJacksonHttpMessageConverter"/>
			</list>
		</property>
	</bean>
	<bean id="mappingJacksonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
			</list>
		</property>
	</bean>
	<!-- 特别重要,不配置该项,使用ajax请求时会报406错误 -->
	<mvc:annotation-driven></mvc:annotation-driven>
	
	
</beans>

配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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_3_0.xsd"
	version="3.0">
	<display-name>Spring Mybatis</display-name>
	<!-- 加载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 MVC servlet -->
	<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:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<async-supported>true</async-supported>
	</servlet>
	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- 配置过滤静态文件,如js,css,image等,方法不止这一种,自己百度有很多其他更好的方法 -->
	<servlet-mapping>
	    <servlet-name>default</servlet-name>
	    <url-pattern>/static/*</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>/index.jsp</welcome-file>
	</welcome-file-list>
	
</web-app>

在controller包下建一个控制器,就叫UserController吧,内容如下
package com.pyx.controller;

import java.util.Date;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.pyx.pojo.User;
import com.pyx.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {

	@Resource
	private UserService userService;
	
	
	//查询用户
	@RequestMapping("/list")
	public String list(HttpServletRequest request,Model model){
		int userId = Integer.parseInt(request.getParameter("id"));
		User user = this.userService.getUserById(userId);
		model.addAttribute("user", user);
		return "user";
	}
	
	//更新用户
	@RequestMapping("/update")
	public String update(HttpServletRequest request,Model model){
		int userId = Integer.parseInt(request.getParameter("id"));
		User user = new User();
		user.setSid(userId);
		user.setUsername("隔壁老王");
		user.setPassword("258258");
		int status = this.userService.updateUserById(user);
		model.addAttribute("msg", status);
		return "ok";
	}
	
	//添加用户
	@RequestMapping("/add")
	public String addUser(HttpServletRequest request,Model model) {
		User user = new User();
		//SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-mm-dd");
		Date birth=null;
		user.setUsername("panyx");
		user.setPassword("258258");
		user.setBirth(birth);
		user.setEmail("ape010@163.com");
		user.setSex("女");
		int status = this.userService.insertUser(user);
		model.addAttribute("msg", status);
		return "add-ok";
		
	}
	
	//ajax测试页面
	@RequestMapping("/test")
	public String mytest(Model model){
		return "test";
	}
	
	//测试ajax请求,返回json数据
	@RequestMapping(value="jsontest", method=RequestMethod.POST)
	@ResponseBody
	public User jsonTest(Model model){
		User user = this.userService.getUserById(1);
		return user;
	}
}
/WEB-INF/jsp,新建一个user.jsp测试页面
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>测试</title>
</head>
<body>
	${user.username}
</body>
</html>


6.测试spring mvc

启动tomcat,浏览器输入http://localhost:8080/你的项目名/user/list?id=1

如果能出现上图的效果就说明我们的框架整合完美结束了,但在实际开发中,肯定会用到ajax,那我们就再配置一下ajax吧,其实在spring-mvc.xml中我们已经做了返回json数据的配置,只要把jackson.jar包引进去就可以了。我们再写一个测试页面,用来测试ajax,test.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ajax测试</title>
<script src="${pageContext.request.contextPath}/static/js/jquery.min.js"></script>
</head>
<body>
	 <p>
	<button id="testbtn" class="" >找老王</button>
 </p>
 <script>
	$(function(){
		$("#testbtn").bind("click",function(){
			$.ajax({
				url:"http://localhost:8080/myspring/user/jsontest",
				type:"post",
				async:true,
				data:{},
				dataType:"json",
				success:function(data){
					console.log(data);
				}
				
			})
		});
	})
 </script>
</body>
</html>

方法在UserController中都已经写好了,在浏览器中输入:http://localhost:8080/myspring/user/test,



到此,spring,spring-mvc,mybatis完美的融合在了一起!



特别感谢:

参考了博主shu_lin的文章,SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

SSM框架——使用MyBatis Generator自动创建代码


工程所需jar包下载:spring-4.3.0和mybatis-3.4整合所需jar包

提取码:vsk7


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值