MyBatis 和 Spring 的整合(三)

5. 整合 Spring部分

a. 先将 controller、service、dao 建立起来。

Controller:UserController.java

package ssm.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import ssm.model.User;
import ssm.service.UserManagerService;

@Controller
@RequestMapping("/userManage")  //模块路径
public class UserController {
	@Autowired
	UserManagerService userManagerService;

	@RequestMapping(value="/findUserById", method=RequestMethod.GET)
	public String findUserById(Model model, @RequestParam(required=true) Integer userId) throws Exception {

		User user = userManagerService.findUserById(userId);
		System.out.println(user);

		model.addAttribute("user", user);

		return "userManage/userDetail";
	}

	@InitBinder
	protected void initBinder(HttpServletRequest request,
			ServletRequestDataBinder binder) throws Exception {
		binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
	}
}

UserManagerService 接口和实现:  UserManagerServiceImpl.java (只写实现)

package ssm.service.impl;

import ssm.dao.UserDAO;
import ssm.model.User;
import ssm.service.UserManagerService;

public class UserManagerServiceImpl implements UserManagerService {

	private UserDAO userDAO;

	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}

	@Override
	public User findUserById(int id) throws Exception {
		//调用 orderMapper 获取用户信息
		return userDAO.findUserById(id);
	}
}

UserDAO接口和实现(UserDAOImpl.java):继承的 SqlSessionDaoSupport 用来为 DAO 提供 SqlSession。

import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;

import ssm.dao.UserDAO;
import ssm.mapper.UserMapper;
import ssm.model.User;

public class UserDAOImpl extends SqlSessionDaoSupport implements UserDAO {
	@Autowired
	private UserMapper userMapper;

	@Override
	public User findUserById(int userId) throws Exception {
		User user = null;
		user = userMapper.findUserById(userId);

		return user;
	}
}

b. 完成 Spring 的配置文件:前面 web.xml 中配置的 DispatcherServlet contextConfigLocation:spring-servlet.xml

注:因为 jackson 的包用的最新的,所以 消息转换器的 类:MappingJackson2HttpMessageConverter

<?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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx.xsd
		http://www.springframework.org/schema/util
		http://www.springframework.org/schema/util/spring-util.xsd ">

    <!-- 组件扫描 -->
	<context:component-scan base-package="ssm.controller" />

	<!-- 启动注解驱动 -->
	<!-- <mvc:annotation-driven /> -->

	<!-- 也可以自己配置映射器和适配器,替换上面的annotion-driven -->
	<!-- 映射器 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
	<!-- 适配器 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
		<property name="messageConverters">
			<util:list id="messageConverter">
				<ref bean="jsonHttpMessageConverter"/>
			</util:list>
		</property>
	</bean>

	<!-- 消息转换器 -->
	<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>

	<!-- 视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

c. 还记得之前在 mybatis 的 SqlMapConfig.xml 中配置的 数据库连接池吗?现在我们要把它交给 spring 来管理:将     SqlMapConfig.xml  中引用的 properties、 environments 等注释掉。并且在 resources/spring 下新建 applicationContext.xml 配置文件。如下:(因为用的 spring 4.2.2,database class 用的是 org.apache.commons.dbcp2.BasicDataSource, 并且属性 maxTotal 较早的版本是 maxActive)

<?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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-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/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">

	<context:property-placeholder location="classpath:db.properties"/>

	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${oracle.driver}" />
		<property name="url" value="${oracle.url}" />
		<property name="username" value="${oracle.username}" />
		<property name="password" value="${oracle.password}" />
		<property name="maxTotal" value="30" />
		<property name="maxIdle" value="5" />
	</bean>

</beans>

d. service 配置文件: applicationContext-service.xml,将 service Bean 交给 spring 容器管理。

<?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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-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/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">

	<bean id="userManagerService" class="ssm.service.impl.UserManagerServiceImpl">
	        <!-- 将 DAO 注入 service -->
		<property name="userDAO" ref="userDAO" />
	</bean>
</beans>

dao 配置文件:其中 关于 org.mybatis.spring.mapper.MapperScannerConfigurer 这个类我们后面再解释。

<?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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-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/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">

	<!-- 配置 SqlSessionFactory -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
	</bean>

	<!-- mapper扫描器 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="ssm.mapper" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>

	<bean id="userDAO" class="ssm.dao.impl.UserDAOImpl">
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
</beans>

