Spring+SpringMVC+Mybatis+Mysql整合实例

           林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

       本文要实现Spring+SpringMVC+Mybatis+Mysql的一个整合,实现了SpringMVC控制访问的页面,将得到的页面参数传递给Spring中的Mybatis的bean类,然后查找Mysql数据的功能,并通过JSP显示出来。建议可以先看笔者另一文章Mybatis与Spring整合创建Web项目 。笔者觉得整合过程中问题比较多的还是Spring+Mybatis的整合,SpringMVC的整合还是比较简单。

Spring
        Spring 是一个开源框架, Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。 Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。 简单来说, Spring 是一个轻量级的控制反转( IoC )和面向切面( AOP )的容器框架。
SpringMVC
        Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。 Spring MVC 分离了 控制器 、模型 对象 、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
MyBatis
        MyBatis 本是 apache 的一个开源项目 iBatis , 2010 年这个项目由 apache software foundation 迁移到了 google code ,并且改名为 MyBatis 。 MyBatis 是一个基于 Java 的 持久层 框架。 iBATIS 提供的 持久层 框架包括 SQL Maps 和 Data Access Objects ( DAO ) MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。 MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs ( Plain Old Java Objects ,普通的 Java 对象)映射成数据库中的记录。

使用的版本:Mybatis-3.2.8

                        Spring3.2.9

                   SpringMVC 3.2.9

                         Mysql5.6

开发环境:    Eclipse  Java EE Kepler+Win7


本文工程免费下载

一、创建Web项目

最终整个工程目录如下:

技术分享

需要导入的包

技术分享

二、创建库表映射类并配置MyBatis

1、首先在数据库中创建一张表 t_user

use test;  
DROP TABLE IF EXISTS t_user;  
create table t_user  
(  
 userId  int primary key auto_increment,  
 userName VARCHAR(50) not null,  
 userAge int not null  
); 
然后插入4条数据:

insert into t_user values(1,‘小王‘,10);  
insert into t_user values(2,‘红红‘,11);  
insert into t_user values(3,‘明明‘,12);  
insert into t_user values(4,‘天天‘,13); 

查看下结果:

技术分享

2、表创建好之后便创建其映射类User,位于包com.mucfc.model中

package com.mucfc.model;
/**
 * User映射类
 * @author linbingwen
 * @time 2015.5.15
 */
public class User {
	private Integer userId;
	private String userName;
	private int userAge;
	public Integer getUserId() {
		return userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getUserAge() {
		return userAge;
	}
	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName
				+ ", userAge=" + userAge + "]";
	}

}

2、映射类创建好之后便创建MyBatis映射文件(即Mapper文件),位于和src同级的conf的mapper包中,文件内容如下:

<?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.mucfc.mapper.UserMapper">	
	<!--  查询单条记录  -->  
    <select id="selectUserById" parameterType="int" resultType="User">  
       select * from t_user where userId = #{userId}  
    </select>  
</mapper>

3、创建映射UserMapper类如下,位于包com.mucfc.mapper中

package com.mucfc.mapper;

import com.mucfc.model.User;
/**
 * Mapper映射类
 * @author linbingwen
 * @time 2015.5.15
 */
public interface UserMapper {
	public User selectUserById(int userId);

}

4、创建操作数据的DAO层

package com.mucfc.dao;

import com.mucfc.model.User;
/**
 * DAO接口层
 * @author linbingwen
 * @time 2015.5.15
 */
public interface UserDao {
	/**
	 * 根据用户ID查询用户信息
	 * @param id
	 * @return
	 */
	public User findUserById(int id);
}

然后是对应的实现层

package com.mucfc.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import  com.mucfc.mapper.UserMapper;
import com.mucfc.model.User;
/**
 * DAO实现层
 * @author linbingwen
 * @time 2015.5.15
 */
@Component
public class UserDaoImpl implements UserDao{
    @Autowired
	private UserMapper userMapper;
	@Override
	public User findUserById(int id) {
		User user = userMapper.selectUserById(id);
		 return user; 
	}
	
}

5、在conf里配置Mybatis的配置文件:

MyBatisConf.xmll放在conf里,注意路径

<?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="User" type="com.mucfc.model.User"/> 
   </typeAliases>  
   <!-- 配置Mapper文件的路径 -->
   <mappers>
       <mapper resource="mapper/UserMapper.xml"/>
   </mappers>
</configuration>

如果不与Spring进行整合的话,此配置文件还需要配置数据源信息,与Spring整合之后数据源就配置在Spring配置文件中,只需要配置映射文件的路径就可以了。

三、配置Spring

