第2章 MyBatis配置详解与API介绍(理论)_第1页
第2章 MyBatis配置详解与API介绍(理论)_第2页
第2章 MyBatis配置详解与API介绍(理论)_第3页
第2章 MyBatis配置详解与API介绍(理论)_第4页
第2章 MyBatis配置详解与API介绍(理论)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章

MyBatis配置详解与API介绍本章内容Mybatis的结构与原理Mybatis配置文件详解SQL映射文件详解MybatisAPI介绍本章目标理解mybatis的运行流程掌握mybatis的配置掌握mybatis的映射文件理解mybatis中的重要的类Mybatis的结构与原理MyBatis执行总体流程:(1)加载配置(2)SQL解析(3)SQL执行(4)结果映射MyBatis功能架构API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一旦接收到调用请求就会调用数据处理层来完成具体的数据处理。数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。其主要的目的是根据调用的请求完成一次数据库操作。基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的资源,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支持。MyBatis配置文件配置文件的结构配置文件的元素properties该元素是外部化的、可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递。例如:

<propertiesresource="org/mybatis/example/perties"><propertyname="username"value="dev_user"/><propertyname="password"value="F2Fa3!33TYyg"/></properties>其中的属性值就可以在整个配置文件中使用,使用可替换的属性来实现动态配置。例如:

<dataSourcetype="POOLED"><propertyname="driver"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${username}"/><propertyname="password"value="${password}"/></dataSource>Settings该元素是极其重要的参数设置,它们会修改MyBatis在运行时的行为方式。

<settings>

//对在此配置文件下的所有cache进行全局性开/关设置,默认true<settingname="cacheEnabled"value="true"/>//全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载,默认true<settingname="lazyLoadingEnabled"value="true"/>//允许和不允许单条语句返回多个数据集(取决于驱动需求)默认true<settingname="multipleResultSetsEnabled"value="true"/>//使用列标签代替列名称。默认true<settingname="useColumnLabel"value="true"/>//允许JDBC生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,//有一些驱动器不兼容不过仍然可以执行,默认false<settingname="useGeneratedKeys"value="false"/>//是否需要POJO启动Java字节码增强功能,可以提升getter/setter的调用效能避免Java反射所带来的性能开销<settingname="enhancementEnabled"value="false"/>//配置和设定执行器,SIMPLE执行器执行其它语句。REUSE执行器可能重复使用preparedstatements语句,BATCH执行器可以重复执行语句和批量更新。默认为simple<settingname="defaultExecutorType"value="SIMPLE"/>//设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时<settingname="defaultStatementTimeout"value="25000"/></settings> typeAliases类型别名即为Java类型命名一个短的名称。它仅同XML配置有关,只用于减少类完全限定名的多余部分。<typeAliases><typeAliasalias="Author"type="domain.blog.Author"/><typeAliasalias="Blog"type="domain.blog.Blog"/></typeAliases>声明别名后,可以在映射器中使用:<insertid="insert"useGeneratedKeys="true" parameterType="Author">内置类型别名Mybatis还内置了一些类型别名:别名 映射的类型_byte byte_long long_short short_int int_integer int_double double_float float_boolean booleanstring Stringbyte Bytelong Longshort Shortint Integerinteger Integerdouble Doublefloat Floatboolean Booleandate Datedecimal BigDecimalbigdecimal BigDecimalobject Objectmap Maphashmap HashMaplist Listarraylist ArrayListcollection Collectioniterator IteratortypeHandlers<typeHandlers>:每当MyBatis设置参数到PreparedStatement或者从ResultSet结果集中取得值时,就会使用TypeHandler来处理数据库类型与java类型之间转换。BooleanTypeHandler java.lang.Boolean,boolean 任何兼容的布尔值ByteTypeHandler java.lang.Byte,byte 任何兼容的数字或字节类型ShortTypeHandler java.lang.Short,short 任何兼容的数字或短整型IntegerTypeHandler java.lang.Integer,int 任何兼容的数字和整型LongTypeHandler java.lang.Long,long 任何兼容的数字或长整型FloatTypeHandler java.lang.Float,float 任何兼容的数字或单精度浮点型DoubleTypeHandler java.lang.Double,double 任何兼容的数字或双精度浮点型BigDecimalTypeHandler java.math.BigDecimal 任何兼容的数字或十进制小数类型StringTypeHandler java.lang.String CHAR和VARCHAR类型ClobTypeHandler java.lang.String CLOB和LONGVARCHAR类型NStringTypeHandler java.lang.String NVARCHAR和NCHAR类型NClobTypeHandler java.lang.String NCLOB类型ByteArrayTypeHandler byte[] 任何兼容的字节流类型BlobTypeHandler byte[] BLOB和LONGVARBINARY类型DateTypeHandler java.util.Date TIMESTAMP类型DateOnlyTypeHandler java.util.Date DATE类型TimeOnlyTypeHandler java.util.Date TIME类型SqlTimestampTypeHandler java.sql.Timestamp TIMESTAMP类型SqlDateTypeHandler java.sql.Date DATE类型SqlTimeTypeHandler java.sql.Time TIME类型environmentsMyBatis可以配置多种环境(开发环境,测试环境等)。这便于将SQL映射应用于多种数据库之中。<environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><propertyname="driver"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${username}"/><propertyname="password"value="${password}"/></dataSource></environment></environments>transactionManager在MyBatis中,有两种事务管理器类型(即type=”[JDBC|MANAGED]”)(1)JDBC:该配置直接简单地使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。(2)MANAGED:该配置几乎无用。它从来不提交或回滚一个连接,且它会让容器来管理事务的整个生命周期(如Spring或JEE应用服务器的上下文)。默认情况下,它会关闭连接。然而一些容器并不希望这样,因此,如果需要从连接中停止它,则需要将closeConnection属性设置为false。dataSourcedataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。内建数据源类型(即type=”???”)有以下三种:

