【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. 如何解决使用 router.push 跳转路由第二次之后页面就不会刷新了

    router.push({ name:"monitor", query:{ deviceid:"1676156672197922816", // 设备 ID i ...

  2. CSharp的@microsoft/signalr实时通信教程 - 前端 vue

    1. 安装@microsoft/signalr pnpm install @microsoft/signalr --save signalr 是微软对 websocket技术的封装,优化了操作 :1. ...

  3. Vnode 的渲染过程

    在tamplate编译的时候,generater 会生成一个render 函数,通过 render 函数会把 template 内容描述成 vnode ,然后vnode 通过一系列操作转换为真实的 D ...

  4. go frame资源管理打包失败

    最近有个需求,需要使用golang做一个小工具,然后我就想既然是小工具,那就把前后端放在一个二进制文件中.恰好使用的项目架构是go frame,它已经提供了这样的能力,但是没想到碰到了一鼻子灰... ...

  5. npm install报错 Error: EACCES: permission denied

    报错内容 Unable to save binary /root/packageadmin/spring-boot-admin-2.1.6/spring-boot-admin-server-ui/no ...

  6. .NET使用Graphql的演示

    Graphql是什么?先来一段AI给的回答: GraphQL是一种为API设计的查询语言,与REST相比,它提供了更高效.强大和灵活的方法来与数据交互.GraphQL由Facebook于2012年开发 ...

  7. 云原生爱好者周刊:在 PaaS 平台上托管 WebAssembly 应用

    云原生一周动态要闻: Knative v1.1 发布 Nocalhost v0.6.12 发布 CircleCI 的企业功能现在免费了 SolarWinds 修复了一个 Serv-U 漏洞 Nvidi ...

  8. C#/.NET/.NET Core技术前沿周刊 | 第 10 期(2024年10.14-10.20)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  9. Games101 作业8 质点弹簧系统

    目录 1 前言 2 基础数据结构 3 欧拉 4 Verlet Integration 4.1 Constraints 1 前言 质点弹簧系统的模拟仿真,其实非常简单,核心就是牛顿第二定律 \(F = ...

  10. Java统计list集合中重复的元素

    本题目能够从宏观上理解list.set.map三大集合的特点: 解决思路是:使用一个map,key用来记录list中的数据,我们知道set集合不允许元素重复,正好在map的jdk8的api中有一个ke ...