导航:

聊聊、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. 2017.11.24 算法分析与设计------Gay格雷码

    1. 格雷码问题: 对于给定的正整数n,格雷码为满足如下条件的一个编码序列: (1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串. (2) 序列中无相同的编码. (3) 序列中位置相邻的两 ...

  2. first 和firstordefault的用法 简介

    https://www.cnblogs.com/1312mn/p/9212325.html

  3. node.js 练习3 调用函数

    (1)创建n3-1.js,并输入代码 (2)创建User.js ,并输入代码 (3)运行cmd (4)在浏览器上查看 (5) 再次查看cmd

  4. SecureCRT 设置

  5. webpack-dev-middleware插件的使用

    我们在使用webpack 编译文件时,每次改动文件都要去重新编译,是不是很麻烦,这时候我们就用到了webpack-dev-middleware 插件,该插件对更改的文件进行监控,编译, 一般和 web ...

  6. C语言学生成绩管理系统(简易版)

    #include<stdio.h> #include<stdlib.h> #include<string.h> int readstudents(struct st ...

  7. CodeForces_864_bus

    C. Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output ...

  8. Spring Cloud 升级最新 Finchley 版本,踩坑指南!

    https://blog.csdn.net/youanyyou/article/details/81530240 Spring Cloud 升级最新 Finchley 版本,踩了所有的坑! 2018年 ...

  9. Java的按值传递和按引用传递解说

    在网上看到的一个帖子解释Java的按值传递和按引用传递,感觉挺全面,就转过来,以供以后学习参考: 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...

  10. 细说 unicode 、utf-8 、utf-16、ascii 、gbk 、gb2312

    一.计算机的由来 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为”字节“.再后来,他们又做了一些可以处理这些 ...