mybatis-获取参数值的方式
MyBatis获取参数值的两种方式(重点)
- MyBatis获取参数值的两种方式:${}和#{}
- ${}的本质就是字符串拼接,#{}的本质就是占位符赋值
- ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
单个字面量类型的参数
- 若mapper接口中的方法参数为单个的字面量类型,此时可以使用${}和#{}以任意的名称(最好见名识意)获取参数的值,注意${}需要手动加单引号
<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">
select * from t_user where username = #{username}
</select>
<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">
select * from t_user where username = '${username}'
</select>
多个字面量类型的参数
若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中
- 以arg0,arg1...为键,以参数为值;
- 以param1,param2...为键,以参数为值;
因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。
使用arg或者param都行,要注意的是,arg是从arg0开始的,param是从param1开始的
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = #{arg0} and password = #{arg1}
</select>
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = '${param1}' and password = '${param2}'
</select>
map集合类型的参数
- 若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号
<!--User checkLoginByMap(Map<String,Object> map);-->
<select id="checkLoginByMap" resultType="User">
select * from t_user where username = #{username} and password = #{password}
</select>
@Test
public void checkLoginByMap() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("usermane","admin");
map.put("password","123456");
User user = mapper.checkLoginByMap(map);
System.out.println(user);
}
实体类类型的参数
- 若mapper接口中的方法参数为实体类对象时此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号
<!--int insertUser(User user);-->
<insert id="insertUser">
insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
@Test
public void insertUser() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
User user = new User(null,"Tom","123456",12,"男","123@321.com");
mapper.insertUser(user);
}
整体测试类代码
package com.atguigu.mybatis.test;
import com.atguigu.mybatis.mapper.ParameterMapper;
import com.atguigu.mybatis.pojo.user;
import com.atguigu.mybatis.utils.sqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.List;
public class ParameterMapperTest {
@Test
public void TestGetALLUser(){
SqlSession sqlSession = sqlSessionUtils.GetSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
List allUser = mapper.getAllUser();
allUser.forEach(user-> System.out.println(user));
}
/**
* mybatis 获取参数值的两中方式:${} 和 #{}
* 1:${} 本质就是字符串拼接
* 2:#{} 本质就是占位符赋值
*
* select * from t_user where username = #{username} // '${userame}'
*
* 可以通过${} 和 #{}以任意字符串来获取参数值,但是需要注意${}的单引号问题
*/
@Test
public void TestGetUserByUsername(){
SqlSession sqlSession = sqlSessionUtils.GetSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
user admin = mapper.GetUserByUsername("张三");
System.out.println(admin.toString());
}
/**
* mapper接口方法的参数为多个时,、此时mybatis会将这些参数放到一个map集合中,以两种方式进行存储
* a> 以arg0、arg1、、、、、、为健,以参数为值
* b> 以param1,param2、、、、为健,以参数为值
* 因此只需要通过#{} 和 ${} 以键的方式访问即可、但是需要注意的${}的单引号问题
*
*/
@Test
public void testCheckLogin(){
SqlSession sqlSession = sqlSessionUtils.GetSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
user user1= mapper.checkLogin("张三", "123456");
System.out.println(user1.toString());
}
@Test
public void testCheckLoginByMap(){
SqlSession sqlSession = sqlSessionUtils.GetSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put("username","张三");
objectObjectHashMap.put("password","123456");
user user1 = mapper.checkLoginMap(objectObjectHashMap);
System.out.println(user1);
}
/**
* 4.mapper接口方法中的参数是一个实体类的类型的参数时,如何访问?
* 只需要通过#{}和${}以属性的方式访问属性值即可,但是需要注意的${}的单引号问题
*/
@Test
public void testInsertUser(){
SqlSession sqlSession = sqlSessionUtils.GetSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
user user = new user(null, "lisai", "123456", 23, "男", "wiseleer@163.com");
int i = mapper.insertUser(user);
System.out.println(i);
}
/**
* 使用@param测试
*/
@Test
public void testcheckLoginByParam(){
SqlSession sqlSession = sqlSessionUtils.GetSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
user user1= mapper.checkLoginByParam("张三", "123456");
System.out.println(user1.toString());
}
}
mybatis-获取参数值的方式的更多相关文章
- MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...
- get与post 获取参数值的方式
get方式 参数带在url后面,form表单中的域 可以 没有value 属性, 后台可以直接在方法的参数中加入和url一样的参数就能直接获得该参数的值(效率高,不安全) post方式 url链接 ...
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析 一:问题demo展示 ...
- SpringBoot系列-整合Mybatis(XML配置方式)
目录 一.什么是 MyBatis? 二.整合方式 三.实战 四.测试 本文介绍下SpringBoot整合Mybatis(XML配置方式)的过程. 一.什么是 MyBatis? MyBatis 是一款优 ...
- SpringBoot集成MyBatis的Bean配置方式
SpringBoot集成MyBatis的Bean配置方式 SpringBoot是一款轻量级开发的框架,简化了很多原先的xml文件配置方式,接下来就介绍一下如何不适用XML来配置Mybatis spri ...
- Mybatis使用Dao代码方式CURD
Mybatis 使用Dao代码方式进行增.删.改.查. 1.Maven的pom.xml <project xmlns="http://maven.apache.org/POM/4.0. ...
- MyBatis学习(三)MyBatis基于动态代理方式的增删改查
1.前言 上一期讲到MyBatis-Statement版本的增删改查.可以发现.这种代码写下来冗余的地方特别多.写一套没啥.如果涉及到多表多查询的时候就容易出现问题.故.官方推荐了一种方法.即MyBa ...
- Request三种获取数据的方式
今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Req ...
- 两种获取connectionString的方式
两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...
随机推荐
- 浅谈 Raft 分布式一致性协议|图解 Raft
前言 本篇文章将模拟一个KV数据读写服务,从提供单一节点读写服务,到结合分布式一致性协议(Raft)后,逐步扩展为一个分布式的,满足一致性读写需求的读写服务的过程. 其中将配合引入Raft协议的种种概 ...
- [WPF]WPF设置单实例启动
WPF设置单实例启动 使用Mutex设置单实例启动 using System; using System.Threading; using System.Windows; namespace Test ...
- 从零开始实现一个MyBatis加解密插件
作者:vivo 互联网服务器团队- Li Gang 本篇文章介绍使用MyBatis插件来实现数据库字段加解密的过程. 一.需求背景 公司出于安全合规的考虑,需要对明文存储在数据库中的部分字段进行加密, ...
- 一次客户需求引发的K8S网络探究
前言 在本次案例中,我们的中台技术工程师遇到了来自客户提出的打破k8s产品功能限制的特殊需求,面对这个极具挑战的任务,攻城狮最终是否克服了重重困难,帮助客户完美实现了需求?且看本期K8S技术案例分享! ...
- P4767 [IOI2000]邮局 - 平行四边形不等式优化DP
There is a straight highway with villages alongside the highway. The highway is represented as an in ...
- 01 - 快速体验 Spring Security 5.7.2 | 权限管理基础
在前面SpringBoot 2.7.2 的系列文章中,已经创建了几个 computer 相关的接口,这些接口直接通过 Spring Doc 或 POSTMAN 就可以访问.例如: GET http:/ ...
- 第二十四篇:对于dom的理解
好家伙, HTML CSS JS structure style function 结构体 样式 功能 <> ...
- rh358 004 bind反向,转发,主从,各种资源记录 unbound ansible部署bind unbound
通过bind实现正向,反向,转发,主从,各种资源记录 7> 部署反向解析 从ip解析到fqdn vim /etc/named.conf zone "250.25.172.in-addr ...
- Linux 压缩、解压缩命令
Linux 压缩.解压缩命令 tar 语法命令 tar [options-] [files] options: 选择 描述 -A 追加tar文件至归档 -c 创建一个新文档 -d 找出归档和文件系统的 ...
- 引擎之旅 Chapter.2 线程库
预备知识可参考我整理的博客 Windows编程之线程:https://www.cnblogs.com/ZhuSenlin/p/16662075.html Windows编程之线程同步:https:// ...