对象关系映射,简称ORM,或O/RM,或O/R Mapping。用于实现面向对象编程语言里不同对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实创建了一种可在编程语言里使用“虚拟对象数据库”。功能类似于SSH中的Hibernate。
隐藏了数据库访问细节
“封闭”的通用数据库交互。它使得我们通过数据库交互变的简单,并且完全不用考虑SQL语句。
使构造固化数据结构变的简单
在ORM年表的史前时代,我们需要将我们的对象模型转化为一条一条的SQL语句,通过直连或是DB helper在关系数据库构造我们的数据库体系(对象-->数据库)。而现在,基本上所有的ORM框架都提供了通过对象模型构造关系数据库结构的功能。这,相当不错。
是一个java持久成框架。提供的持久层框架包括SQL Maps和Data Access Object(DAO)。原来属于Apache的一个开源项目iBatis,2010年,这个项目有apache Software Foundation迁移到google code,并且改名为MyBatis。2013年11月迁移到Github。iBatis来源于“internet”和“abatis(有刺铁丝网)”。
功能说明:
MyBatis是一个支持普通sql查询,存储过程和高级映射的优秀持久层框架。消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或者朱姐用于配置和原始映射,将接口和Java的POJO(Plain Old Java Object,普通的Java对象)映射成数据库中的记录。
我们把Mybatis的功能架构分为三层:
(图片来自网易云课堂allen老师)
每次执行一个update或者query(Mybatis中只有这两种:读和写),就开启一个Statement对象,用完就关闭。
对Statement对象的重用。Statement保存在一个Map中。
只执行update(),它缓存了多个statement对象。因为JDBC中不支持批量查询。每个Statement都是addBatch()之后,等待executorBatch()批处理。
该方式类似于Hibernate中的表--->实体对象模型
进入到cmd命令提示符窗口中,cd命令进入到工具根目录后输入命令:java –jar mybatis-generator-core-1.3.2.jar –configfile generatorConfig.xml –overwrite回车,然后jar包会自动按照generatorConfiguration.xml配置中生成代码
在xml对应的sq传入的参数类型是java.util.Map
在代码中定义一个Map,要注意的是Map的key是与xml中的sql使用的参数名称要一一对应
比如: Map
arguMap.put("name","sfsdfsd")
arguMap.put("age",12)
select * from people wherer user_name = #{name} and age >#{age}
模糊查询:
SELECT * FROM user WHERE name like CONCAT('%',#{name},'%')
select * from T_PRINT_LAYOUT where D_RECID = ${recId}
最后生成的SQL为:
select * from T_PRINT_LAYOUT where D_RECID = 1
即:直接将参数值替换到了原来${recId}的位置,相当于硬拼SQL
select * from T_PRINT_LAYOUT where D_RECID = #{recid,jdbcType=DECIMAL}
最后生成的SQL为:
select * from T_PRINT_LAYOUT where D_RECID = ?
即:#{…}被识别为一个SQL参数(推荐)
xml version="1.0" encoding="UTF-8" ?>
DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="true" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25000" />
<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>
<typeAlias alias="pageAccessURL" type="com.lgm.mybatis.model.PageAccessURL" />
typeAliases>
<typeHandlers>
<package name="com.xhm.util" />
typeHandlers>
<plugins>
<plugin interceptor="com.xhm.util.PageInterceptor">plugin>
plugins>
<environments default="development">
<environment id="development1">
<transactionManager type="JDBC" />
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/xhm" />
<property name="username" value="root" />
<property name="password" value="root" />
dataSource>
environment>
<environment id="development2">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/xhm" />
<property name="username" value="root" />
<property name="password" value="root" />
<property name="poolMaximumActiveConnections" value="10" />
<property name="poolMaximumIdleConnections" value="5" />
<property name="poolMaximumCheckoutTime" value="20000" />
<property name="poolTimeToWait" value="20000" />
<property name="poolPingQuery" value="NO PING QUERY SET" />
<property name="poolPingEnabled" value="false" />
<property name="poolPingConnectionsNotUsedFor" value="0" />
dataSource>
environment>
<environment id="development3">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property name="data_source" value="java:comp/env/jndi/mybatis" />
<property name="env.encoding" value="UTF8" />
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/xhm/mapper/UserMapper.xml" />
<package name="com.xhm.mapper" />
mappers>
configuration>