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. @Transactional、Spring的声明式事务

    传送门 一.Spring的声明式事务 需要在xml文件中配置 <!--配置事务管理器类--> <bean id="transactionManager" clas ...

  2. Coding(码市)教程(一):基础配置

    作者:Adaaaagio 出处:http://www.cnblogs.com/zyx418 欢迎转载,希望能够帮到更多的人,转载也请保留这段申明,谢谢! 初识coding是在新入职的公司,前辈说我们用 ...

  3. Android SDK无法更新的问题解决办法

    问题: SSL hostname in certificate didn't matchhostname in certificate didn't match: <dl-ssl.google. ...

  4. pthread中取消线程

    取消线程:告诉一个线程关掉自己,取消操作允许线程请求终止其所在进程中的任何其他线程.不希望或不需要对一组相关的线程执行进一步操作时,可以选择执行取消操作.取消线程的一个示例是异步生成取消条件. 对于c ...

  5. 如何查看 ThinkPHP5.1 的升级说明

    如何查看 ThinkPHP5.1 的升级说明 ThinkPHP 官方对于升级历史都有说明,这个官方做的非常不错. 在官方的手册中就有. 比如从 ThinkPHP 5.1.26 升级到 ThinkPHP ...

  6. python删除x天前文件及文件夹

    #!/usr/bin/env python # -*- coding:utf-8 -*- import os, time, sys, shutil def delFiles(beforeSec, di ...

  7. python 常见问题总结

    1.ModuleNotFoundError: No module named 'urllib2' 在python3.x版本中,urllib和urllib2包集合成在一个包了import urllib2 ...

  8. 5.Appium+真机Demo

    1.连接真机后,执行代码时出现错误:A new session could not be created. (Original error: Could not extract PIDs from p ...

  9. [转]命令行在IIS添加虚拟目录

    来自:http://www.jb51.net/softjc/29702.htmlMkwebdir -c LocalHost -w "Default Web Site" –v Com ...

  10. mysql-1安装和数据库的管理

    1.安装 直接docker安装,客户端使用Navicat Premium. docker run -d --name csjmysql -p 3306:3306 -e MYSQL_ROOT_PASSW ...