一.MyBatis介绍

MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以使用简单的XML或注解将Java的POJO对象映射成数据库中的记录。

创建MyBatis SQL映射XML文件:MyBatis Generator使用示例

MyBatis配置,创建resources/mybatis/mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org/DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<!-- 设置mybatis内置日志工厂 -->
<setting name="logImpl" value="LOG4J"/>
<!-- 支持Null值(value)输出Key -->
<setting name="callSettersOnNulls" value="true"/>
</settings>
</configuration>

Maven导入MyBatis相关依赖,编辑pom.xml

        <!-- 导入database依赖,使用druid作连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>

二.方法一(通过MapperScannerConfigurer实现,直接对Mapper接口进行代理)

数据库相关bean对象配置,创建resources/spring/applicationContext_database.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/mybatis/db.properties"/>
</bean> <!-- dataSource配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/> <property name="filters" value="log4j"/>
<property name="maxActive" value="5"/>
<property name="initialSize" value="1"/>
<property name="maxWait" value="6000"/>
</bean> <!-- mybatis文件配置,mapper.xml文件扫描 -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:/mybatis/mybatis.xml"/>
<property name="mapperLocations" value="classpath:/mybatis/mapper/*Mapper.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean> <!-- mapper注解扫描器配置,扫描@MapperScan注解,自动生成代码对象 -->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.learn.spring.server.dao"/>
<property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
</bean>
</beans>

UserDOMapper添加注解@MapperScan,编辑dao/UserDOMapper.java

/**
* 接口中的方法名称要和对应的MyBatis映射文件中的语句的id值一样
*/
@MapperScan
public interface UserDOMapper {
int deleteByPrimaryKey(Integer id); int insert(UserDO record); int insertSelective(UserDO record); UserDO selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(UserDO record); int updateByPrimaryKey(UserDO record);
}

三.方法二(继承SqlSessionDaoSupport,并实现SqlSession接口)

数据库相关bean对象配置,创建resources/spring/applicationContext_database.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/mybatis/db.properties"/>
</bean> <!-- dataSource配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/> <property name="filters" value="log4j"/>
<property name="maxActive" value="5"/>
<property name="initialSize" value="1"/>
<property name="maxWait" value="6000"/>
</bean> <!-- mybatis配置,mapper.xml文件扫描 -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:/mybatis/mybatis.xml"/>
<property name="mapperLocations" value="classpath:/mybatis/mapper/*Mapper.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>

继承SqlSessionDaoSupport,并实现SqlSession接口,创建dao/impl/BaseDaoImpl.java

public class BaseDaoImpl extends SqlSessionDaoSupport implements SqlSession {

    @Override
@Resource
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
} public <T> T selectOne(String s) {
return getSqlSession().selectOne(s);
} public <T> T selectOne(String s, Object o) {
return getSqlSession().selectOne(s, o);
} public <E> List<E> selectList(String s) {
return getSqlSession().selectList(s);
} public <E> List<E> selectList(String s, Object o) {
return getSqlSession().selectList(s, o);
} public <E> List<E> selectList(String s, Object o, RowBounds rowBounds) {
return getSqlSession().selectList(s, o, rowBounds);
} public <K, V> Map<K, V> selectMap(String s, String s1) {
return getSqlSession().selectMap(s, s1);
} public <K, V> Map<K, V> selectMap(String s, Object o, String s1) {
return getSqlSession().selectMap(s, o, s1);
} public <K, V> Map<K, V> selectMap(String s, Object o, String s1, RowBounds rowBounds) {
return getSqlSession().selectMap(s, o, s1, rowBounds);
} public <T> Cursor<T> selectCursor(String s) {
return getSqlSession().selectCursor(s);
} public <T> Cursor<T> selectCursor(String s, Object o) {
return getSqlSession().selectCursor(s, o);
} public <T> Cursor<T> selectCursor(String s, Object o, RowBounds rowBounds) {
return getSqlSession().selectCursor(s, o, rowBounds);
} public void select(String s, Object o, ResultHandler resultHandler) {
getSqlSession().select(s, o, resultHandler);
} public void select(String s, ResultHandler resultHandler) {
getSqlSession().select(s, resultHandler);
} public void select(String s, Object o, RowBounds rowBounds, ResultHandler resultHandler) {
getSqlSession().select(s, o, rowBounds, resultHandler);
} public int insert(String s) {
return getSqlSession().insert(s);
} public int insert(String s, Object o) {
return getSqlSession().insert(s, o);
} public int update(String s) {
return getSqlSession().update(s);
} public int update(String s, Object o) {
return getSqlSession().update(s, o);
} public int delete(String s) {
return getSqlSession().delete(s);
} public int delete(String s, Object o) {
return getSqlSession().delete(s, o);
} public void commit() {
getSqlSession().commit();
} public void commit(boolean b) {
getSqlSession().commit(b);
} public void rollback() {
getSqlSession().rollback();
} public void rollback(boolean b) {
getSqlSession().rollback(b);
} public List<BatchResult> flushStatements() {
return getSqlSession().flushStatements();
} /**
* 实现空方法,SqlSession由Spring管理并关闭,如果手工关闭,则会拋异常
* java.lang.UnsupportedOperationException: Manual close is not allowed over a Spring managed SqlSession
*/
public void close() { } public void clearCache() {
getSqlSession().clearCache();
} public Configuration getConfiguration() {
return getSqlSession().getConfiguration();
} public <T> T getMapper(Class<T> aClass) {
return getSqlSession().getMapper(aClass);
} public Connection getConnection() {
return getSqlSession().getConnection();
}
}

