Spring集成MyBatis框架

Java在写数据库查询时,我接触过四种方式:

1、纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池)

这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为Connection做获取与释放,大量的冗余代码也容易出错;另一个是,复杂的SQL用字符串写起来简直不可维护(换行、可视长度、参数都是问题)。

2、使用Spring JdbcTemplate

这个其实还是挺不错的,配置比较简单,功能丰富上比手工管理Connection要舒服多了,而且代码也比较简洁。突出的问题就是SQL维护还是挺麻烦的。

3、使用Hibernate框架

一句话,配置很麻烦,用起来还是挺不错的。但是有一个致命缺陷,它并不能像单表查询一样可以帮我们完成多表的查询。如果有复杂的多表查询或查询条件,还是得用SQL去查,这对于一些业务逻辑复杂或者会经常变更的业务来说,后期维护就是灾难,改到想哭(因为真的是很混乱,一定要开始就规划好)。

4、使用MyBatis框架

这个是当前我所做项目最喜欢用的数据库持久化框架了,它通过XML配置可以非常简单直观地帮你完成各种条件、判断、多表的综合查询,实现方式比Java代码拼SQL要舒服太多了,在这方面更是甩Hibernate一条街。要说易用性,其实也挺容易用的,但是配置上也要对一些数据做映射,不过相对而言更加灵活。它的实体类并不一定要是数据库物理表,而可以是任意查询出来的数据集(类似数据传输对象DTO)。

简单总结一下:

配置容易程度:1 > 2 > 4 > 3

使用便捷程度:2 > 3 > 4 > 1

查询灵活程度:4 > 1 = 2 > 3

下面将开始介绍Spring集成MyBatis的配置和使用,项目基于Maven构建,连接Mysql数据库:

一、Maven配置

 1         <!-- Spring Base -->
 2         <dependency>
 3             <groupId>org.springframework</groupId>
 4             <artifactId>spring-beans</artifactId>
 5             <version>4.2.5.RELEASE</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>org.springframework</groupId>
 9             <artifactId>spring-context</artifactId>
10             <version>4.2.5.RELEASE</version>
11         </dependency>
12         <dependency>
13             <groupId>org.springframework</groupId>
14             <artifactId>spring-jdbc</artifactId>
15             <version>4.2.5.RELEASE</version>
16         </dependency>
17         <!-- MySql -->
18         <dependency>
19             <groupId>mysql</groupId>
20             <artifactId>mysql-connector-java</artifactId>
21             <version>5.1.39</version>
22         </dependency>
23         <dependency>
24             <groupId>com.mchange</groupId>
25             <artifactId>c3p0</artifactId>
26             <version>0.9.5.2</version>
27         </dependency>
28         <dependency>
29             <groupId>org.mybatis</groupId>
30             <artifactId>mybatis</artifactId>
31             <version>3.4.1</version>
32         </dependency>
33         <dependency>
34             <groupId>org.mybatis</groupId>
35             <artifactId>mybatis-spring</artifactId>
36             <version>1.3.0</version>
37         </dependency>

关于Spring的包引用,我这里的引用只作为参考,其它web、mvc的包视各业务来引用。如果不用Maven,就自己乖乖引jar包,或者使用其它包管理吧。

二、Spring配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 4
 5     <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
 6         <property name="driverClass" value="com.mysql.jdbc.Driver" />
 7         <property name="jdbcUrl" value="jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxxdb" />
 8         <property name="user" value="lekko" />
 9         <property name="password" value="xxx" />
10         <property name="minPoolSize" value="2" />
11         <property name="maxPoolSize" value="100" />
12     </bean>
13
14     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
15         <property name="mapperLocations" value="classpath:mapper/**/*Mapper.xml" />
16         <property name="dataSource" ref="myDataSource" />
17     </bean>
18
19     <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
20         <property name="basePackage" value="lekko.code.**.dao" />
21     </bean>
22
23 </beans>

这里的配置比较关键。

1、myDataSource是一个ComboPooledDataSource类型的实例bean,它实现了数据库连接池的功能。

2、sqlSessionFactory是MyBatis用于建立查询的工厂实例,它包括了一个mapperLocations定位,以及dataSource数据库连接来源。

- mapperLocations指定了MyBatis将会搜索的路径,支持Ant风格路径。在指定的路径下,MyBatis会把读取其中的xml查询,并将用于后面的dao映射。

- dataSource是来源数据库,这里直接就是前面的连接池。

3、mapperScannerConfigurer是MyBatis用于自动建立数据库dao类的配置器。

- basePackage指定了要扫描的包名称,支持Ant风格路径。在指定的包名称下,MyBatis通过Spring,会自动发现对应包名下的dao接口,在后面需要查询时,为接口提供实现。

下图是MyBatis的大体框架,可以作为上述配置的一个补述:

    也就是说,MyBatis会根据XML配置Mapper去组成数据库查询,然后把查询中所涉及的参数、返回结果,都映射成为Java对象(或元数据类型)。最后交由数据库去执行,返回。

三、dao接口
 1 package lekko.code.test.dao;
 2
 3 import lekko.code.test.model.TestModel;
 4 import org.springframework.stereotype.Repository;
 5
 6 /**
 7  * 测试DAO
 8  */
 9 @Repository
