全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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配置

<!-- Spring Base -->
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-beans</artifactId>
 <version>4.2.5.RELEASE</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>4.2.5.RELEASE</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>4.2.5.RELEASE</version>
 </dependency>
 <!-- MySql -->
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.39</version>
 </dependency>
 <dependency>
 <groupId>com.mchange</groupId>
 <artifactId>c3p0</artifactId>
 <version>0.9.5.2</version>
 </dependency>
 <dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>3.4.1</version>
 </dependency>
 <dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis-spring</artifactId>
 <version>1.3.0</version>
 </dependency>

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

二、Spring配置

<?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="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
 <property name="driverClass" value="com.mysql.jdbc.Driver" />
 <property name="jdbcUrl" value="jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxxdb" />
 <property name="user" value="lekko" />
 <property name="password" value="xxx" />
 <property name="minPoolSize" value="2" />
 <property name="maxPoolSize" value="100" />
 </bean>
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 <property name="mapperLocations" value="classpath:mapper/**/*Mapper.xml" />
 <property name="dataSource" ref="myDataSource" />
 </bean>
 <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 <property name="basePackage" value="lekko.code.**.dao" />
 </bean>
</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接口

package lekko.code.test.dao;
import lekko.code.test.model.TestModel;
import org.springframework.stereotype.Repository;
/**
 * 测试DAO
 */
@Repository
public interface TestDao {
 TestModel getTest(String name);
 int addTest(String name);
}

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

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

package lekko.code.test.model;
/**
 * 测试数据类
 */
public class TestModel {
 private int id;
 private String name;
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
}

四、Mapper映射

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

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

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# Spring  # MyBatis  # 详解Http请求中Content-Type讲解以及在Spring MVC中的应用  # 深入理解Spring Boot的日志管理  # spring mvc中的@PathVariable获得请求url中的动态参数  # Spring Boot统一异常处理详解  # 详解Spring中的JavaConfig注解  # SpringMVC实现controller中获取session的实例代码  # SpringMVC实现注解式权限验证的实例  # spring mvc 和ajax异步交互完整实例代码  # Spring中@Async用法详解及简单实例  # 连接池  # 的是  # 都是  # 数据库查询  # 是一个  # 我就  # 都有  # 成了  # 将会  # 在这  # 就有  # 一是  # 可以用  # 帮你  # 最喜欢  # 也很  # 并将  # 实体类  # 要对  # 所做 


相关文章: 如何高效配置香港服务器实现快速建站?  淘宝制作网站有哪些,淘宝网官网主页?  建站之星如何快速更换网站模板?  建站之星多图banner生成与模板自定义指南  如何用虚拟主机快速搭建网站?详细步骤解析  长沙企业网站制作哪家好,长沙水业集团官方网站?  免费视频制作网站,更新又快又好的免费电影网站?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  电商网站制作公司有哪些,1688网是什么意思?  如何通过西部建站助手安装IIS服务器?  如何做静态网页,sublimetext3.0制作静态网页?  存储型VPS适合搭建中小型网站吗?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  Thinkphp 中 distinct 的用法解析  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  建站之星后台管理如何实现高效配置?  如何在服务器上配置二级域名建站?  平台云上自助建站如何快速打造专业网站?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  制作宣传网站的软件,小红书可以宣传网站吗?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  如何在阿里云香港服务器快速搭建网站?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  智能起名网站制作软件有哪些,制作logo的软件?  如何零基础在云服务器搭建WordPress站点?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  大同网页,大同瑞慈医院官网?  图册素材网站设计制作软件,图册的导出方式有几种?  建站之星免费模板:自助建站系统与智能响应式一键生成  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何在Golang中指定模块版本_使用go.mod控制版本号  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?    建站之星如何实现PC+手机+微信网站五合一建站?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  如何用搬瓦工VPS快速搭建个人网站?  建站主机系统SEO优化与智能配置核心关键词操作指南  建站之星如何保障用户数据免受黑客入侵?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在景安服务器上快速搭建个人网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  ,怎么用自己头像做动态表情包?  MySQL查询结果复制到新表的方法(更新、插入)  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。