(1)UNPOOLED//表示不用缓存(2)POOLED//表示已经缓存(3)JNDI:读取其他容器的连接对象(java命名目录接口)mappers既然MyBatis的行为已经由上述元素配置完毕,那么我们现在要定义SQL映射语句。这些语句简单阐述了MyBatis要从哪里寻找映射文件,其余的细节便在每个SQL映射文件中。<mappers><mapperresource="org/mybatis/builder/AuthorMapper.xml"/><mapperresource="org/mybatis/builder/BlogMapper.xml"/><mapperresource="org/mybatis/builder/PostMapper.xml"/></mappers>SQL映射的XML文件SQL映射文件包括以下几个很少的顶级元素(按照它们应该被定义的顺序排序):cache:配置给定命名空间的缓存。cache-ref:从其他命名空间引用缓存配置。resultMap:最复杂,也是最有力量的元素,用于描述如何从数据库结果集中加载对象。sql:可重用的SQL块,也可以被其他语句引用。insert:映射插入语句。update:映射更新语句。delete:映射删除语句。select:映射查询语句。select查询语句是使用MyBatis时最常用的元素之一。当从数据库中取出数据时,会发现将数据存储在数据库中是很有价值的,所以许多应用程序的查询操作相较更改数据操作更多。<selectid=”selectPerson”parameterType=”int”resultType=”hashmap”>//<resultMap>节点配置的idSELECT*FROMPERSONWHEREID=#{id}</select>该语句被称为selectPerson,使用一个int(或Integer)类型的参数,并返回一个HashMap类型的对象,其中的键是列名,值是列对应的值。

ResultMap配置:<resultMaptype="java.util.HashMap"id="cityResult"> <idproperty="cityCode"column="city_code"/> <resultproperty="cityName"column="city_name"/> <resultproperty="stateCode"column="state_code"/> </resultMap>Select中的属性当有多个参数时,可以使用@Param("参数名")来声明,例如 publicList<City>select(@Param("name")Stringname,@Param("state")intstate,@Param("city")Citycity);<insertid="insertAuthor"parameterType="domain.blog.Author">insertintoAuthor(id,username,password,email,bio)values(#{id},#{username},#{password},#{email},#{bio})</insert><updateid="updateAuthor"parameterType="domain.blog.Author">updateAuthorsetusername=#{username},password=#{password},email=#{email},bio=#{bio}whereid=#{id}</update><deleteid="deleteAuthor”parameterType="int">deletefromAuthorwhereid=#{id}</delete>insert、update和delete数据修改语句insert、update和delete在它们的实现中非常相似<insertid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"keyProperty=""useGeneratedKeys=""timeout="20000"><updateid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20000"><deleteid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20000">insert、update和delete的属性sql该元素可以被用于定义可重用的SQL代码段,可以包含在其他语句中。如:

<sqlid=”userColumns”>id,username,password</sql>

上述SQL片段可以被包含在其他语句中。如:

<selectid=”selectUsers”parameterType=”int”resultType=”hashmap”>select<includerefid=”userColumns”/>fromsome_tablewhereid=#{id}</select>resultMapresultMap元素是MyBatis中最重要、最强大的元素。解决列名与属性名称不匹配的问题:<resultMapid="userResultMap"type="User"><idproperty="id"column="user_id"/><resultproperty="username"column="user_name"/><resultproperty="password"column="hashed_password"/></resultMap>其引用语句使用resultMap属性即可(注意,我们去掉了resultType属性)。例如:

<selectid=”selectUsers”parameterType=”int”resultMap=”userResultMap”>selectuser_id,use

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论