导航:

聊聊、Mybatis API

聊聊、Mybatis XML

聊聊、Mybatis集成Spring 注解方式

聊聊、手写Mybatis XML配置方式

聊聊、手写Mybatis 注解配置方式

聊聊、手写Mybatis SpringBoot Starter

这篇文章聊聊 Mybatis 怎么集成 Spring,也就是怎么样把 Mybatis 交给 Spring 来管理。要将 Mybatis 交给 Spring,肯定要生成 Bean,因为 Spring 就是一个 Bean 工厂,它负责对 Bean 的管理。下面看看 Mybatis 有哪些 Bean 呢?

版本


 依赖


<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.5</version>
</dependency>

项目结构


XML 方式管理 Bean


1.SqlSessionFactoryBean

spring.xml

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true"/>
  <property name="username" value="root"/>
  <property name="password" value="root"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="mapperLocations" value="classpath*:mappers/**/*.xml" />
</bean>

AccountService.java

package org.rockcode.services;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.rockcode.mappers.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class AccountService {

@Autowired
private SqlSessionFactory sqlSessionFactory;

public void queryAll() {
  SqlSession sqlSession = sqlSessionFactory.openSession();
  List<Object> list = sqlSession.selectList("accountMapper.queryAll");
  System.out.println(list);
}

}

AccountMapper.xml

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="accountMapper">
  <select id="queryAll" resultType="java.util.Map">
       select * from account
  </select>
</mapper>

上面用 SqlSessionFactoryBean 来实现,实质上是通过 mapperLocations 属性,找到所有的 xml 文件,跟第二篇文章 《聊聊、Mybatis XML》 里面聊得 mappers 中用 resource 是一样的。这里还是用到了 mybatis 底层的 API,sqlSession.selectList("accountMapper.queryAll")。通过 SqlSessionFactory 得到 SqlSession ,然后执行后面相关操作。

为了简化上面的操作,我们还可以用一些帮助类来实现。

例如:SqlSessionTemplate 模板类、SqlSessionDaoSupport 帮助类。具体的实现就不一一写了。

spring.xml 新增 SqlSessionTemplate

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

AccountService.java  

@Component
public class AccountService {

@Autowired
private SqlSessionTemplate sqlSessionTemplate;

public void queryAll() {
List<Object> list = sqlSessionTemplate.selectList("accountMapper.queryAll");
System.out.println(list);
}

}

继承 SqlSessionDaoSupport  

@Component
public class AccountService  extends SqlSessionDaoSupport {

@Autowired
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
super.setSqlSessionTemplate(sqlSessionTemplate);
}

@Autowired
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}

public void queryAll() {
  
  List<Object> list = getSqlSession().selectList("accountMapper.queryAll");
  System.out.println(list);
}

}

上面 setSqlSessionTemplate 和 setSqlSessionFactory,二选一。

2.MapperFactoryBean

spring.xml

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true"/>
  <property name="username" value="root"/>
  <property name="password" value="root"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="accountMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="org.rockcode.mappers.AccountMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

AccountService.java  

@Component
public class AccountService {

@Autowired
private AccountMapper accountMapper;

public void queryAll() {
List<Map<String, Object>> list = accountMapper.queryAll();
System.out.println(list);
}

}

AccountMapper.java

public interface AccountMapper {
@Select("select * from account")
public List<Map<String,Object>> queryAll();
}

这种配置有一个缺点,每次只能配置一个 mapperInterface,如果有多个那就要配置多个 MapperFactoryBean。Mybatis 提供了几种扫描器,可以扫描包下面的多个 mapperInterface。

<mybatis:scan base-package="org.rockcode.mappers" />

就这个配置,可以省略上面的 MapperFactoryBean,是不是很简单。

或者

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="org.rockcode.mappers" />
</bean>

这两种配置方式都可以,效果都一样。

下一篇聊聊 Mybatis 集成 Spring 注解方式。

聊聊、Mybatis Java注解实现的更多相关文章

  1. Spring+Mybatis基于注解整合Redis

    基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载 ...

  2. 框架基础——全面解析Java注解

    为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...

  3. mybatis Java API

    既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyB ...

  4. java注解(基础)

    一.认识注解 1.注解的定义: java提供了一种原程序中的元素关联任何信息和元数据的途径和方法. 2.学习注解的目的: (1)能够读懂别人写的代码,特别是框架相关的代码(框架中使用注解是非常方便的) ...

  5. Java注解(Annotation):请不要小看我!

    Java注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分.注解对于代码的运行效果没有直接影响. 网络上对注解的解释过于严肃.刻板,这并不是我喜欢的风格.尽管这样的 ...

  6. SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  7. mybatis 使用注解简化xml映射文件

    目录 关于mybatis注解 初次简单使用mybatis注解示例 利用注解实现指定映射 使用注解实现表间关联(1对1) 关于mybatis注解 注解在java中特别常见,mybatis中也支持注解. ...

  8. Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  9. java注解的实质,何为注解

    注解就是贴标签 (1)注解的作用 1,生成文档.如常用的@param 2,跟踪代码依赖性,实现替代文件的功能.在spring中,主要是减少配置. 3,编译时进行格式检查.如常用的@override ( ...

随机推荐

  1. PHP编译安装时常见错误及解决办法,大全

    1.   configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution ...

  2. vue 中$index $key 已经移除了

    https://cn.vuejs.org/v2/guide/migration.html#index-and-key-移除 之前可以这样: 1 2 3 4 5 6 <ul id="ex ...

  3. image retrieval数据集

    1. Oxford,vgg组,主要是building方面的数据.http://www.robots.ox.ac.uk/~vgg/data/oxbuildings/index.html 2. Calte ...

  4. Error:linker command failed with exit code 1 (use -v to see invocation) - iOS

    今天在操作 CoreData 时,创建完 Create NSManagedObject Subclass...  后,工程中会自动生成四个文件,如下图所示:   此时此刻便以工程,激动人心的时刻来临了 ...

  5. Pop–实现任意iOS对象的任意属性的动态变化

    简介 Pop 是一个可扩展的动画引擎,可用于实现任意iOS对象的任意属性的动态变化,支持一般动画,弹性动画和渐变动画三种类型. 项目主页: pop 最新示例: 点击下载 注意: 官方代码中,并不包含实 ...

  6. Ubuntu安装MySQL及使用Xshell连接MySQL出现的问题(2003-Can't connect to MySql server及1045错误)

    不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!! 以下所有的命令都是在root用户下操作(如果还没有设置root密码)如下: 安装好Ubuntu系统之后,打开终端先设 ...

  7. 云计算之KVM虚拟化实战

    1 基础环境规划 1.1 主机环境规划 系统版本 主机名 IP地址 内存 磁盘 CentOS6.9 kvm-node1 10.0.0.200 2G 20G CentOS6.9 kvm-node2 10 ...

  8. linux文件共享之samba,nfs的搭建

    Samba server简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局 ...

  9. dts--tests(三)

    sample_built.py """ DPDK Test suite. Test sample_built. """ import uti ...

  10. selenium破解极限

    一共分为两端段代码: 第一段:获取cookie 第二段:通过cookie登陆 这里以百度云为例: 第一部分:保存cookies,直接在cmd中执行就好 >>> from seleni ...