引子: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());

跑起来了吗?很简单是不是? = =

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

  1. 最新Spring整合MyBatis详解教程

    目录 1.导入相关jar包 1. junit 2. mybatis 3. mysql 4. spring相关 5. aop织入 6. mybatis-spring 7. lombok(选用) 2.回顾 ...

  2. spring整合mybatis(实现数据的增删改查)

    一.专业术语解释 1.spring:是分层的Java SE/EE应用full - stack轻量级开源框架,以IoC(控制反转)和AOP(面向切面编程)为内核,提供展现层spring MVC 和 sp ...

  3. spring整合mybatis(入门级简单教程1)--在spring中配置c3p0,并成功测试

    引子:spring整合mybatis.因为,我们看完(我就是这样的)spring和mybatis之后,本想自己写一个小小的项目,以便加深理解,但是我发现在spring中整合mybatis并不是一件容易 ...

  4. Spring 整合 Mybatis 原理

    目录 Mybatis的基本工作原理 分析需要解决的问题 Spring中Bean的产生过程 解决问题 解决方案 FactoryBean Import 总结 优化 Mybatis的基本工作原理 在 Myb ...

  5. Spring整合MyBatis:实现登录功能

    一.项目搭建 1.创建 web 项目:spring_mybatis 2.搭建项目的目录结构 3.导入 jar 包 注意: 导入 web/WEB-INF/lib 中,一下 jar 包都需要导入 4.创建 ...

  6. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)

    http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...

  7. Spring整合Mybatis之注解方式,(注解整合Junit)

    Spring整合Mybatis之注解方式 我有一篇博客详细写了我自己使用xml的方法Spring整合MyBatis,现在我就把核心配置文件中的每个bean的配置使用注解的方式实现 注解整合MyBati ...

  8. spring整合mybatis基于注解

    数据库 /* Navicat MySQL Data Transfer Source Server         : mysql Source Server Version : 50549 Sourc ...

  9. spring整合mybatis基于xml配置

    数据库 /* Navicat MySQL Data Transfer Source Server         : mysql Source Server Version : 50549 Sourc ...

最新文章

  1. JSP基本语法:文件结构、脚本元素、指令元素、动作元素
  2. Elasticsearch: 索引别名Aliases
  3. 计算机故障的现象有哪些,八种常见CPU故障现象的分析与处理_计算机硬件与网络_IT /计算机_信息...
  4. redis入门及java操作
  5. Angular组件--动态组件
  6. MySQL索引的分类、何时使用、何时不使用、何时失效?
  7. 时空AI技术:深度强化学习在智能城市领域应用介绍
  8. setInterval和setTimeout的使用区别
  9. Java并发编程实战~生产者-消费者模式
  10. Derangement(AtCoder-3525)
  11. 强悍的 ubuntu —— 查看软件版本及安装位置
  12. php讲一个正整数前补0,php 数字补零的两种的简单示例
  13. Beta阶段 - 博客链接合集
  14. Linux Centos firewall 防火墙 开启 80 端口配置案例
  15. 【计算方法】数值积分求解微分方程
  16. 线程安全的单例模式(Java)
  17. matlab画图函数之plot【matlab图行绘制一】
  18. PCL包围盒(详细介绍)
  19. STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)
  20. GUCCI、LV等奢侈品巨头如何布局元宇宙的,其他品牌应该跟上吗?

热门文章

  1. Java 数据类型缓存池
  2. 介绍一下你对浏览器内核的理解?
  3. 输入一行字符,判断单词数
  4. vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法
  5. 阿里如何实现100%容器化镜像化?八年技术演进之路回顾
  6. Google 希望将 Go 打造成云端应用开发的首选语言
  7. C# 的tcp Socket设置自定义超时时间
  8. .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  9. 【BZOJ】3527: [Zjoi2014]力(fft+卷积)
  10. ui曲线谁是横坐标_vue项目引入echarts折线图 横坐标显示问题