【MyBatis】学习笔记05:获取参数值的两种方式
【MyBatis】学习笔记03:配置文件进一步解读(非常重要)
MyBatis获取参数值的两种方式:
1.字符串拼接:${}
2.占位符赋值:#{}
一些准备工作
java/cc/mllt/sky/utils
resources/cc/mllt/sky/utils


封装SQLSessionUtils工具类
package cc.mllt.sky.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class SqlSessionUtils {
public static SqlSession getSqlSession(){
SqlSession sqlSession = null;
try{
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
sqlSession = sqlSessionFactory.openSession(true);
}catch (IOException e){
e.printStackTrace();
}
return sqlSession;
}
}

MyBatis获取参数值的各种情况
1.mapper接口方法的参数为单个的字面量类型



或者这样

总结
可以通过
${}和#{}以任意的字符串获取参数值,但是需要注意${}的单引号问题
2.mapper接口方法的参数为多个时



总结
mapper接口方法的参数为多个时,MyBatis会将这些参数放在map集合中,以两种方式进行存储,
第一种为:arg0,arg1……为键,以参数为值
第二种为:以param1,param2……为键,以参数为值
因此只需要通过
#{}和${}以键的形式访问值就可以了。
3.mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储



4.mapper接口方法的参数是一个实体类类型的参数
实体类:属性 属性值
Map:键 值
通过#{}或${}以属性的方式访问值即可




必须是属性名字,不能乱写噢!
5.使用@Param命名参数
此时Mybatis会将这些参数放在一个Map集合中,以两种方式存储
a. 以@Param注解的值为键,以参数为值
b. 以param1,param2……为键,以参数为值
通过#{}或${}以键的方式访问值即可



源码贴贴
目录

