Mybatis 实用篇(三)参数处理

sql 语句中的参数 parameterType 可以省略不写。

一、参数封装

1.1 单个参数处理

public interface UserMapper {
User getUser(int id);
}

sql 中 #{} 的值可以随意,mybatis 不做任何处理,eg:

<select id="getUser" parameterType="int" resultType="User">
select * from user where id=#{xxx};
</select>

1.2 多个参数处理

多个参数 mybatis 封装成 Map,默认参数的 key 为 param1, param2...,也可以使用 @Param("id") 指定 key 的值

User getUser(@Param("id") int id, String name);

sql 可以有如下写法:

<select id="getUser" resultType="User">
<!--select * from user where id=#{0} and name=#{1};-->
<!--select * from user where id=#{param1} and name=#{param2};-->
<!--select * from user where id=#{0} and name=#{param2};-->
select * from user where id=#{id} and name=#{param2};
</select>

1.3 Java Bean

User getUser(User user);

sql 可以有如下写法:

<select id="getUser" resultType="User">
select * from user where id=#{id} and name=#{name};
</select>

1.4 Map

User getUser(User user);

sql 可以有如下写法:

<select id="getUser" resultType="User">
select * from user where id=#{id} and name=#{name};
</select>

思考:

User getUser(@Param("id") int id, String name);
id ==> #{id/param1/0} name ==> #{param2/1} User getUser(int id, @Param("user") User user);
id ==> #{id/param1/0} name ==> #{param2.name/user.name} # Collection ==> list, Array ==> array. eg: 取出 list 中的第一个值
User getUser(List<User> users);
id ==> #{list[0]}

二、#{} 和 ${} 区别

#{} 预编译,而 ${} 仅进行字符串拼接。

实际工作中,尽量使用 #{} ,特殊场合需要使用 ${},如:

select * from ${tablename}

三、#{} 参数

mybatis 值为 null 时默认对应数据库中的 TYPES.OHTER,可以修改全局的配置:

  • {email, javaType=NULL}


每天用心记录一点点。内容也许不重要,但习惯很重要!

Mybatis 实用篇(三)参数处理的更多相关文章

  1. Mybatis 实用篇(四)返回值类型

    Mybatis 实用篇(四)返回值类型 一.返回 List.Map List<User> getUsers(); <select id="getUsers" re ...

  2. MyBatis 实用篇(一)入门

    MyBatis 实用篇(一)入门 MyBatis(http://www.mybatis.org/mybatis-3/zh/index.html) 是一款优秀的持久层框架,它支持定制化 SQL.存储过程 ...

  3. MyBatis 实用篇(二)配置文件

    MyBatis 实用篇(二)配置文件 一.全局配置 全局配置:http://www.mybatis.org/mybatis-3/zh/configuration.html <?xml versi ...

  4. mybatis第二篇—参数绑定

    不管我们在做数据库作业或者任务还是当时的仅靠jdbc来写一个管理系统的时候,sql语句需要一些参数,从而来实现模糊查询,精确查询,插入数据,更新数据和删除数据.这些参数,在mybatis里面,又该如何 ...

  5. Mybatis sql映射文件浅析 Mybatis简介(三)

    简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML为载体映射SQL 之前提到过,各项配置信息将Mybatis应用的整 ...

  6. Mybatis sql映射文件浅析 Mybatis简介(三) 简介

    Mybatis sql映射文件浅析 Mybatis简介(三)   简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...

  7. MyBatis高级篇之整合ehcache缓存框架

    MyBatis高级篇之整合ehcache缓存框架  2017-09-01  0 Comments  1,671 Views  0 Times 一.前言 MyBatis为我们提供了Cache接口,也提供 ...

  8. Docker实用篇

    Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦. 分布式系统中,依赖的组件非常多,不同组件之间 ...

  9. 【基于WinForm+Access局域网共享数据库的项目总结】之篇三:Access远程连接数据库和窗体打包部署

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

随机推荐

  1. 每天一个linux命令(网络):【转载】route命令

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  2. python eval, exec. compile

    compile 编译某段代码, (将一个字符串编译为字节代码), 以方便重复调用. exec 可以理解为和if, for一样是一个语法声明, 而不是一个函数. 注意globals和locals的含义. ...

  3. hdu 4336 Card Collector——最值反演

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4336 点集中最早出现的元素的期望是 min ,最晚出现的元素的期望是 max :全部出现的期望就是最晚出现 ...

  4. emacs之配置之初始目录设置

    emacsConfig/dir-setting.el (setq default-directory "~/" )

  5. Python项目输出小类概率,机器学习

    from pandas import read_csv import numpy as np from sklearn.datasets.base import Bunch import pickle ...

  6. cuDNN下载地址和指南

    我出现了报错 Could not find 'cudnn64_7.dll'. TensorFlow requires that this DLL be installed in a directory ...

  7. java io之管道流

    一.java.io中存在一中流叫管道流,类似管道的功能.PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流.这个两个流必须同时使用. 二.作用:进行两个线 ...

  8. Autofac Property Injection and Method Injection

    While constructor parameter injection is the preferred method of passing values to a component being ...

  9. 超文本传输协议http详解

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...

  10. centos7.3给搭建SVN服务器

    centos7.3给搭建SVN服务器 1 安装svnserver yum install subversion 2 查看版本 svnserve --version 3 创建版本库 3.1 运行以下命令 ...