主要内容:

  • What is MyBatis?
  • Why MyBatis?
  • Installing and configuring MyBatis
  • Sample domain model

What is MyBaits?

MyBatis是一个开源持久化框架,用于简化持久层的实现。Mybatis可以减少很多JDBC相关的模板样式代码,还提供了方便使用的数据库API。

MyBatis发展自iBATIS,但是MyBatis 3对iBATIS进行了彻底的重构,从而可以使用注解(annotations)和映射器(Mappers)。

简洁的设计和易用性使得MaBatis在J2EE开发中很快流行起来。在Java应用中,持久层的工作包括:将SQL语句从数据库中查询出的数据填充进Java对象中、使用SQL语句将Java对象中的数据保存进数据库。

MyBatis提供了下列特性来简化SQL查询:(1)抽象底层的JDBC代码;(2)自动将SQL查询的结果集保存进对应的Java对象;(3)从Java对象中提取数据并存入数据库中对应的表。

Why MyBatis?

企业级应用开发领域有很多持久化开发框架,MyBatis能够脱颖而出的原因在于:

  • 减少了很多JDBC的模板样式代码;
  • 学习曲线低;
  • 可以很好地适配遗留数据库;
  • 开发者需要自己写SQL语句;
  • 可以和Spring、Guice等框架整合使用;
  • 支持第三方缓存库;
  • 具备良好的性能。

减少JDBC的模板样式代码

关于JDBC代码的冗长,可以参考Spring实战6-利用Spring和JDBC访问数据库一文中用过的例子。

直接使用JDBC的API,会有很多重复代码:创建连接、创建statement、设置输入参数,最后还需要关闭资源。MyBatis将这些通用功能抽象出来单独完成,以便开发者可以专注于真正重要的事情,包括书写SQL语句、构建Java对象等。

