您的位置:首页 > 编程语言 > Java开发

spring整合mybatis(入门级简单教程3)--获取sqlSession对象

2015-09-15 13:45 886 查看
引子:sqlSession对象在mybatis中的作用是不用说的了。比如我们可以用它来commit()、rollback()以及执行我们的map代码。下面介绍获取sqlSession对象的两种方法:

(说明:本篇是在上一篇的基础之上编写的)
1、第一种方法是使用SqlSessionTemplate,它是spring-mybatis很重要的部分,实现了SqlSession 接口,并且是线程安全的。



如上图所示,在上一篇博客的基础之上增加了横线所示的包和实现类。
(注:它们实现接口,这不是必须的,什么意思?就是我们如果不实现接口,也是可以跑的)
在这个类中,就有我们需要的sqlSession对象。
package com.dao.impl;

import org.apache.ibatis.session.SqlSession;

import com.dao.UserMapper;
import com.models.User;

public class UserMapperImpl implements UserMapper{
	private SqlSession sqlSession;
	public void setSqlSession(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}
	@Override
	public User getUser(String userID) {
		return (User)sqlSession.selectOne("com.dao.UserMapper.getUser", userID);
	}
	@Override
	public void insertUser(User user) {
                //这里面的代码可以自己写上,形式和上面的一样。
                //因为接口中已经定义了这个方法,我们可以直接使用接口的方法来完成调用

	}
	public void insertUsers(User[] users){
		for(User user : users){
			sqlSession.insert("com.dao.UserMapper.insertUser", user);
		}
	}
}
接下来,我们需要配置applicationContext文件,我们只需要在原来这个配置文件里面添加下面的代码即可:
<!-- session -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>

       <bean id="userMapperImpl" class="com.dao.impl.UserMapperImpl">
		<property name="sqlSession" ref="sqlSession"/>
	</bean>
我们测试一下:
package com.test;

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

import com.dao.UserMapper;
import com.dao.impl.ManagerMapperImpl;
import com.dao.impl.UserMapperImpl;
import com.models.Manager;
import com.models.User;
import com.service.TestService;

public class SpringTest {
	public static void main(String[] args) {
		UserMapperImpl userMapperImpl = context.getBean(UserMapperImpl.class);
		User user = userMapperImpl.getUser("1");
		System.out.println("user info = "+user.getId()+"; "+user.getName()+"; "+user.getPassword());
	}
		
		
}

如果我们要在UserMapperImpl中使用下面这个方法的话,也就是批量插入,那么,我们还需要在applicationContext中增加适当的配置:请看下面:

public void insertUsers(User[] users){
		for(User user : users){
			sqlSession.insert("com.dao.UserMapper.insertUser", user);
		}
	}
我们只需要在原来的基础之上增肌一个<constructor-arg/>就可以了
<!-- session -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  		<constructor-arg index="0" ref="sqlSessionFactory" />
  		<constructor-arg index="1" value="BATCH" />
	</bean>
我们测试一下:在main方法中加入下面代码:
UserMapperImpl userMapperImpl = context.getBean(UserMapperImpl.class);
		 User[] users = new User[3];
		User u1 = new User();
		u1.setName("Finley1");
		u1.setPassword("pass1");
		
		User u2 = new User();
		u2.setName("Finley2");
		u2.setPassword("pass2");
		
		User u3 = new User();
		u3.setName("Finley3");
		u3.setPassword("pass3");
		
		users[0] = u1;
		users[1] = u2;
		users[2] = u3;
		userMapperImpl.insertUsers(users);
#######################################################################################
*********************************************SqlSessionDaoSupport****************************************************
#######################################################################################

我们已经完成了获得SqlSession的第一种方法,下面我们来讲第二种方法(第二种方法相对简单一点,只需要继承SqlSessionDaoSupport类,然后用getSqlSession()方法来获取sqlSession对象)具体请看下面:
package com.dao.impl;

import org.mybatis.spring.support.SqlSessionDaoSupport;

import com.dao.ManagerMapper;
import com.models.Manager;

public class ManagerMapperImpl extends SqlSessionDaoSupport implements ManagerMapper{

	@Override
	public Manager getManager(String managerID) {
		return (Manager)getSqlSession().selectOne("com.dao.ManagerMapper.getManager", managerID);
	}
}
对于spring的配置文件,是不是不用改动?不是的,我们还需要申明相应的bean,请看:
<bean id="managerMapperImpl" class="com.dao.impl.ManagerMapperImpl">
		<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
	</bean>
我们测试一下:在main函数中加入下面的代码:
ManagerMapperImpl managerMapperImpl = context.getBean(ManagerMapperImpl.class);
Manager manager = managerMapperImpl.getManager("1");
System.out.println("manager info = "+manager.getId()+"; "+manager.getName()+"; "+manager.getPassword());
跑起来了吗?很简单是不是? = =
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: