【Spring+Mybatis】Spring整合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用户表:


先贴上工程目录结构。

【Spring+Mybatis】Spring整合Mybatis_第1张图片

对比于《【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工程即可。



	
	
		
		
		
		
	
	
	
		
		
	
	
	
		
		
	
 

2、接下来是Mybatis的核心配置文件configuration.xml,这个文件由于有Spring的存在,已经不需要大篇幅在节点大篇幅写Mybatis连接数据源的关系,毕竟一切关于宏观上的事情都交给了Spring。Mybatis只要管好自己,书明罗列出数据库表和Java的映射关系就行。这里有几个表就指明有几个mapper.xml。

    


	
	
		
	
   

3、然后在test.mapper这个包下写一个关于User表,数据库和Java的映射关系的mapper文件User.xml,具体是写明test.dao包下的数据库接口里面Java方法匹配的,关于此表的Sql查询语句。

   


	
 

同时贴上数据库接口类UserDao.java:

package test.dao;

import java.util.List;

import test.entity.User;

public interface UserDao {
	public List 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;
	}

}

上述三者的关系如下:

【Spring+Mybatis】Spring整合Mybatis_第2张图片

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_list = new ArrayList();
		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+Mybatis】Spring整合Mybatis_第3张图片

将表的数据取过来,完美打印了。

你可能感兴趣的:(Javaweb)