OK! Spring 的配置也完成了,那么写一个测试类 test 一下:SpringMyBatisTest.java

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import ssm.model.User;
import ssm.service.UserManagerService;

public class SpringMyBatisTest {

	public static void main(String[] args) throws Exception {

		//加载配置文件
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"classpath:mybatis/SqlMapConfig.xml",
				"classpath:spring/applicationContext.xml",
				"classpath:spring/applicationContext-dao.xml",
				"classpath:spring/applicationContext-service.xml");

		UserManagerService service = (UserManagerService) ctx.getBean("userManagerService");

		User user = service.findUserById(100101);

		System.out.println("User ---- " + user);
	}
}

应该可以查询出结果。。。

时间: 2024-11-03 16:33:40

MyBatis 和 Spring 的整合(三)的相关文章

由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”

在J2EE领域,Hibernate与Mybatis是大家常用的持久层框架,它们各有特点,在持久层框架中处于领导地位. 本文主要介绍Mybatis(对于较小型的系统,特别是报表较多的系统,个人偏向Mybatis),对于它,个人比较喜欢的是: 使用简单.方便: 支持的XML动态SQL的编写,方便浏览.修改,同时降低SQL与应用程序之间的耦合. 不喜欢的是: 出现错误时,调试不太方便 本文主要介绍Mybatis的搭建,是学习Mybatis过程后整理的札记,其中包括“单独搭建Mybaits”和常用的“M

MyBatis和Spring的整合

 MyBatis和Spring整合(XML版) 所需要导入的jar文件 <!--MyBatis和Spring的整合包 由MyBatis提供--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!

mybatis与spring的整合

mybatis与spring整合 方式1:通过原始dao方法(不使用代理), 方式2:通过代理方式 搭建运行环境 1)导入 mybatis的jar包--->源码中的核心包+依赖包 mybatis提供的与spring整合的包 spring的核心包+事务包+aop面向切面编程包+数据库jdbc包 数据库驱动+c3p0包 2)建立配置文件 包括spring的核心文件bean.xml 以及 mybatis的核心文件sqlMapConfig.xml 2.User public class User { p

MyBatis入门(六)---mybatis与spring的整合

一.整合需要 1.1.方法 上一章中的数据 需要spring通过单例方式管理SqlSessionFactory spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession (spring和mybatis整合自动完成) 持久层的mapper都需要由spring进行管理 二.创建项目整合环境 2.1.创建项目 2.2.数据 db.properties #数据库配置信息 #驱动 driverClass=com.mysql.jdbc.Driver #连接

spring mvc+spring + hibernate 整合(三)

前面我们已整合了spring + hibernate,并建立了个用户的增加的实例,通过了单元测试,能正常增加数据.今天我们就来集成spring mvc以便建立web界面来输入数据并提交,后台再保存入库.关于spring mvc的一些基础理论及使用方法,网上有很多的资料,我这里就不多说了,下面我们进入实战.     因为我们项目会用到很多的图片.js代码.css样式文件等.我们在webapp目录下建立个static目录,统一对这些文件进行管理 一:web.xml配置 它提供了我们应用程序的配置设定

Java框架搭建-Maven、Mybatis、Spring MVC整合搭建

1. 下载eclipse 到网站下载 http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/marsr 选择自己所要的版本 2. 新建Maven项目 选择File –> New –> Maven Project 可看到下面界面 点击Next,可看到下面界面,我们选择maven-archetype-webapp 点击Next,可看到.Group Id为包名,Artifact Id为项目名.这里我们输入Gr

mybatis和spring mvc整合

1.环境 a.  jar包 (mybatis+spring mvc运行包+两者整合包mybatis-spring.jar) b.工程目录 c. 配置文件 mybatis:SqlMapConfig.xml.mapper.xml等 spring mvc: applicationContext.xml a) applicationContext.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xs

Mybatis学习笔记-Mybatis与Spring的整合

项目结构 User.java实体类 public class User implements Serializable{ private static final long serialVersionUID = 1L; private int id; private String username; private int age; private String sex; //... } UserMapper接口 public interface UserMapper { public void

mybatis与spring的整合(使用sqlSession进行crud)

上次介绍了用接口的方法极大的节省了dao层,只需通过 配置文件和接口就可以实现,这次介绍的是通过splsession来实现dao,这种方法比较灵活: 先不说,上配置文件: 1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3