聊聊、Mybatis Java注解实现
导航:
聊聊、手写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注解实现的更多相关文章
- Spring+Mybatis基于注解整合Redis
基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载 ...
- 框架基础——全面解析Java注解
为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...
- mybatis Java API
既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyB ...
- java注解(基础)
一.认识注解 1.注解的定义: java提供了一种原程序中的元素关联任何信息和元数据的途径和方法. 2.学习注解的目的: (1)能够读懂别人写的代码,特别是框架相关的代码(框架中使用注解是非常方便的) ...
- Java注解(Annotation):请不要小看我!
Java注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分.注解对于代码的运行效果没有直接影响. 网络上对注解的解释过于严肃.刻板,这并不是我喜欢的风格.尽管这样的 ...
- SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- mybatis 使用注解简化xml映射文件
目录 关于mybatis注解 初次简单使用mybatis注解示例 利用注解实现指定映射 使用注解实现表间关联(1对1) 关于mybatis注解 注解在java中特别常见,mybatis中也支持注解. ...
- Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- java注解的实质,何为注解
注解就是贴标签 (1)注解的作用 1,生成文档.如常用的@param 2,跟踪代码依赖性,实现替代文件的功能.在spring中,主要是减少配置. 3,编译时进行格式检查.如常用的@override ( ...
随机推荐
- PHP编译安装时常见错误及解决办法,大全
1. configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution ...
- vue 中$index $key 已经移除了
https://cn.vuejs.org/v2/guide/migration.html#index-and-key-移除 之前可以这样: 1 2 3 4 5 6 <ul id="ex ...
- image retrieval数据集
1. Oxford,vgg组,主要是building方面的数据.http://www.robots.ox.ac.uk/~vgg/data/oxbuildings/index.html 2. Calte ...
- Error:linker command failed with exit code 1 (use -v to see invocation) - iOS
今天在操作 CoreData 时,创建完 Create NSManagedObject Subclass... 后,工程中会自动生成四个文件,如下图所示: 此时此刻便以工程,激动人心的时刻来临了 ...
- Pop–实现任意iOS对象的任意属性的动态变化
简介 Pop 是一个可扩展的动画引擎,可用于实现任意iOS对象的任意属性的动态变化,支持一般动画,弹性动画和渐变动画三种类型. 项目主页: pop 最新示例: 点击下载 注意: 官方代码中,并不包含实 ...
- Ubuntu安装MySQL及使用Xshell连接MySQL出现的问题(2003-Can't connect to MySql server及1045错误)
不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!! 以下所有的命令都是在root用户下操作(如果还没有设置root密码)如下: 安装好Ubuntu系统之后,打开终端先设 ...
- 云计算之KVM虚拟化实战
1 基础环境规划 1.1 主机环境规划 系统版本 主机名 IP地址 内存 磁盘 CentOS6.9 kvm-node1 10.0.0.200 2G 20G CentOS6.9 kvm-node2 10 ...
- linux文件共享之samba,nfs的搭建
Samba server简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局 ...
- dts--tests(三)
sample_built.py """ DPDK Test suite. Test sample_built. """ import uti ...
- selenium破解极限
一共分为两端段代码: 第一段:获取cookie 第二段:通过cookie登陆 这里以百度云为例: 第一部分:保存cookies,直接在cmd中执行就好 >>> from seleni ...