资讯专栏INFORMATION COLUMN

Mybatis学习笔记

jsyzchen / 950人阅读

摘要:学习笔记有官方的中文开发文档并且针对使用者比较友好是一款优秀的持久层框架,它支持定制化存储过程以及高级映射。它只和配置有关,存在的意义仅在于用来减少类完全限定名的冗余,为了简化中的书写。

Mybatis学习笔记

mybatis有官方的中文开发文档并且针对使用者比较友好:http://www.mybatis.org/mybatis-3/zh/

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

在mybatis中有这么几个需要关注的点:
mybatis的配置文件mybatis-config.xml
properties 属性
settings 设置
typeAliases 类型别名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
databaseIdProvider 数据库厂商标识
mappers 映射器

这是mybatist配置文件中需要配置的属性, 有些属性可以配置,有些属性可以不配置, 但是所有的属性配置按照以上的顺序进行, 否则会出现配置错误。

首先是对properties的配置,可以引入 .properties 文件,作为信息,例如jdbc.properties

 
 
 
 

jdbc.properties中的内容

jdbc.username=root
jdbc.password=root
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_mybatis_demo?serverTimezone=GMT&useSSL=false

如果使用这种方式配置最好加上jdbc.xxxx避免与编辑器或系统变量产生冲突,以致于连接数据库失败。

如果直接在 properties 元素体内指定属性值也是可以的,,以上配置的方式作为第二种方式, 还可以通过java代码的方式来引入配置。属性也可以被传递到 SqlSessionFactoryBuilder.build()方法中,

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);

// ... or ...

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);

这以上的三种方式优先级递增, 如果同时配置了,将会使用最后一种中的值。(推荐使用第二种方式),另外还有默认值配置, 详见文档。

下面是对 setting 的讲解

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。setting有诸多属性, 官方文档中对这些属性有详尽的介绍, 按需配置。例如:

 
    

typeAliases 别名

类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余,为了简化xxxMapper.xml中的书写。例如

mybatis-config.xml


    

UserMapper.xml

 

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:


  

这里有一点值得注意的是Mapper.xml中得明明空间不能使用别名, 只能使用类路径名,例如:


    

typeHandlers 类型处理器

使用这个的类型处理器将会覆盖已经存在的处理 Java 的 String 类型属性和 VARCHAR 参数及结果的类型处理器。 要注意 MyBatis 不会窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 VARCHAR 类型的字段, 以使其能够绑定到正确的类型处理器上。 这是因为:MyBatis 直到语句被执行才清楚数据类型。(这个我在后面的demo中使用了用的是枚举类型的SexEnum)

objectFactory 对象工厂

(没有使用过,详见官方文档)

plugins 插件

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。
这里我使用了 pagehelper 分页的插件,地址是https://pagehelper.github.io/

 

    
    
        
        
    

environments 配置环境

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。

 

    
        
        
            
            
            
            
        
    


默认的环境 ID(比如:default=”development”)。
每个 environment 元素定义的环境 ID(比如:id=”development”)。
事务管理器的配置(比如:type=”JDBC”)。
数据源的配置(比如:type=”POOLED”)。

由于mybatis少多带带使用, 大多情况下会结合spring使用, 所以我们并不用太关系他的事务管理,因为spring会做这件事。

Mapper映射器

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。


    com/ultrapower/practice.mybatis/mapper/UserMapper.xml

文档中有几种不同的方式, 请选用适合你的方式。

Mapper XML 文件

select

insert

update

delete

这四个语句是最长用的几个语句,在文档中应用的属性有详细的说明。这里有个例子:


需要注意的一点是在使用username的时候对 username进行了一次判断, 这里不仅需要判断username是否为null, 还要判断是否为 "",但是一般会错写为 就是双引号和单引号的问题,同时最好为#{username}加上jdbcType(避免有允许为空的列而不知道参数类型),javaType就一般无需指定了,因为mybatis会根据你传来的对象自行判断是什么类型的值,除非你传的值是一个hashmap

另外还需要对大于小于等符号进行转义, 如上述age的操作。

<还没有看resultmap的高级映射>

动态sql

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
foreach

动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候。

在mybatis中还有两个符号需要注意:

1. 符号#{} 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。
2. 一个 #{ } 被解析为一个参数占位符 ? 。
3. ${} 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换
4. 表名作为变量时,必须使用 ${}
5. 能用#{}就用#{},因为它会对sql进行预编译, 可以提高性能。     

针对以上的所讲的功能实现了一个demo,只包含mybatis的相关内容:
在这可以去github下载源码
集合、高级映射、handlerType(后面补)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68462.html

相关文章

  • mybatis 学习笔记1

    摘要:要想使用需要在的中导入包和的驱动包每个基于的应用都是以一个的实例为中心的的实例可以通过获得则可以从配置文件或一个预先定制的的实例构建出的实例配置文件中包含了对系统的核心设置,包含获取数据库连接实例的数据源和决定事务作用域和控制方式的事 1 要想使用mybatis 需要在maven的pom.xml中导入jar包和mysql的驱动包 org.mybatis ...

    xiangzhihong 评论0 收藏0
  • JAVA学习笔记036-第一个简单的Mybatis程序(代码经验证)

    摘要:目标创建一个简单的框架的程序,实现对数据库的读取操作。的核心配置文件核心配置文件,配置数据库连接信息事物等每一个都需要在核心配置文件中注册工具类获取第一步获取对象既然有了,顾名思义,我们可以从中获得的实例。 ...

    itvincent 评论0 收藏0
  • Spring Boot学习笔记(五)整合MyBatis实现数据库访问

    摘要:关闭进程问题顺利解决。问题泄也是一个奇葩的问题,百度一下,原来碰到的人挺多,原因就是高版本的驱动会有数据库和系统时区差异我用的版本是,所以碰到了,修改下配置,执行时区就可以了或者用回版本,该版本不会存在时区问题。 本文主要在上一篇Spring Boot学习笔记(四)构建RESTful API标准工程实例的基础上,整合MyBatis,实现简单的MySql数据库访问 引入依赖 这里主要依赖...

    Tony 评论0 收藏0
  • Spring Boot学习笔记(六)结合MyBatis实现较为复杂的RESTful API

    摘要:前两篇已经构建了标准工程实例,也整合了实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库的标准服务。到这里,最复杂的数据访问基本就算编写完了。 前两篇已经构建了RESTful API标准工程实例,也整合了MyBatis实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库CRUD的标准服务。 首先看下要实现的效果吧,完成下面截图部分的API,除了CRUD之外...

    CntChen 评论0 收藏0
  • Mybatis学习笔记(一)——基本的CRUD操作

    摘要:将语句硬编码到代码中,修改语句需要重新编译代码设想使用配置文件配置。从结果集中遍历数据的时候存在硬编码。表示一个拼接符号,会引用注入,所以不建议使用。和表示查询出一条记录进行映射。 MyBatis是什么 mybatis是托管在github上的ORM框架,让程序员将主要精力放在SQL上,通过mybatis提供映射方式,自由灵活(SQL的可定制性较高,半自动化)生成满足需求的SQL语句。m...

    evin2016 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<