【Mybatis】学习笔记01:连接数据库,实现增删改

【Mybatis】学习笔记02:实现简单的查

【MyBatis】学习笔记03:配置文件进一步解读(非常重要)

【MyBatis】学习笔记04:配置文件模板



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:获取参数值的两种方式的更多相关文章

  1. MyBatis获取参数值的两种方式

    MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...

  2. MyBatis_04(MyBatis获取“参数值”的两种方式)

    MyBatis获取"参数值"的两种方式 (重点!!!) MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接 , #{}的本质就是占位符赋值 ${}使用字 ...

  3. struts2学习笔记--总结获取servletAPI的几种方式

    struts2的Action放弃了request,response等ServletAPI,使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用ser ...

  4. Linux学习笔记21——线程同步的两种方式

    一  用信号量同步 1 信号量函数的名字都以sem_开头,线程中使用的基本信号量函数有4个 2 创建信号量 #include<semaphore.h> int sem_init(sem_t ...

  5. java动态获取WebService的两种方式(复杂参数类型)

    java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...

  6. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  7. js获取url参数值的两种方式

    js获取url参数值的方法有很多,下面也为大家介绍两种.  方法一:正则分析法  function getQueryString(name) {  var reg = new RegExp(" ...

  8. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  9. Splinter学习--初探3,两种方式登录QQ邮箱

    目前,qq邮箱的登录方式有: 1.利用账号.密码登录 2.快捷登录,前提是你本地已有qq账号登录中 和前面一样,还是先到qq邮箱登录首页,审查页面元素,找到我们进行登录操作所相关的链接.按钮或是输入框 ...

  10. struts2的action从request获取参数值的几种方式

    使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对:$.post(url, "name=aty&age=25")和$. ...

随机推荐

  1. select框多选(利用Bootstrap-select)

    前端HTML: <select id="usertype" multiple class="selectpicker" style="width ...

  2. ARM SMMU的原理与IOMMU

    首先放一个社区iommupatch的网址:https://lore.kernel.org/linux-iommu/ 1: arm smmu的原理 1.1: smmu 基本知识 如上图所示,smmu 的 ...

  3. 通过maven动态配置spring boot配置文件

    一.引入maven插件的jar包 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifact ...

  4. 在mac上配置nginx 并将前端的打包文件运行

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  5. 云原生爱好者周刊:玩 Kubernetes 游戏,赢取免费机票

    云原生一周动态要闻: Grafana 8.2.2 发布 OSM(Open Service Mesh)发布 v1.0 的第一个候选版本 谷歌宣布推出 Google Distributed Cloud K ...

  6. count(*)、count(1)哪个更快?面试必问:通宵整理的十道经典MySQL必问面试题

    一.你是如何理解Count(*)和Count(1)的? 这两个并没有区别,不要觉得 count() 会查出全部字段,而 count(1) 不会.所以 count() 会更慢,你觉得 MySQL 作者会 ...

  7. Pandas 空值数据的索引 位置 行号

    前言 先说一下什么是pandas, 这个东西其实就是一个处理表格数据的一个库.可以把它看做是一个没有图形化界面的Excel. Pandas中的空值是非常多的,这体现了数据搜集的一个不可避免的方面.由于 ...

  8. transformer论文解读

    1. 相关工作 2. 模型架构 3. 如何理解 Layer Norm 4. Encoder 和 Decoder 结构 5. 从 attention 到 Scaled Dot-Product Atten ...

  9. iptables防火墙规则介绍与配置

    防火墙简单介绍 防火墙根据什么对外网的进出数据流进行控制? 源IP.目标IP.源端口号.目标端口号.协议.指针位(SYN.FIN.ACK.RST).状态(NEW.ESTABLISHED.INVIAD) ...

  10. Object.assign:对象属性复制,浅拷贝

    Object.assign = Object.assign || function(){ if(arguments.length == 0) throw new TypeError('Cannot c ...