Mybatis系列笔记一——ORM(对象关系映射)

ORM

  • 概念
    ORM,Object-Relationl Mapping,对象关系映射,它的作用是在关系型数据库和对 象之间作一个映射处理
  • 开发痛点
    JDBC 的缺点:需要手动的完成面向对象的 Java 语言、面向关系的数据库之间数据的转换,代码繁琐无技术含量,影响了开发效率
  • ORM给出的方案
    关于面向对象的 Java 语言、面向关系的数据库之间数据的转换必须要做,问题在于这个转换是否可以不由开发者来做?答案是可以的。ORM 框架就是专门来解决这个问题的, 相当于在面向对象语言和关系数据库之间搭建一个桥梁。这样我们在具体的操作数据库的时 候,只要像平时操作对象一样操作它就可以了,ORM 框架会根据映射完成对数据库的操作, 就不需要再去和复杂的 SQL 语句打交道了

Mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使 用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Ordinary Java Object,普通的 Java 对象)映射成数据库中的记录。 简单的说:MyBatis 是一个半自动 ORM 框架,其本质是对 JDBC 的封装。使用 MyBatis 重点需要程序员编写 SQL 命令,不需要写一行 JDBC 代码
因为 MyBatis 具有封装少、映射多样化、支持存储过程、可以进行 SQL 语句优化等特点,符合互联网高并发、大数据、高性能、高响应的要求,使它取代 Hibernate 成 为了Java 互联网中首选的持久框架

Mybatis配置文件

在 Mybatis 中配置文件有两种

  • 全局配置文件
  • 映射配置文件

全局配置文件

全局配置文件的名称是自定义的,在 JavaProject 项目中需要放到 src 目录下
全局配置文件的作用是完成一些全局性的配置,如:

  • 对 Mybatis 框架的设置
  • 别名设置
  • 环境设置
  • 指定映射配置文件等相关配置
 DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 
configuration>

properties 标签

Mybatis 配置文件中的属性定义。properties 标签中允许内部定义属性,也可以是外部的 properties 文件定义属性。无论是内部定义还是外部定义,都可以使用${name}获取值

  • 配置文件中内部定义
<properties> 
	<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/> 	
	<property name="jdbc.url" value="jdbc:mysql://localhost:3306/lanh"/> 
	<property name="jdbc.username" value="root"/> 
	<property name="jdbc.password" value="root"/> properties>
  • 配置文件中外部定义
<properties resource="db.properties">properties>

settings 标签

setting 标签的配置是配置 MyBatis 框架运行时的一些行为的,例如缓存、延迟加载、 结果集控制、执行器、分页设置、命名规则等一系列控制性参数,其所有的 setting 配置都放在父标签 settings 标签中

下面仅仅是举个例子,只需要知道settings的作用即可,需要用的时候再去查文档

<settings> 
	<setting name="cacheEnabled" value="true"/> 
	<setting name="lazyLoadingEnabled" value="true"/> 
	<setting name="multipleResultSetsEnabled" value="true"/> 
	<setting name="useColumnLabel" value="true"/> 
	<setting name="useGeneratedKeys" value="false"/>
	<setting name="autoMappingBehavior" value="PARTIAL"/> 
	<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> 
	<setting name="defaultExecutorType" value="SIMPLE"/> 
	<setting name="defaultStatementTimeout" value="25"/> 
	<setting name="defaultFetchSize" value="100"/> 
	<setting name="safeRowBoundsEnabled" value="false"/> 
	<setting name="mapUnderscoreToCamelCase" value="false"/> 
	<setting name="localCacheScope" value="SESSION"/> 
	<setting name="jdbcTypeForNull" value="OTHER"/> 
	<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> 
settings>

typeAliases 标签

类型别名可为 Java 类型设置一个缩写名字

<typeAliases> <typeAlias alias="user" type="com.lanh.pojo.User" /> typeAliases>

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

<typeAliases> <package name="com.lanh.pojo"/> typeAliases>

environments 标签

MyBatis 可以配置多个环境。这可以帮助你 SQL 映射对应多种数据库等。比如说,想为 开发、测试、发布产品配置不同的环境

<environments default="development"> 
	<environment id="development"> 
		<transactionManager type="JDBC"/> 
		<dataSource type="POOLED"> 
			<property name="driver" value="${jdbc.driver}"/> 
			<property name="url" value="${jdbc.url}"/> 
			<property name="username" value="${jdbc.username}"/> 
			<property name="password" value="${jdbc.password}"/> 
		dataSource> 
	environment> 
	<environment id="test"> 
		<transactionManager type="JDBC"/> 
		<dataSource type="POOLED"> 
			<property name="driver" value="${jdbc.driver}"/> 
			<property name="url" value="${jdbc.url}"/> 
			<property name="username" value="${jdbc.username}"/> 
			<property name="password" value="${jdbc.password}"/> 
		dataSource> 
	environment>	 
environments>
  • transactionManager 节点
    事务处理器。 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]") JDBC :这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来 管理事务作用域。 MANAGED :不做事务处理
  • dataSource 标签
    dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。 UNPOOLED:使用直连。 POOLED:使用池连。 JNDI :使用 JNDI 方式连接

mapper 标签

指定映射配置文件

  • 使用相对于类路径指定映射配置文件
<mappers> 
<mapper resource="com/lanh/mapper/UserMapper.xml"/> 
mappers>
  • 使用 filter:///协议指定映射配置文件
<mappers> 
<mapper url="file:///D:\code\mybatis\src\com\lanh\mapper\UserMapper.xml" />
mappers>
  • 指定映射接口
<mappers> 
<mapper class="com.lanh.mapper.UserMapper"/> 
mappers>
  • 通过包名指定映射接口
<mappers> <package name="com.lanh.mapper"/> mappers>

映射配置文件

映射配置文件主要是用来编写 sql 语句的,结果集的映射关系的指定,以及缓存的一些配置等等