首页 > 其他分享 >Mybatis获取参数的两种方式

Mybatis获取参数的两种方式

时间:2022-10-03 21:24:04浏览次数:52  
标签:username map mapper 获取 参数 user Mybatis password

1、MyBatis获取参数值的两种方式:${}和#{}

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

 2、${}和#{}的区别?

  • 使用#{}设置参数时,MyBatis会创建预编译的SQL语句,然后在执行SQL时MyBatis会为预编译SQL中的占位符(?)赋值。预编译的SQL语句执行效率高,并且可以防止注入攻击。
  • 使用${}设置参数时,MyBatis只是创建普通的SQL语句,然后在执行SQL语句时MyBatis将参数直接拼入到SQL里。这种方式在效率、安全性上均不如前者,但是可以解决一些特殊情况下的问题。例如,在一些动态表格(根据不同的条件产生不同的动态列)中,我们要传递SQL的列名,根据某些列进行排序,或者传递列名给SQL都是比较常见的场景,这就无法使用预编译的方式了。

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

若mapper接口中的方法参数为单个的字面量类型,此时可以使用${}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号。
/**
     * 根据用户名查询用户信息
     *
     * @param username
     * @return
     */
    User getUserByUsername(String username);
<!--    User getUserByUsername(String username)-->
    <select id="getUserByUsername" resultType="User">
        <!--         select * from t_user where username = #{username}-->
        select * from t_user where username = '${username}'
    </select>

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

若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1...为键,以参数为值;以param1,param2...为键,以参数为值;因此只需要通过${}和#{}访问map集合的键就可以获取相 对应的值,注意${}需要手动加单引号。
/**
     * 验证登录
     *
     * @param username
     * @param password
     * @return
     */
    User checkLogin(String username, String password);
<!--    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 = '${arg0}' and password = '${arg1}'
    </select>

5、map集合类型的参数

若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中,只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。
/**
     * 验证登录(以map集合作为参数)
     *
     * @param map
     * @return
     */
    User checkLoginByMap(Map<String, Object> map);
<!--    User checkLoginByMap(Map<String,Object> map);-->
    <select id="checkLoginByMap" resultType="User">
        select * from t_user where username = #{username} and password = #{password}
    </select>
@Test
    public void testCheckLoginByMap() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<>();
        map.put("username", "admin");
        map.put("password", "123");
        User user = mapper.checkLoginByMap(map);
        System.out.println(user);
    }

 6、实体类类型的参数

若mapper接口中的方法参数为实体类对象时,此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号。
/**
     * 添加用户信息
     *
     * @param user
     */
    void insertUser(User user);
<!--    void insertUser(User user)-->
    <insert id="insertUser">
        insert into t_user values (null,#{username},#{password},#{age},#{gender},#{email})
    </insert>
@Test
    public void testInsertUser() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User(null, "root", "123456", 23, "女", "[email protected]");
        mapper.insertUser(user);
    }

 7、使用@Param标识参数

可以通过@Param注解标识mapper接口中的方法参数 此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以param1,param2...为键,以参数为值;只需要通过${}和#{}访问map集合的键就可以获取相对应 的值, 注意${}需要手动加单引号。
/**
     * 验证登录,使用@Param注解
     * @Param:命名参数
     * @param username
     * @param password
     * @return
     */
    User checkLoginByParam(@Param("username") String username, @Param("password") String password);
<!--    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>
 @Test
    public void testCheckLoginByParam() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.checkLoginByParam("admin", "123");
        System.out.println(user);
    }

 

标签:username,map,mapper,获取,参数,user,Mybatis,password
From: https://www.cnblogs.com/didadida-wang/p/16751296.html

相关文章

  • Mybatis用法功能
    packagecom.jsoft.test;importcom.jsoft.dao.UserMapper;importcom.jsoft.entity.User;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.......
  • SpringBoot 整合 MyBatis
    本文基于:https://www.bilibili.com/video/BV15b4y1a7yG?p=28&vd_source=cf8900ba33d057d422c588abe5d5290d在pom.xml中导入坐标<dependencies>...<!--引入MyBa......
  • SpringBoot 整合 MyBatis
    本文基于:https://www.bilibili.com/video/BV15b4y1a7yG?p=28&vd_source=cf8900ba33d057d422c588abe5d5290d在pom.xml中导入坐标<dependencies>...<!--引入MyB......
  • mybatis-plus自动填充功能
    如果需要用到自动填充功能,比如自动填充数据的新增日期,修改日期。先在config包下新增一个配置文件MyMetaObjectHandlerpackagecom.xzit.config;importcom.baomidou.my......
  • sessionStorage与localStorage 设置与获取
        <!DOCTYPEhtml><html><head><title>本地存储</title><script>functionsetSessionStorage(){//添加sessionStoragevarname......
  • 使用mybatis plus常见错误
    错误1:​​代码生成器依赖和mybatis依赖冲突​​启动项目时报错如下2021-12-0313:33:33.927ERROR7228---[main]o.s.b.d.LoggingFailureAnalysisReporter......
  • cookies设置与获取
      <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>Cookies</title></head><head><script>//设置cookiefunctionsetCookie(cn......
  • 【linux】查看环境变量|getenv & setenv设置获取环境变量getenv & setenv 获取&设置环
    目录​​环境变量类型​​​​查看环境变量​​​​系统的环境变量​​​​进程的环境变量​​​​初始化时载入的环境变量​​​​执行过程中设置的环境变量​​​​环境变......
  • c#之params可变参数
    params作用:把数字都处理成数组当中的元素。(可变参数数组)classProgram{staticvoidMain(string[]args){}//求学员的总成绩publicstaticvoidTest......
  • C#之ref参数
    先看看没有学ref之前我们是怎么传参的?举例:一个人薪资是5000,有奖金跟罚款两个方法classProgram{staticvoidMain(string[]args){doublesalary=5000;......