10 public interface TestDao {
11
12     TestModel getTest(String name);
13
14     int addTest(String name);
15
16 }

上面这个接口,由于属于包lekko.code.**.dao,所以会被识别为需要映射的dao。

接口只有两个方法,一个是查询getTest,一个是新增addTest。至于getTest已经根据需要,我这里提取成了一个实体类TestModel:

 1 package lekko.code.test.model;
 2
 3 /**
 4  * 测试数据类
 5  */
 6 public class TestModel {
 7
 8     private int id;
 9     private String name;
10
11     public String getName() {
12         return name;
13     }
14     public void setName(String name) {
15         this.name = name;
16     }
17
18     public int getId() {
19         return id;
20     }
21     public void setId(int id) {
22         this.id = id;
23     }
24
25 }

四、Mapper映射

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3
 4 <mapper namespace="lekko.code.test.dao.TestDao">
 5
 6     <select id="getTest" resultType="lekko.code.test.model.TestModel">
 7         select id, name from Test where name = #{name}
 8     </select>
 9
10     <insert id="addTest">
11         insert into Test (name, createdTime) values (#{name}, now())
12     </insert>
13
14 </mapper>

语法我就不详细解释了,百度一下就有。各种条件、判断、参数都有解释。我本人非常喜欢这种自由度高,sql看起来也很舒服的配置方式。

至此,大体的使用介绍已经完毕。MyBatis还是挺不错的,建议大家在业务合适的情况下试用试用。

转载请注明原址:http://www.cnblogs.com/lekko/p/6367732.html

from: http://www.cnblogs.com/lekko/p/6367732.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

Spring集成MyBatis框架相关推荐

  1. Spring+SpringMVC+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  2. spring mvc + mybatis 框架搭建 ( idea + gradle)

    spring mvc + mybatis 框架搭建 idea + gradle 刚刚入门,只是个人见解,如有错误或者问题欢迎指出指正. 邮箱: [ wgh0807@qq.com ] 文章引用: [ap ...

  3. Spring集成MyBatis

    将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSe ...

  4. SSM + Shiro 整合 (2)- 实现 Spring 集成 MyBatis

    项目源码:https://github.com/weimingge14/Shiro-project 演示地址:http://liweiblog.duapp.com/Shiro-project/logi ...

  5. flink 流式处理中如何集成mybatis框架

    flink 中自身虽然实现了大量的connectors,如下图所示,也实现了jdbc的connector,可以通过jdbc 去操作数据库,但是flink-jdbc包中对数据库的操作是以ROW来操作并且 ...

  6. Spring集成Mybatis,spring4.x整合Mybatis3.x

    Spring集成Mybatis,spring4.x整合Mybatis3.x ============================== 蕃薯耀 2018年3月14日 http://www.cnblo ...

  7. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一) 1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee ...

  8. Spring集成Mybatis多数据源配置

    既然在整理Mybatis那就把经常用的这个多数据源的笔记也整一下吧. Spring集成Mybatis在之前就已经提到了.Spring集成Mybatis 集成Mybatis多数据源有两种方式: 1.创建 ...

  9. [Spring+SpringMVC+Mybatis]框架学习笔记(四):Spring实现AOP

    上一章:[Spring+SpringMVC+Mybatis]框架学习笔记(三):Spring实现JDBC 下一章:[Spring+SpringMVC+Mybatis]框架学习笔记(五):SpringA ...

最新文章

  1. php的修改数据库语句怎么写,php的数据库修改语句是什么
  2. 阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品
  3. 训练日志 2019.1.13
  4. python:threading.Thread类的使用详解
  5. python使用-python使用
  6. [转载] python字符串转化为16进制数_python实用知识,数值类型和进制整数的转换
  7. Eclipse 4.7(Oxygen)安装Tomcat Plugin 后没有小猫图标解决方法
  8. cognos java,cognos10用JAVA如何获取passPortID(即实现单点登录)
  9. 英雄联盟一直连接服务器win10,手把手修复win10系统英雄联盟连接不上服务器的解决方法...
  10. 自建公众号服务器开发教程,01-微信公众号开发入门篇
  11. 网站设计65条原则 作者:小柯
  12. 期货期权股票资管分仓系统(子账户系统、风控系统)的功能介绍
  13. 信息收集--关联信息及漏洞情报
  14. Python每日一报
  15. android首页广告倒计时,(安卓APP)简单的首页广告倒计时实现代码
  16. Java自学.接口学习笔记!
  17. b64_c3VuJTIwYm95 好看的电影推荐
  18. 什么是接口及其关键点
  19. Volley 登录注册
  20. 报表模板哪里有?在线报表系统可以下载

热门文章

  1. Linux定时增量更新文件--转
  2. 根据 UserAgent 判断网页是在浏览器、或在微信、或在APP中
  3. 李宏毅深度学习——Why Deep?
  4. 【风险管理】策略开发流程
  5. elasticsearch实战三部曲之三:搜索操作
  6. 区块链开源实现fabric快速部署及CLI体验
  7. Sharepoint
  8. Docker Review - docker部署Tomcat Nginx
  9. Java 8 - Lambda从兴趣盎然到索然无味
  10. Spring Cloud【Finchley】-12使用Hystrix Dashboard实现Hystrix数据的可视化监控