继承BaseDaoImol,并实现UserDOMapper接口,创建dao/impl/UserDaoImpl.java

@Repository
public class UserDaoImpl extends BaseDaoImpl implements UserDOMapper {
public int deleteByPrimaryKey(Integer id) {
return delete("com.learn.spring.server.dao.UserDOMapper.deleteByPrimaryKey", id);
} public int insert(UserDO record) {
return insert("com.learn.spring.server.dao.UserDOMapper.insert", record);
} public int insertSelective(UserDO record) {
return insert("com.learn.spring.server.dao.UserDOMapper.insertSelective", record);
} public UserDO selectByPrimaryKey(Integer id) {
return selectOne("com.learn.spring.server.dao.UserDOMapper.selectByPrimaryKey", id);
} public int updateByPrimaryKeySelective(UserDO record) {
return update("com.learn.spring.server.dao.UserDOMapper.updateByPrimaryKeySelective", record);
} public int updateByPrimaryKey(UserDO record) {
return update("com.learn.spring.server.dao.UserDOMapper.updateByPrimaryKey", record);
}
}

四.调用示例

Spring框架直接注入UserDOMapper,创建service/UserService.java

@Service
public class UserServiceImpl implements UserService { @Resource
private UserDOMapper userDao; public UserDO get(Integer id) {
return userDao.selectByPrimaryKey(id);
}
}

Spring集成MyBatis持久层框架的更多相关文章

  1. MyBatis持久层框架使用总结 转载

    MyBatis持久层框架使用总结   MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...

  2. MyBatis持久层框架学习之01 MyBatis的起源和发展

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

  3. MyBatis持久层框架使用总结

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2 ...

  4. SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作

    一.JAP框架简介 JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范.主要是为了简化持久层开发以及整合ORM技术,结束H ...

  5. spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架

    前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...

  6. 持久层框架JPA与Mybatis该如何选型

    一.现状描述 目前java 持久层ORM框架应用最广泛的就是JPA和Mybatis.JPA只是一个ORM框架的规范, 对该规范的实现比较完整就是Spring Data JPA(底层基于Hibernat ...

  7. spring boot整合双持久层框架jpa、mybatis

    公司之前用的是spring boot + jpa,但由于jpa无法完美的解决某些动态查询问题,就使用的jdbcTemplate 动态封装SQL,由于代码相对复杂,可读性差,现准备再引入mybatis. ...

  8. SSM框架开发web项目系列(五) Spring集成MyBatis

    前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...

  9. Spring Boot 2.X(二):集成 MyBatis 数据层开发

    MyBatis 简介 概述 MyBatis 是一款优秀的持久层框架,支持定制化 SQL.存储过程以及高级映射.它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序中对关系数据库的操作更方便简 ...

随机推荐

  1. linux | 网卡驱动

    linux 1. 查看网卡信息 lspci | grep -i 'eth' 1a:00.0 Ethernet controller: Intel Corporation Ethernet Connec ...

  2. K均值聚类

    聚类(cluster)与分类的不同之处在于, 分类算法训练过程中样本所属的分类是已知的属监督学习. 而聚类算法不需要带有分类的训练数据,而是根据样本特征的相似性将其分为几类,又称为无监督分类. K均值 ...

  3. 公众号第三方平台开发 教程六 代公众号使用JS SDK说明

    公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号 ...

  4. [转]JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐

    本文转自:https://www.cnblogs.com/landeanfen/p/5461849.html#_label3 阅读目录 一.时间组件 1.效果展示 2.源码说明 3.代码示例 二.自增 ...

  5. js判断字符串是否在数组中

    先加一个扩展函数: Array.prototype.contains = function (obj) {  var index = this.length;  while (index–) {   ...

  6. [PHP] 算法-二位有序数组中查找的PHP实现

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 1.二 ...

  7. [Python] Python基础字符串

    Python的语法采用缩进的方式,一般使用四个空格,并且是大小写敏感的 字符编码 计算机只能处理数字,如果要处理文本,必须先把文本转换成数字才能处理 采用8个比特(bit)作为一个字节(byte) 一 ...

  8. 加快maven中jar包的下载速度,maven镜像收集

    maven下载jar包的默认仓库是http://my.repository.com/repo/path速度较慢,通过配置国内镜像提高下载速度 1.打开eclipse--->Window---&g ...

  9. Linux下编译、链接和装载

    ——<程序员的自我修养>读书笔记 编译过程 在Linux下使用GCC将源码编译成可执行文件的过程可以分解为4个步骤,分别是预处理(Prepressing).编译(Compilation). ...

  10. deepin使用笔记-解决安装并解决gvim没有启动器的问题

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.安装gvim #apt-get install vim-gtk3 2.创建桌面启动器 创建/usr/share/applic ...