springmvc作为一个轻量级的web框架,现在变得越来越流行了,同时mybatis也因为可控性越来越受开发者的青睐,下面我就向初学者简单介绍一些如何进行springmvc和mybatis的整合。
一 、组件介绍
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对象)映射成数据库中的记录。
二、项目架构搭建
下面我们进行一个简单的hello name的简单项目搭建。
项目是在eclipse中开发的,采用maven进行项目管理。
首先我们新建一个maven项目,并建立一下的项目结构。
这里的包名可以根据自己的习惯进行分类,配置文件是为了方便书写而特意按功能进行分来的。
然后新建一个数据库test,下面是数据表和测试数据的sql语句
/*
Navicat MySQL Data Transfer
Source Server : chen
Source Server Version : 50505
Source Host : localhost:3306
Source Database : test
Target Server Type : MYSQL
Target Server Version : 50505
File Encoding : 65001
Date: 2017-01-02 16:30:06
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `mytable`
-- ----------------------------
DROP TABLE IF EXISTS `mytable`;
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of mytable
-- ----------------------------
INSERT INTO `mytable` VALUES ('1', 'chen');
我们的项目需要做的就是,利用mybatis从数据库中读出name=chen,并输出hello chen,这个项目很简单,但是对于初学者学习如何进行框架整合和入门是有很好的启示作用的,下面我们进行项目的开发吧。
三、hello name实现
上面一节的项目架构搭建完成后,下面我们进行项目的实现。
1. pom.xml 编写
这里引入两个框架需要的jar包和一些常用的jar包
<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.chen</groupId>
<artifactId>SpringMvc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.8.release</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.8.release</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.8</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.8</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
2. 配置文件编写
下面进行配置文件的书写,配置文件比较常规,在文件中也有注释了,所以这里就不做介绍了。
/SpringMvc/src/main/webapp/WEB-INF/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_2_5.xsd" version="2.5">
<display-name>Archetype Created Web Application</display-name>
<!-- 核心控制器 -->
<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,/WEB-INF/springmvc-aop.xml,/WEB-INF/springmvc-mybatis.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
/SpringMvc/src/main/webapp/WEB-INF/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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- 组件扫描 -->
<context:component-scan base-package="com.chen"/>
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!--对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:suffix=".jsp"/>
</beans>
/SpringMvc/src/main/webapp/WEB-INF/springmvc-mybatis.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:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
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
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="/WEB-INF/sqlMapConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置Springjdbc中数据源事务管理 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 注解式事务处理 -->
<tx:annotation-driven transaction-manager="txManager"/>
</beans>
/SpringMvc/src/main/webapp/WEB-INF/sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"file:///D:/0227/tony/project/mybatis/资料/3-常用配置文件/mybatis-3-config.dtd">
<configuration>
<mappers>
</mappers>
</configuration>
3. 代码实现
配置文件完成后,我们就可以进行代码编写了。
controller类
/SpringMvc/src/main/java/com/chen/controller/HelloController.java
package com.chen.controller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.chen.service.TableService;
@Component
@RequestMapping("/hello.do")
public class HelloController {
@Resource
private TableService tableService;
@RequestMapping
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
String msg = tableService.hello();
ModelAndView view = new ModelAndView("show");
view.addObject("msg",msg);
return view;
}
}
entity类和mapper文件
/SpringMvc/src/main/java/com/chen/entity/Mytable.java
package com.chen.entity;
import java.io.Serializable;
public class Mytable implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/SpringMvc/src/main/java/com/chen/entity/Mytable.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.chen.entity.Mytable">
<select id="findall" resultType="com.chen.entity.Mytable">
select * from mytable;
</select>
</mapper>
sqlMapConfig.xml中进行mapper文件配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"file:///D:/0227/tony/project/mybatis/资料/3-常用配置文件/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="com/chen/entity/Mytable.xml"/>
</mappers>
</configuration>
service层
/SpringMvc/src/main/java/com/chen/service/TableService.java
package com.chen.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.chen.dao.TableDao;
public interface TableService {
public String hello();
}
/SpringMvc/src/main/java/com/chen/service/TableServiceImpl.java
package com.chen.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.chen.dao.TableDao;
@Component("TableService")
public class TableServiceImpl implements TableService{
@Resource
private TableDao dao;
@Transactional
public String hello() {
return dao.hello();
}
}
dao层
/SpringMvc/src/main/java/com/chen/dao/TableDao.java
package com.chen.dao;
public interface TableDao {
public String hello();
}
/SpringMvc/src/main/java/com/chen/dao/TableDaoImpl.java
package com.chen.dao;
import java.util.List;
import javax.annotation.Resource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Component;
import com.chen.entity.Mytable;
@Component("TableDao")
public class TableDaoImpl implements TableDao{
@Resource(name="sqlSessionFactory")
private SqlSessionFactory sqlSessionFactory;
public String hello() {
List<Mytable> table = sqlSessionFactory.openSession().selectList("com.chen.entity.Mytable.findall");
return "hello " + table.get(0).getName();
}
}
页面文件的编写
/SpringMvc/src/main/webapp/index.jsp
<html>
<body>
<h2><a href="hello.do">hello.do</a></h2>
</body>
</html>
/SpringMvc/src/main/webapp/show.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<h3>${msg }</h3>
</head>
<body>
</body>
</html>
这样子整个项目搭建和编码工作就都完成了。
项目的整合代码我放在了github上面,有需要的同学可以去看
https://github.com/hugua/SpringMvc.git