除了这些,MyBatis可以自动完成两个工作:把Java对象中的属性设置进SQL字符串的查询参数、利用SQL查询结果集的数据构造Java对象。实现方法如下:

  1. 在SQL Mapper配置文件中(StudentMapper.xml)配置查询语句

    <select id="findStudentById" parameterType="int" resultType="Student">SELECT STUD_ID AS studId, NAME , EMAIL, DOBFROM STUDENTS WHERE STUD_ID=#{Id}
    </select>
    <insert id="insertStudent" parameterType="Student">INSERT INTO STUDENTS(STUD_ID, NAME, EMAIL, DOB)VALUES (#{studId}, #{name}, #{email}, #{dob})
    </insert>
  2. 创建StudentMapper接口
    public interface StudentMapper {Student findStudentById(Integer id);void insertStudent(Student student);
    }
  3. 在Java代码中的用法如下
    SqlSession session = getSqlSessionFactory().openSession();
    StudentMapper mapper = session.getMapper(StudentMapper.class);
    // select Student by Id
    Student student = mapper.selectStudentById(1);
    // To insert a Student record
    mapper.insertStudent(student);

可以看出,如果使用MyBatis框架,开发者不需要自己管理资源和处理异常,因为MyBatis会替你完成这些工作。除此之外,MyBatis还提供了其他特性,也可以简化持久层的实现:

  • 支持复杂SQL结果集到复杂对象的映射;
  • 支持1-1和1-n映射,将结果集中的数据映射到Java对象中;
  • 支持基于输入数据构建动态SQL查询。

学习曲线低

MyBatis的学习曲线很低,如果开发者之前熟悉Java和SQL开发,则只需要稍作学习就可以在项目中使用MyBatis。

可以很好地适配遗留数据库

有时候,我们需要使用不规范的遗留数据库。在维护老服务时经常遇到这种情况,使用类似Hibernate的ORM框架会非常麻烦,因为这类框架试图将Java对象映射到数据库中的表格里。

MyBatis可以自动将查询结果映射到Java对象中,这个特性使得MyBatis非常适合使用遗留数据库。

拥抱SQL语句

完全的ORM框架,例如Hibernate鼓励开发者直接使用实体对象,而由框架自动产生SQL语句。正因如此,导致开发者不能使用特定数据库的优化特性。Hibernate也允许开发者写SQL语句,但这又违背了“持久层应该与数据库独立”的承诺。

MyBatis让开发者自己写SQL语句,因此可以利用特定数据库的优化特性,例如支持使用数据库存储过程。

支持使用第三方缓存库

MyBatis本身支持在SqlSession层面缓存SELECT查询结果。除此之外,MyBatis也支持使用其他第三方缓存,例如EHCache、OSCache和Hazelcast。

更好的性能

大型企业级应用必须具备良好的性能。在性能分析时,一般使用调用链路分析法:业务操作、缓存操作和持久层。持久层的性能经常会成为应用的性能瓶颈。

  • MyBatis支持使用数据库连接池,从而避免为每个查询请求创建数据库连接;
  • MyBatis拥有内置的缓存机制,可以在SqlSession层面缓存SQL查询的结果——如果你在执行一个select查询之后不久又再次遇到同样的请求,则直接返回缓存区中的数据,从而节省一次数据库查询。
  • MyBatis并没有大量使用代理,因此比其他大量使用代理的ORM框架有更好的性能。

注意:在软件开发中没有万能的工具。每个应用场景都有不同的需求,我们应该根据具体的应用场景选择要使用的语言和框架。上文中讲了很多MyBatis的优势,不过,也有一些情况下并不适合使用MyBatis。如果应用是基于对象模型驱动并想动态生成SQL语句;另外,如果开发者希望在应用中使用透明的事务处理机制(持久化父对象的同时也持久化与之关联的子对象),这两种情况下都比较适合使用Hibernate。

安装和配置MyBatis

  1. 在数据库中创建students表,并插入例子数据;

    create table students
    (
    stud_id int(11) not null auto_increment,
    name varchar(50) not null,
    email varchar(50) not null,
    dob date default null,
    primary key (stud_id)
    ) engine=InnoDB auto_increment=1 default charset=latin1;
    insert into students(stud_id, name, email, dob)
    values(1, 'Student1', 'student1@gmail.com', '1983-06-25');
    insert into students(stud_id, name, email, dob)
    values(2, 'Student2', 'student2@gmail.com', '1983-06-25');
  2. 创建一个maven项目,配置jar依赖项,pom文件的内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.javadu</groupId><artifactId>leanMybatis</artifactId><version>1.0-SNAPSHOT</version><dependencyManagement><dependencies><dependency><groupId>io.spring.platform</groupId><artifactId>platform-bom</artifactId><version>2.0.1.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-framework-bom</artifactId><version>4.2.4.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version><scope>runtime</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.13</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.13</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
    </project>

    然后,在resources目录下创建log4j.properties文件,填入如下内容:

    log4j.rootLogger = DEBUG, stdout
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = %d[%-5p] %c - %m%n
  3. 创建mybatis-config.xmlStudentMapper.xml配置文件,mybatis-config.xml作为MyBatis的主配置文件,用于定义数据库连接、类型别名等等;StudentMapper.xml配置文件包含操作students表的SQL语句。

    • 首先,mybatis-config.xml文件的内容列举如下:

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE configurationPUBLIC "-//mybatis.org/DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
      <configuration>
      <typeAliases><typeAlias type="com.javadu.domain.Student" alias="Student" />
      </typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/mybatis" /><property name="username" value="root" /><property name="password" value="root" /></dataSource></environment>
      </environments><mappers><mapper resource="mybatis/mappers/StudentMapper.xml" />
      </mappers>
      </configuration>
    • 然后,StudentMapper.xml文件的内容列举如下:

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapperPUBLIC "-//mybatis.org/DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="mybatis.mappers.StudentMapper">
      <resultMap id="studentResult" type="Student"><id property="studId" column="sutd_id" /><result property="name" column="name" /><result property="email" column="email" /><result property="dob" column="dob" />
      </resultMap><select id="findAllStudents" resultMap="studentResult">SELECT * FROM students
      </select><select id="findStudentById" parameterType="int" resultType="Student">SELECT stud_id as studid, name, email, dobFROM studentsWHERE stud_id=#{id}
      </select><insert id="insertStudent" parameterType="Student">INSERT INTO students(stud_id, name, email, dob)VALUES (#{studId}, #{name}, #{email}, #{dob})
      </insert>
      </mapper>

Mybatis 3学习笔记(一)相关推荐

  1. mybatis框架--学习笔记(下)

    上篇:mybatis框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81034021 8.高级映射: (1)一对一查询: ①使 ...

  2. mybatis框架--学习笔记(上)

    使用JDBC操作数据库的问题总结: (1)数据库连接,使用时创建,不使用时立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能. 设想:使用数据库连接池管理数据库连接. (2) ...

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

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

  4. 2021年3月8日:MyBatis框架学习笔记02:利用MyBatis实现CRUD操作

    MyBatis框架学习笔记02:利用MyBatis实现CRUD操作 在第一节课中我们在UserMapper.xml里定义了两个查询语句:findById和findAll,对应的在UserMapper接 ...

  5. 【Mybatis】学习笔记01:连接数据库,实现增删改

    需要数据库SQL的请跳转到文末 哔哩哔哩 萌狼蓝天[转载资料][尚硅谷][MyBatis]2022版Mybatis配套MD文档[Mybatis]学习笔记01:连接数据库,实现增删改[Mybatis]学 ...

  6. MyBatis框架学习笔记(3)——B站动力节点

    文章目录 (0)介绍 (1)返回主键的标签 (2)UUID的概念 (3)update时< set >标签的使用 (4)表与表的关联关系 一对多关联 多对一关联 一对一关联 多对多关联 (5 ...

  7. Mybatis的学习笔记

    MyBatis Mybatis是一款非常优秀的持久层框架,学习的目的是要掌握精通. 那么今天我们就来学习一下这个优秀的框架知识! 此外,由于博主的水平的原因,文章的质量可能不会太高,请酌情观看.如果大 ...

  8. 【自用】Mybatis的学习笔记(第一天)

    捋一下啊 记录一下我总结的经验 我的笔记记录的层次很烂 所以我要在xmind上把层次记录下来 然后按着xmind 层次去敲代码 哪里出了问题,直接去ctrl+f 好了,他妈的开始学习了 ORM 框架 ...

  9. 1 (SSM) springMVC + spring + Mybatis(MySQL)学习笔记 ------ 阶段成果笔记

    学习了一段时间spring,springMVC和Mybatis,从开始学到现在熬了好多夜晚,好几个深夜和bug作战,真是难受. 打算写系列学习笔记,第一篇从一个小的成果说起吧,刚刚学的看这篇可能有点吃 ...

最新文章

  1. mysql在建站起什么作用_数据库操作对比:Sql Server与MYSQL相比有哪些建站优势?...
  2. charles 代理手机连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需...
  3. 上云上的差点破产是什么体验?
  4. 改变Android ProgressBar样式颜色
  5. 爬虫之proxy(代理)
  6. android 流量统计不准确_汽车里程表上显示的百公里油耗准确吗?是不是真的是欢乐表...
  7. 关于程序工作者的规划与思考
  8. 学习笔记--------分布式事务产生的场景
  9. python打印长方形_利用python打印出菱形、三角形以及矩形的方法实例
  10. Project Euler Problem 10-Summation of primes
  11. 使用spring session+redis技术,解决负载均衡下的session共享问题
  12. 爱创课堂每日一题第四十八天- html5有哪些新特性、移除了那些元素?
  13. 【Python】Qt国际化ts文件转excel文件(xml转excel)
  14. 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航
  15. 3COM TFTP 3CDaemon中文绿色版
  16. Stacked Conditional Generative Adversarial Networks for Jointly Learning Shadow Detection and Shadow
  17. 第5章 域内横向移动分析及防御
  18. 询问HTG:升级Xbox 360 HDD,头痛免费的圣诞灯修复和剥离Kindle DRM
  19. 简单的tcpdump抓包使用总结:抓取指定ip、指定网卡、指定端口的包
  20. 用python语言写小程序_小程序用什么语言开发?python语言开发可以开发吗?

热门文章

  1. Nginx--------地址重写
  2. 过程 oracle 写在哪里,Oracle怎么写存储过程? 在什么地方写以及怎么调用?最好给个Sample 急(2)...
  3. 谷歌54量子计算机,量子计算机要来了:谷歌开发了一种名为“ Sycamore”的新型54比特处理器,其200秒产生的输出将需要世界上最快的超级计算机10,000年 - googleblog...
  4. java query接口_「软帝学院」Java零基础学习详解
  5. python不换行_Python print 输出时不换行
  6. web浏览器_你最常用的web测试-浏览器兼容性测试
  7. IIS6下PHP的ISAPI和FastCGI性能比较 期待ii7
  8. 埃洛等级分系统【转自百度百科】
  9. simple go web application 二维码生成 打包部署
  10. vue 使用sass 和less