一.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. python 输出颜色与样式的方法

    上次遇到这个问题就想写下来,其实当时我也不怎么会,老师说这个东西不需要理解,只需要死记硬背,写的多了就记住了,所以今天搜集了几篇文章,加上自己的理解,写下了这篇python 输出颜色的样式与方法的文章 ...

  2. 探秘 Java 热部署

    # 前言 在之前的 深入浅出 JVM ClassLoader 一文中,我们说可以通过修改默认的类加载器实现热部署,但在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能 ...

  3. C# 函数式编程:LINQ

    一直以来,我以为 LINQ 是专门用来对不同数据源进行查询的工具,直到我看了这篇十多年前的文章,才发现 LINQ 的功能远不止 Query.这篇文章的内容比较高级,主要写了用 C# 3.0 推出的 L ...

  4. MySQL学习(五) UNION与UNION ALL

    UNION用于把来自许多SELECT语句的结果组合到一个结果集合中,也叫联合查询. SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | ...

  5. Matlab Euler's method

    % matlab script to test efficiency of % Euler's method, classical Runge-Kutta, and ode45 % on Arenst ...

  6. Docker 轻量级图形管理软件 Portainer

    安装 docker swarm :https://www.cnblogs.com/klvchen/p/9437758.html portainer 集群启动 docker volume create ...

  7. Echarts简单案例

    官网: http://echarts.baidu.com/index.html 文档:  http://echarts.baidu.com/echarts2/doc/doc.html <html ...

  8. 纯小白入手 vue3.0 CLI - 3.1 - 路由 ( router )

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...

  9. Salesforce的公式和验证规则

    公式 在Salesforce中,有些功能不需要从数据库中直接读取的数据,而是基于这些数据之间的关系来做出判断.这种情况下就要用到"公式"功能. 公式的概念和Excel中的公式类似, ...

  10. Oracle 中 流程控制函数 decode用法

    函数介绍 DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能. DECODE有什么用途呢?先构造一 ...