【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")和$. ...
随机推荐
- 推荐一款轻量级 eBPF 前端工具 ply
1 Overview ply 是 eBPF 的 front-end 前端工具之一,专为 embedded Linux systems 开发,采用 C 语言编写,只需 libc 和内核支持 BPF 就可 ...
- k8s的pod的理解
pod共享相同的IP地址和端口空间. 这意味着在同一 pod中的容器运行的 多个进程需要注意不能绑定到相同的端口号, 否则会导致端口冲突, 但这只涉及同一pod中的容器. 由于每个pod都有独立的端口 ...
- 再见 Dockerfile,拥抱新型镜像构建技术 Buildpacks
作者:米开朗基杨,方阗 云原生正在吞并软件世界,容器改变了传统的应用开发模式,如今研发人员不仅要构建应用,还要使用 Dockerfile 来完成应用的容器化,将应用及其依赖关系打包,从而获得更可靠的产 ...
- 牛客网C++选择题笔记
这是牛客网上的C/C++的选择题的错题,随做随更,有一些题还是有点意思. 当然不是所有都有总结,有明显歧义的不管,过于简单的不管(简不简单因人而异,我先阅读了C++ Primer后再开始做的练习,因此 ...
- 2-4 C++ const限定词
目录 2.4.1 const之于基本类型(base type) 含义 编译过程 2.4.2 const之于引用 含义 作用 注意点 2.4.3 const之于指针 含义[两类] 变量定义的读法:从左往 ...
- Docker 自定义镜像Dockerfile使用详细教程
认识 Dockerfile 文件 Dockerfile 用于构建 Docker 镜像,Dockerfile 文件是由一行行命令语句 组成,基于这些命令即可以构建一个镜像 比如下面就是一个Dockefi ...
- 实战:Mailivery 模拟登录
问题情景 混淆群内的小伙伴遇到这么个问题,Mailivery 这个网站登录后,明明提交的表单(邮箱和密码也正确).请求头等等都没问题,为啥一直重定向到登录页面呢?唉,该出手时就出手啊,我也看看咋回事吧 ...
- Socket编程与IO多路复用
0.引言 本篇博客将从socket模型为起点,引入IO多路复用的学习. 1.Socket模型 1.1.Socket的诞生 Socket的诞生背景: Socket最早出现在20实际80年代的Unix操作 ...
- csv导出特殊字符问题
昨天听到隔壁组讨论说按照逗号分割implode导出到csv文件,传递文件数据给别人的时候,别人按照都好explode分割回来多一个单元格,他们调查了一下发现是内容里面就是有逗号导致的,居然就这么卡住了 ...
- Nuxt.js 应用中的 webpack:configResolved事件钩子
title: Nuxt.js 应用中的 webpack:configResolved事件钩子 date: 2024/11/21 updated: 2024/11/21 author: cmdragon ...