首页 > 其他分享 >MyBatis获取参数值的两种方式(重点)

MyBatis获取参数值的两种方式(重点)

时间:2022-09-24 23:25:52浏览次数:47  
标签:username map ParameterMapper mapper 获取 参数 user MyBatis 参数值

MyBatis获取参数值的两种方式:

  ${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引 号;

  但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

  正常情况下最好是使用#{}的方式,因为这种方式是以占位符的方式替换,可以避免sql注入,但是这种方式会自动加上单引号

  而有的时候时候字段是不能加单引号的,就必须用${}

 

1、单个字面量类型的参数

  若mapper接口中的方法参数为单个的字面量类型 此时可以使用${}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号

 

2、多个字面量类型的参数

  若mapper接口中的方法参数为多个时 此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1...为键,以参数为值;以 param1,param2...为键,以参数为值;

  因此只需要通过${}和#{}访问map集合的键就可以获取相对应的 值,注意${}需要手动加单引号

 

3、map集合类型的参数

  若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中 只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

 

 

4、实体类类型的参数

  若mapper接口中的方法参数为实体类对象时 此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号

 

 

5、使用@Param标识参数

  可以通过@Param注解标识mapper接口中的方法参数 此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以 param1,param2...为键,以参数为值;

  只需要通过${}和#{}访问map集合的键就可以获取相对应的值, 注意${}需要手动加单引号

 

这几种接收参数的形式,只需要掌握几种种就可以了,

  第一种实体类的方式,访问实体类对象中的属性名获取属性值

  //第二种map的方式,当多表查询的时候,字段不可能跟实体类中的字段相同,map的方式无须跟实体类的属性相同,以键值对的形式存入map集合

  第三种使用@Param注解,注解中填的什么key 就#{key}${key}取值

 

6.实例

mapper接口

public interface ParameterMapper {

    /**
     * 验证登录(使用@Param)
     */
    User checkLoginByParam(@Param("username") String username, @Param("password") String password);

    /**
     * 添加用户信息
     */
    int insertUser(User user);

    /**
     * 验证登录(参数为map)
     */
    User checkLoginByMap(Map<String, Object> map);

    /**
     * 验证登录
     */
    User checkLogin(String username, String password);

    /**
     * 根据用户名查询用户信息
     */
    User getUserByUsername(String username);

    /**
     * 查询所有的员工信息
     */
    List<User> getAllUser();

}

mapper映射文件

<?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="com.atguigu.mybatis.mapper.ParameterMapper">

    <!--List<User> getAllUser();-->
    <select id="getAllUser" resultType="User">
        select * from t_user
    </select>

    <!--User getUserByUsername(String username);-->
    <select id="getUserByUsername" resultType="User">
        <!--select * from t_user where username = #{username}-->
        select * from t_user where username = '${username}'
    </select>

    <!--User checkLogin(String username, String password);-->
    <select id="checkLogin" resultType="User">
        <!--select * from t_user where username = #{arg0} and password = #{arg1}-->
        select * from t_user where username = '${param1}' and password = '${param2}'
    </select>

    <!--User checkLoginByMap(Map<String, Object> map);-->
    <select id="checkLoginByMap" resultType="User">
        select * from t_user where username = #{username} and password = #{password}
    </select>

    <!--int insertUser(User user);-->
    <insert id="insertUser">
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
    </insert>

    <!--User checkLoginByParam(@Param("username") String username, @Param("password") String password);-->
    <select id="checkLoginByParam" resultType="User">
        select * from t_user where username = #{username} and password = #{password}
    </select>

</mapper>

测试

public class ParameterMapperTest {

    /**
     * MyBatis获取参数值的两种方式:${}和#{}
     * ${}本质字符串拼接
     * #{}本质占位符赋值
     * MyBatis获取参数值的各种情况:
     * 1、mapper接口方法的参数为单个的字面量类型
     * 可以通过${}和#{}以任意的名称获取参数值,但是需要注意${}的单引号问题
     * 2、mapper接口方法的参数为多个时
     * 此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储
     * a>以arg0,arg1...为键,以参数为值
     * b>以param1,param2...为键,以参数为值
     * 因此只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题
     * 3、若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储
     * 只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题
     * 4、mapper接口方法的参数是实体类类型的参数
     * 只需要通过#{}和${}以属性的方式访问属性值即可,但是需要注意${}的单引号问题
     * 5、使用@Param注解命名参数
     * 此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储
     * a>以@Param注解的值为键,以参数为值
     * b>以param1,param2...为键,以参数为值
     * 因此只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题
     */

    @Test
    public void testCheckLoginByParam(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        User user = mapper.checkLoginByParam("admin", "123456");
        System.out.println(user);
    }

    @Test
    public void testInsertUser(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        int result = mapper.insertUser(new User(null, "李四", "123", 23, "男", "[email protected]"));
        System.out.println(result);
    }

    @Test
    public void testCheckLoginByMap(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        Map<String, Object> map = new HashMap<>();
        map.put("username", "admin");
        map.put("password", "123456");
        User user = mapper.checkLoginByMap(map);
        System.out.println(user);
    }

    @Test
    public void testCheckLogin(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        User user = mapper.checkLogin("admin", "123456");
        System.out.println(user);
    }

    @Test
    public void testGetUserByUsername(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        User user = mapper.getUserByUsername("admin");
        System.out.println(user);
    }

    @Test
    public void testGetAllUser(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        List<User> list = mapper.getAllUser();
        list.forEach(user -> System.out.println(user));
    }

    @Test
    public void testJDBC() throws Exception {
        String username = "admin";
        Class.forName("");
        Connection connection = DriverManager.getConnection("", "", "");
        //PreparedStatement ps = connection.prepareStatement("select * from t_user where username = '" + username + "'");
        PreparedStatement ps = connection.prepareStatement("selelt * from t_user where username = ?");
        ps.setString(1, username);
    }
}

 

标签:username,map,ParameterMapper,mapper,获取,参数,user,MyBatis,参数值
From: https://www.cnblogs.com/dzs894330350/p/16726938.html

相关文章

  • Mybatis的二级缓存
      二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被缓存;此后若再次执行相同的查询语句,结果就会从缓存中读取二级缓存开......
  • Vue 页面渲染完成后获取元素并修改其CSS样式
    1.将所要获取的元素加入ref属性<divslot="header"class="clearfix"ref="clearFix"></div>2.获取元素对象,并修改样式methods:{changeStyle:function(){let......
  • js获取指定字符前后面字符串
    //  声明一个字符串   varstr='ABC&abc&123'; //  使用split方法在指定字符(&)处分割,并返回一个数组   varstrArr=str.split('&');我们看控制......
  • 关于mybatis-plus字段更新策略的颗粒度问题
    1.三个可以控制字段更新策略的地方及颗粒度区分1.1mybtis-plus全局配置1.2entity的注解1.3baseMapper.update方法的指定set注意:必须判空set,否则非空时出现两次set语......
  • 10、整合Mybatis框架
    mybatis中文文档:https://blog.csdn.net/qq_41182402/article/details/121281405UserMapper.xmlsql语句点击查看代码<?xmlversion="1.0"encoding="UTF-8"?><!DOC......
  • unity hub 个人版许可证获取失败
    个人版许可证获取失败,项目都没法打开。可以退出再次登录,或重启电脑,操蛋事,找了半天证书,博文说删c盘文件,找都找不到https://developer.unity.cn/ask/question/62297ed9ed......
  • 用SQL编写获取拼音码的函数
    CREATEfunction[dbo].[fn_GetPy](@strnvarchar(4000))returnsnvarchar(4000)--WITHENCRYPTIONasbegindeclare@intLenintdecl......
  • CodeSmith无法获取MySQL表及列Description说明处理
    实体类生成模板下载:链接:https://pan.baidu.com/s/1tLxW5m5ECwVV2feWSVtQIA提取码:qezw反编译工具下载:链接:https://pan.baidu.com/s/19dG4NweQodLl0yG5XQrcOg提取码:r793......
  • java初步学习 获取随机数(基于黑马的课进行自学,初学者,不喜勿喷)
    初步学习补充内容获取随机数步骤与键盘录入相似第一步:导包所写代码与键盘录入相似导包的代码为“importjava.util.Random;”,且必须在类变量上第二步:创建对象这一......
  • MyBatis——案例——环境准备
    配置文件完成增删改查     准备环境    数据库表tb_brand      --创建tb_brand表createtabletb_brand(idintprima......