51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1684|回复: 0
打印 上一主题 下一主题

MyBatis中映射器Mapper概述

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-2 10:21:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MyBatis真正强大之处在于它的映射器。因为它异常强大并且编写相对简单,不仅比传统编写SQL语句做的更好并且能节省将近95%的代码量
XML中顶级元素汇总
  • cache: 给定命名空间的缓存配置
  • cache-ref: 其他给定命名空间缓存配置的引用
  • resultMap: 最复杂也是最强大的元素,用来描述如何从数据库结果集中加载对象
  • sql: 可以被其他语句引用的重复语句块
  • insert: 映射插入语句
  • update: 映射更新语句
  • delete: 映射删除语句
  • select: 映射查询语句
select
查询语句是MyBatis中使用最多的元素之一。一个简单的查询元素是非常简单的,看如下示例:
<select id="selectPerson" parameterType="int" resultType="hashmap">  SELECT * FROM PERSON WHERE ID = #{id}</select>
这个语句的ID为selectPerson ,并且接受一个int类型的参数,返回一个HashMap类型的对象。其中键名为列名,值为结果行中的对应值。
当然,select元素中有很多属性可以允许我们配置,用以决定每条语句的作用细节:
具体的相关其他属性可以查阅官网:
Mapper XML 文件
insert,update和delete
数据变更语句insert,update和delete的实现都非常接近:
<insert  id="insertAuthor"  parameterType="domain.blog.Author"  flushCache="true"  statementType="PREPARED"  keyProperty=""  keyColumn=""  useGeneratedKeys=""  timeout="20"><update  id="updateAuthor"  parameterType="domain.blog.Author"  flushCache="true"  statementType="PREPARED"  timeout="20"><delete  id="deleteAuthor"  parameterType="domain.blog.Author"  flushCache="true"  statementType="PREPARED"  timeout="20">
具体的相关其他属性可以查阅官网:
Mapper XML 文件
sql
这个元素可以被用来定义可重复的SQL代码段,可以包含在其他语句中。考虑下面这个例子:
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
它可以被包含在其他语句中,比如:
<select id="selectUsers" resultType="map">  select    <include refid="userColumns"><property name="alias" value="t1"/></include>,    <include refid="userColumns"><property name="alias" value="t2"/></include>  from some_table t1    cross join some_table t2</select>
参数 Parameters
一般来说,元素的parameterType会被设置为int或者String之类的原生类或者简单的数据结构。但是当传入一个复杂的对象时,行为就会变得有些不同。比如:
<insert id="insertUser" parameterType="User">  insert into users (id, username, password)  values (#{id}, #{username}, #{password})</insert>
如果User类型的参数对象被传入到语句中,id、username、password属性就会被查找并且传入预处理语句的参数中。
resultMap
resultMap元素是MyBatis中最重要最强大的元素,它可以让我们从90%的JDBCResultSets数据提取代码中解放出来,并在一些条件下允许我们做一些JDBC所不支持的事情。
ResultMap的设计思想是:简单的语句不需要明确的结果映射,而复杂一点的语句只需要描述他们的关系就行了。
一个简单的映射语句如下,它没有明确resultMap,知识简单的将所有的列映射到HashMap的键上,这由resultType指定:
<select id="selectUsers" resultType="map">  select id, username, hashedPassword  from some_table  where id = #{id}</select>
虽然如此在大部分情况下都够用了,但是HashMap不是一个很好的模型,开发人员可能更加倾向于使用JavaBean或者POJO作为模型。MyBatis对两者都支持。
我们假定现在已经拥有一个名叫User的JavaBean,它定义了id、username以及hashedPassword属性。
这样的一个JavaBean可以被映射到ResultSet,就像映射到HashMap中一样简单:
<select id="selectUsers" resultType="com.someapp.model.User">  select id, username, hashedPassword  from some_table  where id = #{id}</select>
如果列名和属性名并不能完全吻合的话,我们也可以使用自行定义的外部ResultMap:
<resultMap id="userResultMap" type="User">  <id property="id" column="user_id" />  <result property="username" column="user_name"/>  <result property="password" column="hashed_password"/></resultMap>
之后只要在需要使用它的元素中对它进行引用就好了:
<select id="selectUsers" resultMap="userResultMap">  select user_id, user_name, hashed_password  from some_table  where id = #{id}</select>

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-25 00:05 , Processed in 0.062314 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表