文档章节

MyBatis SQL映射文件

o
 osc_ogi0qclx
发布于 2019/08/22 21:32
字数 957
阅读 8
收藏 0

精选30+云产品,助力企业轻松上云!>>>

   SQL映射文件的几个顶级元素:

          mapper : 映射文件的根元素节点 只有一个属性namespace(命名空间)

          作用:用于区分不同的mapper ,全局唯一

          绑定DAO接口,即面向接口编程 ,namespace的命名必须要跟接口同名。

          cache:  配置给定命名空间的缓存

          cache-ref: 从其他命名空间引用缓存配置

          resultMap: 用来描述数据库结果集和对象的对应关系。

          sql : 可以重用的SQL块,也可以被其他语句引用。

          insert: 映射插入语句。

          update : 映射更新语句

          delete:  映射删除语句

          select: 映射查询语句

          namespace的命名必须跟某个DAO接口同名,同属于DAO层 包下,习惯命名以 实体类+Mapper.xml命名。    

         接口中的方法名与映射文件中的SQL语句id应一一对应

 使用select完成 单条件模糊查询

      <select  id="getUserListByUserName"  resultType="User"  parameterType="string">

              select  *   from   smbms_user   where  userName  like  CONCAT ('%',#{userName},'%')

      <select>

    id为 getUserListByUserName 的映射语句,参数类型为 string 返回结果类型是User;            数据库的字段名和属性名不一致的情况下需要手动映射

    id: 命名空间中唯一的标识符,可以被用来引用这条语句。

   parameterType: 表示查询语句传入参数的类型的完全限定名或别名。

MyBatis多参数入参有三种方式:

       1.将查询条件封装成对象进行入参    parameterType="User 类对象"

       2. 使用Map集合 存储查询条件         parameterType="Map" 返回集合

       3. 使用@Param注解实现多参数入参 :  public   int   updatePwd(@Param("id")Integer id,@param("userPassword") String pwd);

使用resultMap完成查询结果的展现

     resultType 直接表示返回类型,包括基础数据类型和复杂数据类型。

      resultMap 是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果映射到哪一个resultMap上,应用场景一般是:数据库字段信息与对象属性不一致或者需要做复杂的联合查询以便自由控制映射结果。

       resultType 属性和 resultMap 属性绝对不能同时存在,只能二者选其以使用。

 

使用insert完成增加操作

     insert ,update ,delete 增,改,删,默认返回执行sql影响的行数,所以DAO层的接口方法的返回值一直设置为int类型,

     insert,update,delete 元素中均没有resultType属性,只有查询操作需要对返回结果类型,进行相应的指定

 MyBatis中参数入参,何时需要封装成对象入参,何时又需要使用多参数入参?

一般情况下,超过4个以上的参数最好封装成对象入参(特别是在常规的增加和修改操时字段较多,封装成对象比较方便)

使用resultMap实现高级结果映射

    1.association : 映射到JavaBean的某个 复杂类型 属性    仅处理一对一的关联关系

       association的属性:javaType:完整java类名或者别名

                                       property:映射数据库列的实体对象的属性

   2. collection 这个属性是应该集合列表

 

resultMap自动映射级别和MyBatis缓存

      <settings>

               <setting name="autoMapperinigBehavior" value="FULL"/>   //设置resultMap的自动映射级别为FULL(自动匹配所有)

      </settings>

       NONE : 禁止自动匹配

       PARTIAL (默认): 自动匹配所有属性

       FULL: 自动匹配所有

 MyBatis缓存

       1.一级缓存

          一级缓存是基于PerpetualCache( MyBatis自带) 的HashMap本地缓存,作用范围为session域内当session flush 或者 close之后,该session中所有的cache就会被清空。

       2. 二级缓存

           二级缓存就是global caching 它超出session范围之外,可以被所有sqlSession共享,开启它只需要在MyBatis的核心配置文件 settings 中设置即可

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

OSChina 周一乱弹 —— 毛巾又怎么样?!我在乎的是大姐姐温柔的怀抱!

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雨 因你而下,于你而止》- Seto 手机党少年们想听歌,请使劲儿戳(这里) @Dan...

小小编辑
24分钟前
29
1
MySQL 常用操作

1 创建/打开/删除数据库 create database db;create database db character set utf8mb4;use db;drop database db;alter database db character set utf8mb4; 2 修复表 mysqlcheck --a......

氷泠
28分钟前
13
0
Node.js中的module.exports与export - module.exports vs exports in Node.js

问题: I've found the following contract in a Node.js module: 我在Node.js模块中找到了以下合同: module.exports = exports = nano = function database_module(cfg) {...} I wonder ......

javail
34分钟前
13
0
如何防止单击按钮时对话框关闭 - How to prevent a dialog from closing when a button is clicked

问题: I have a dialog with EditText for input. 我有一个使用EditText输入的对话框。 When I click the "yes" button on dialog, it will validate the input and then close the dialog.......

富含淀粉
今天
17
0
访问者模式Visitor

一 概述 场景:通常来说,用于封装数据所用到的pojo类,其只包含get、set,对应的业务逻辑是在Service上完成的;但如果出现多个pojo类都共用一套逻辑时,则应该考虑将逻辑进行抽象,不同类型...

小明不觉小
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部