【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")和$. ...
随机推荐
- laravel中添加公共函数
laravel中添加公共函数 1. 在项目中的新建app/Helper/functions.php文件 2.在项目的跟目录找到composer.json 文件,并打开,然后再autoload中添加如下 ...
- document.designMode 设计模式
document.designMode 的默认值是 off 关闭: 在控制台输入 document.designMode = 'on' 就可以编辑页面内容:
- Vue3中的新的内置组件
在vue2中的内置组件: 动态路由中的 component :作用:动态显示路由的挂载点,使用 is 属性动态显示组件 : keep-alive :作用:使被包裹的组件保留状态,避免被重新渲染 : 路 ...
- iOS Xcode真机调试包下载地址
下载地址 https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport 本地安装路径 /Applications/Xco ...
- Excel488个函数一览
目录: 常用函数 Web 函数 财务函数 查找和引用函数 多维数据集函数 工程函数 兼容性函数 逻辑函数 日期和时间函数 数据库函数 数学和三角函数 统计函数 文本函数 信息函数 与加载项一起安装的用 ...
- numpy的一些基本操作
文章目录 1.numpy数组的多种创建方式 1.1使用np.array()创建 1.2使用plt创建 1.3使用np的routine函数创建 2.numpy的常用属性 2.1shape 2.2ndim ...
- 学习JavaScript第三天
文章目录 1.数组 1.1创建数组 1.2数组方法 1.3数组遍历 2.函数 2.1函数的定义 2.2函数的参数以及返回值 2.3函数的作用域 2.4函数传参 3.对象 1.数组 在JavaScrip ...
- Redhat7重置root管理员密码
如果要重置Red Hat Enterprise Linux Server release 7.0 的root常见有2种办法(均测试有效) rd.break方法 1.重启Linux系统主机并出现引导界面 ...
- att&ack框架学习笔记5
深度解读ATT&CK框架前言:在上一篇文章中,我们简单介绍了这个由美国研究机构MITRE于2014年推出的新型攻击框架ATT&CK的相关概念.ATT&CK是将已知攻击者的行为汇 ...
- TPS和QPS区别与计算
1.定义 TPS(Transactions Per Second):每秒事务数.事务是指一个完整的业务处理过程,例如用户完成一次购物支付的过程,从挑选商品.下单.支付到生成订单,这一系列操作可以看作是 ...