一.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. jquery实现点击文字后变成文本框且可修改

    $(function() { //获取class为caname的元素 $(".caname").click(function() { var td = $(this); var t ...

  2. JS nodeList转数组,兼容IE低版本

    一.前言 nodeList转数组貌似很少会这样去操作,但我在做图片懒加载时,我获取了所有需要做懒加载的img元素,也就是一个NodeList对象,打个比方: 对这些元素进行src修改后,我想将此项从N ...

  3. 交叉编译问题记录-嵌入式环境下 GDB 的使用方法

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10693247.html 本文以嵌入式 Linux 环境下的 gdb 使用为例,记录交叉编 ...

  4. win10 uwp 渲染原理 DirectComposition 渲染

    本文来告诉大家一个新的技术DirectComposition,在 win7 之后(实际上是 vista),微软正在考虑一个新的渲染机制 在 Windows Vista 就引入了一个服务,桌面窗口管理器 ...

  5. Contest2073 - 湖南多校对抗赛(2015.04.06)

    Contest2073 - 湖南多校对抗赛(2015.04.06) Problem A: (More) Multiplication Time Limit: 1 Sec  Memory Limit:  ...

  6. SQL Server 基本SELECT语句

    1.SELECT 和 FROM 语句 SELECT表示执行的是查询,接着需要更知道从哪边查询数据,FROM就是限制读取的数据在哪一个表或哪几个表中,这样就构成了一个基本语句. SELECT * FRO ...

  7. meta的日常设置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. idea not found for the web module

    intellij  IDEA  的tomcat 配置项里面没有的app web:war exploded  没有配置/路径

  9. (网页)js每隔5分钟执行一次ajax请求的实现方法(转)

    转自脚本之家: 一个页面好像只能有一个 window.onload=function(){},所以要有多个事件,这样写就好了 window.onload=function(){ //假设这里每个五分钟 ...

  10. Cookie的HttpOnly、secure、domain属性

    Cookie主要属性 Cookie主要属性: path domain max-age expires:是expires的补充,现阶段有兼容性问题:IE低版本不支持,所以一般不单独使用 secure h ...