Spring+MybatisSpring整合Mybatis
Posted yongh701
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring+MybatisSpring整合Mybatis相关的知识,希望对你有一定的参考价值。
在《【Mybatis】Helloworld》(点击打开链接)大家看到使用Mybatis需要撰写一个数据库连接与配置的xml文件,而Spring具体整合JDBC的功能,具体见《【Spring】整合JDBC连接数据库》(点击打开链接),可以代替Mybatis连接数据库和配置数据库,而直接Mybatis对数据库增删改查的优良特性,这在Java尤其在Javaee的编程具有明显优势,下面举一个例子说明Spring如何整合Mybatis。
一、所需要的jar包。
除了《【Spring】Spring3.x的下载与配置》(点击打开链接)中需要的Spring包,和《【Mybatis】Helloworld》(点击打开链接)需要的Mybatis包,还需要在https://github.com/mybatis/spring/releases下载一个Spring连接Mybatis的jar包mybatis-spring-1.3.1.jar:
整合之后lib文件夹如下所示,同时,在Eclipse的Java工程加载所有的jar包。
二、制作过程
由于数据库和Java交流没有Jsp什么事情,所以这里用最简单的Javase工程做例子。处理的还是这样早已举个栗子举烂的mysql中test数据库的User用户表:
先贴上工程目录结构。
对比于《【Mybatis】Helloworld》(点击打开链接)的目录结构基本大同小异,唯一的不同,Spring整合Mybatis能减少部分代码量,同时也好管理。
1、首先是Spring的核心applicationContext.xml,这个文件,首先利用《【Spring】整合JDBC连接数据库》(点击打开链接),用Spring填充org.springframework.jdbc.datasource.DriverManagerDataSource中该被注入的变量,赋予相应的值则完成,其次在利用org.mybatis.spring.SqlSessionFactoryBean这个类,初始化数据源,然后再初始化configLocation,指明初始化文件是configuration.xml,Mybatis的初始化完成,最后是在org.mybatis.spring.mapper.MapperScannerConfigurer指明数据库接口的所在的包,这里是test.dao。通过Mybatis的自动扫描,在其它类就能直接使用dao了。尤其在Javaee,Spring自动启动之后,给dao配上getter和setter,就会自动注入好了。并初始化数据库操作的session。这些都是Spring整合Mybatis的指定动作,固定格式,知道替换相应的值适配你的数据库和Java工程即可。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd ">
<!-- Spring连接的JDBC数据源 -->
<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?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 指出Mybatis的核心配置文件,关于数据库表和Java文件的映射写在里面 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="configuration.xml"></property>
</bean>
<!-- 指出数据库接口方法所在的包 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
autowire="byName">
<property name="basePackage" value="test.dao" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans>
2、接下来是Mybatis的核心配置文件configuration.xml,这个文件由于有Spring的存在,已经不需要大篇幅在<typeAliases><environments>节点大篇幅写Mybatis连接数据源的关系,毕竟一切关于宏观上的事情都交给了Spring。Mybatis只要管好自己,书明罗列出数据库表和Java的映射关系就行。这里有几个表就指明有几个mapper.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>
<!-- 指明在user这个表中所包含常用sql方法,test/mapper/User.xml是一个指明java方法和sql语法联系的xml文件 -->
<mappers>
<mapper resource="test/mapper/User.xml" />
</mappers>
</configuration>
3、然后在test.mapper这个包下写一个关于User表,数据库和Java的映射关系的mapper文件User.xml,具体是写明test.dao包下的数据库接口里面Java方法匹配的,关于此表的Sql查询语句。
<?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="test.dao.UserDao">
<select id="findAllUsers" resultType="test.entity.User">
select * from user
</select>
</mapper>
同时贴上数据库接口类UserDao.java:
package test.dao;
import java.util.List;
import test.entity.User;
public interface UserDao
public List<User> findAllUsers();
和没什么好说的实体类User.java:
package test.entity;
public class User
private Integer id;
private String username;
private String password;
public Integer getId()
return id;
public void setId(Integer id)
this.id = id;
public String getUsername()
return username;
public void setUsername(String username)
this.username = username;
public String getPassword()
return password;
public void setPassword(String password)
this.password = password;
上述三者的关系如下:
4、最后,这样配好之后,就能够在其余的Java类随便调用UserDao.java中的findAllUser()方法,得到一个充满User表的List了,比如测试的SpringMybatis.java,如下代码:
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import test.dao.UserDao;
import test.entity.User;
public class SpringMybatis
public static void main(String[] args)
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");// 初始化spring
UserDao userDao = (UserDao) applicationContext.getBean("userDao");// 初始化userDao这个数据库接口类,由于Mybatis自动扫描的,可以直接拿"userDao"(首字母要小写),无须在配个idapplicationContext.xml
List<User> user_list = new ArrayList<User>();
user_list = userDao.findAllUsers();
for (User user : user_list) // jdk1.5+的foreach打印,省事,不用写这么多代码了
System.out.println(user.getId() + "\\t" + user.getUsername() + "\\t"
+ user.getPassword());
((ConfigurableApplicationContext) applicationContext).close();// 关闭Spring避免警告
运行结果如下所示:
将表的数据取过来,完美打印了。
以上是关于Spring+MybatisSpring整合Mybatis的主要内容,如果未能解决你的问题,请参考以下文章
mybatisSpring整合(eclipse)以及事务管理
Spring+SpringMVC+MybatisSpring+SpringMVC+Mybatis实现前端到后台完整项目