cc.mllt.sky.utils.UserParameterMapper.java
package cc.mllt.sky.utils;
import cc.mllt.sky.jdbc.User;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
public interface UserParameterMapper {
/**
* 登录验证
* @param username String 用户名
* @param password String 密码
* @return User对象
*/
User UserLogin(String username,String password);
/**
* 验证登陆
* @return User对象
*/
User UserLoginByMap(Map<String,Object> map);
/**
* 验证登陆(使用@Param注解)
* @param username 用户名
* @param password 用户密码
* @return User对象
*/
User UserLoginByParam(@Param("name") String username, @Param("password") String password);
/**
* 根据用户账号查询用户信息
* @return User对象
*/
User getUserByUserCount(String usercount);
/**
* 添加用户
* @param user 用户对象
* @return int型
*/
int UserAdd(User user);
}
cc.mllt.sky.jdbc.User.java
package cc.mllt.sky.jdbc;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
public class User {
private BigInteger userId;
public String userName;
private String userCount;
private String userPassword;
private int userGrade;
public Timestamp userRegDate;
private BigDecimal userBlance;
public User( String userName,String userCount,String userPassword) {
this.userName=userName;
this.userCount=userCount;
this.userPassword=userPassword;
}
//getter and setter
public BigInteger getUserId() {
return userId;
}
public void setUserId(BigInteger userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserCount() {
return userCount;
}
public void setUserCount(String userCount) {
this.userCount = userCount;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public int getUserGrade() {
return userGrade;
}
public void setUserGrade(int userGrade) {
this.userGrade = userGrade;
}
public Timestamp getUserRegDate() {
return userRegDate;
}
public void setUserRegDate(Timestamp userRegDate) {
this.userRegDate = userRegDate;
}
public BigDecimal getUserBlance() {
return userBlance;
}
public void setUserBlance(BigDecimal userBlance) {
this.userBlance = userBlance;
}
@Override
public String toString(){
return "User{"+
"userId='"+userId+"'"+
",userName='"+userName+"'"+
"userCount='"+userCount+"'"+
",userPassword='"+userPassword+"'"+
"userGrade='"+userGrade+"'"+
",userRegDate='"+userRegDate+"'"+
"userBlance='"+userBlance+"'}";
}
}
resources.cc.mllt.sky.utils.UserParameterMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.mllt.sky.utils.UserParameterMapper">
<!-- User getUserByUsedCount(String usercount);-->
<select id="getUserByUserCount" resultType="User">
<!--select * from t_users where `userCount` = #{username}-->
select * from t_users where `userCount` = '${username}'
</select>
<!-- User UserLogin(String username,String password);-->
<select id="UserLogin" resultType="User">
<!--select * from t_users where userCount=#{arg0} and userPassword=#{arg1}-->
<!--select * from t_users where userCount=#{param1} and userPassword=#{param2}-->
<!--select * from t_users where userCount=#{param1} and userPassword=#{arg1}}-->
select * from t_users where userCount='${param1}' and userPassword='${arg1}'
</select>
<!-- User UserLoginByMap(Map<String,Object> map);-->
<select id="UserLoginByMap" resultType="User">
select * from t_users where userCount=#{username} and userPassword=#{password}
</select>
<!-- int UserAdd(User user);-->
<insert id="UserAdd">
insert into t_users set
`userName`=#{userName},
`userCount`=#{userCount},
`UserPassword`=#{userPassword},
`userGrade`='0',
`userBlance`='0';
</insert>
<!-- User UserLoginByParam(@Param("name") String username, @Param("password") String password);-->
<select id="UserLoginByParam" resultType="User">
select * from t_users where userCount=#{name} and userPassword=#{password}
</select>
</mapper>
Test
下面有一些测试方法是以前用到的,在本次笔记中没有用到的,可以删掉
import cc.mllt.sky.jdbc.User;
import cc.mllt.sky.jdbc.UsersMapper;
import cc.mllt.sky.utils.SqlSessionUtils;
import cc.mllt.sky.utils.UserParameterMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestUsers {
@Test
public void UsersAdd() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
mapper.insertUser();
}
@Test
public void UsersDel() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
mapper.deleteUser();
}
@Test
public void UsersUpdate() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
mapper.updateUser();
}
@Test
public void UsersGetById() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
User user = mapper.selectUserById();
System.out.println(user);
System.out.println(user.getUserName());
}
@Test
public void UsersGetAll() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
List<User> list = mapper.selectUser();
list.forEach(user -> System.out.println(user));
}
@Test
public void testJDBC() throws Exception{
String username ="xrilang";
Class.forName("");
//创建链接对象
Connection connection = DriverManager.getConnection("");
//PreparedStatement ps = connection.prepareStateme nt("selsect * from t_users where userName = '"+username+"'");//麻烦且不安全,会造成SQL注入
PreparedStatement ps = connection.prepareStatement("select * from t_users where userName= ? ");
ps.setString(1,username);
}
@Test
public void GetUserByCount(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
User user = mapper.getUserByUserCount("test001");
System.out.println(user);
}
@Test
public void CheckUserLogin(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
User user = mapper.UserLogin("test001","123456改了密码");
System.out.println(user);
}
@Test
public void CheckUserLoginByMap(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("username","test001");
map.put("password","123456改了密码");
User user = mapper.UserLoginByMap(map);
System.out.println(user);
}
@Test
public void UserAdd(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
int result = mapper.UserAdd(new User("张三","mllt@xrilang.com","123"));
System.out.println(result);
}
@Test
public void CheckUserLoginByParam(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
Map<String,Object> map = new HashMap<>();
User user = mapper.UserLoginByParam("test001","123456改了密码");
System.out.println(user);
}
}
【MyBatis】学习笔记05:获取参数值的两种方式的更多相关文章
- MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...
- MyBatis_04(MyBatis获取“参数值”的两种方式)
MyBatis获取"参数值"的两种方式 (重点!!!) MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接 , #{}的本质就是占位符赋值 ${}使用字 ...
- struts2学习笔记--总结获取servletAPI的几种方式
struts2的Action放弃了request,response等ServletAPI,使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用ser ...
- Linux学习笔记21——线程同步的两种方式
一 用信号量同步 1 信号量函数的名字都以sem_开头,线程中使用的基本信号量函数有4个 2 创建信号量 #include<semaphore.h> int sem_init(sem_t ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
- mybatis学习之路----批量更新数据两种方法效率对比
原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...
- js获取url参数值的两种方式
js获取url参数值的方法有很多,下面也为大家介绍两种. 方法一:正则分析法 function getQueryString(name) { var reg = new RegExp(" ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- Splinter学习--初探3,两种方式登录QQ邮箱
目前,qq邮箱的登录方式有: 1.利用账号.密码登录 2.快捷登录,前提是你本地已有qq账号登录中 和前面一样,还是先到qq邮箱登录首页,审查页面元素,找到我们进行登录操作所相关的链接.按钮或是输入框 ...
- struts2的action从request获取参数值的几种方式
使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对:$.post(url, "name=aty&age=25")和$. ...
随机推荐
- EAS(能量感知调度)绿色节能调度器
能量感知调度(EAS)使调度程序能够预测其决策对 CPU 消耗的电量的影响. EAS 依赖于 CPU 的能量模型 (EM) 来为每个任务选择省电的 CPU,同时要求对执行任务的吞吐量的影响最小. EA ...
- kdump
Kdump简单介绍 什么是Kdump? Kdump是在系统崩溃.死锁或死机时用来转储内存运行参数的一个工具和服务,是一种新的crash dump捕获机制,用来捕获kernel crash(内核崩溃)的 ...
- 解决Spring Data JPA Hibernate的N+1查询问题的性能优化最佳方法
最佳方法:定制@NamedEntityGraph.定制查询和定制VO,可以做到按照需要最佳查询,需要注意的地方:定制VO的字段一定要等于或小于实际查询的字段,才不会复制的时候触发N+1查询. 1 问题 ...
- 创建一个简单的基于MyBatis的项目
- ⼯作中有做过数据处理吗? tree 组件 根据 pid 寻找父节点
主要是在组件和后端返回的数据之间,或者组件产⽣的数据和需要提交给后端的数据之间,有可能会出 现结构对不上,这个时候可能会处理⼀下,举个例⼦,⽐如说我们常⽤的tree型组件要求必须是嵌套的 tree型数 ...
- Vue3 的emit3 属性和 props 属性?
使用场景:使用父子组件通信的时候 : 作用: 用来声明组件有哪些自定义事件,不在emtis里面都会当成原生事件,绑定给组件的根标 签. 好处: 不在像 vue2 使用 .native 修饰符 在 v ...
- Vue 中 v-html 无法被 style scoped 渲染的问题
假设有这么一个 vue 组件: <template> <div v-html="docPreview"/> </template> <st ...
- vue 从后端拿到验证码并点击刷新
验证码登录的实现思路1.前端从后端拿到验证码图片2.输入验证码进行登录3.后端拿到验证码进行比对,正确登录成功. 前端请求验证码直接写在img标签中即可,不必单独发送axios请求 // templa ...
- AMCL 原理解读
AMCL(adaptive Monte Carlo Localization)自适应蒙特卡洛定位,A也可以理解为augmented,,源于MCL算法的一种增强,是机器人在二维移动过程中概率定位系统,采 ...
- JS Parser Combinator (解析器组合子)
前言 前些天偶然看到以前写的一份代码,注意有一段尘封的代码,被我遗忘了.这段代码是一个简单的解析器,当时是为了解析日志而做的.最初解析日志时,我只是简单的正则加上分割,写着写着,我想,能不能用一个简单 ...