1、conf里创建Spring的配置文件:(conf是和src同级的文件夹)

SpringConf.xml放在conf里,注意路径

<?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"
	xsi:schemaLocation="  
           http://www.springframework.org/schema/beans  
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
           http://www.springframework.org/schema/aop  
           http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
	<!-- 配置数据源 -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/test" />
		<property name="username" value="root" />
		<property name="password" value="christmas258@" />
	</bean>


	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:MyBatisConf.xml" />
		<!-- <property name="typeAliasesPackage" value="com.tiantian.ckeditor.model" 
			/> -->
	</bean>

	  <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
       <property name="mapperInterface"  
           value="com.mucfc.mapper.UserMapper" />  
       <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
    </bean> 
	<!-- 自动扫描注解的bean -->
	<context:component-scan base-package="com.mucfc.dao" />

</beans>

2、web.xml中启动Spring

web.xml放在WEB-INF里

<?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">
	<!-- 配置初始打开的页面 -->
<!-- 	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list> -->

	<!-- Spring 容器加载 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:SpringConf.xml</param-value>
	</context-param>

</web-app>

其实到这里就完成了Spring+Mybatis的配置中,可以在JSP中通过Spring中创建的bean来操作数据 库了

四、配置SpringMVC

1、首先应该先更改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">
	<!-- 配置初始打开的页面 -->
<!-- 	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list> -->

	<!-- Spring 容器加载 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:SpringConf.xml</param-value>
	</context-param>

	<!-- SpringMVC的前端控制器 -->
	<servlet>
		<servlet-name>MyDispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 加载配置文件路径 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:SpringMVC-servlet.xml</param-value>
		</init-param>
		<!-- 何时启动 大于0的值表示容器启动时初始化此servlet,正值越小优先级越高 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- Spring MVC配置文件结束 -->

	<!-- SpringMVC拦截设置 -->
	<servlet-mapping>
		<servlet-name>MyDispatcher</servlet-name>
		<!-- 由SpringMVC拦截所有请求 -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<!-- SpringMVC拦截设置结束 -->

	<!--解决中文乱码问题 -->
	<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-app>

2、在conf里创建SpringMVC的配置文件:(conf是和src同级的文件夹)

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util" 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"
	xsi:schemaLocation="  
	    http://www.springframework.org/schema/util 
	    http://www.springframework.org/schema/util/spring-util-3.2.xsd
	    http://www.springframework.org/schema/mvc 
	    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/beans       
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">
       <mvc:annotation-driven/> 
	<!-- 把标记了@Controller注解的类转换为bean -->
	<context:component-scan base-package="com.mucfc.controller" />
	<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:prefix="/WEB-INF/views/" p:suffix=".jsp" />


</beans>
3、注解@conroller类的实现

com.mucfc.controller包下新建UserController.java

package com.mucfc.controller;

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

@Controller
public class UserController {
	@RequestMapping(value="/findUser",method = RequestMethod.POST)
	public String getUser(){	
		return "findUser";
	}
	@RequestMapping("/")
	public String getIndex(){	
		return "index";
	}

}
根据浏览器输入的网址,定位到不同的页面中去

五、JSP页面创建

由于SpringMVC配置了p:prefix="/WEB-INF/views/" p:suffix=".jsp" /。。。

所以要在WEB-INF中创建文件夹views,然后在这里放置JSP文件

首先是index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>查找用户信息</title>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
	<center>
		<form action="findUser" method="post">
			请输入用户ID:<input type="text" name="id">
			 <input type="submit" value="确定">  
		</form>
	</center>
</body>
</html>

将数据传递给findUser.jsp

findUser.jsp内容如下

<%@ page import="com.mucfc.dao.UserDao"%>
<%@page import="org.springframework.web.context.WebApplicationContext"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<center>
		通过controller访问<br/>
		欢迎<br/>
		<%
			WebApplicationContext wac = WebApplicationContextUtils
					.getWebApplicationContext(this.getServletContext());
			UserDao userDao = (UserDao) wac.getBean("userDaoImpl");
			String in=(String)request.getParameter("id");
		System.out.println(in);
			int num=Integer.parseInt(in);			
		%>
	<%=userDao.findUserById(num)%><br /> 
	<%-- 	<%=userDao.findUserById(2)%><br />
		<%=userDao.findUserById(3)%><br />
		<%=userDao.findUserById(4)%><br /> --%>
	</center>
</body>
</html>
根据 输入的id,来查找数据库中是否有这个人


六、运行

输入1

技术分享

结果表明这个人存在

技术分享

输入5,不存在这个人

技术分享



林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

本文工程免费下载


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。