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

BS系统:

  通过视图收集用户输入的数据,将数据提交到服务器中,在服务器中获取完后传输到service处理业务逻辑,然后传输到DAO,在DAO实现类中将这些数据拼接到SQL语句,最终执行SQL语句,将用户相关的数据保存到数据库。

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

${}和#{}

  ${}的本质就是字符串拼接(会造成SQL注入),#{}的本质就是占位符赋值

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

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

(1)单个字面量类型的参数

  若mapper接口中的方法参数为单个的字面量类型(字符串、基本数据类型以及所对应的包装类 ),

       此时可以使用${}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号

usermapper.java:

package com.mybatis.mapper;

import com.mybatis.pojo.User;

public interface UserMapper {
    User getUserByName(String username);
}

usermapper.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="com.mybatis.mapper.UserMapper">
    <!--User getUserByName(String username);-->
    <select id="getUserByName" resultType="User">
        <!--select * from t_user where username = #{username}-->
        select * from t_user where username = '${username}'
    </select>
</mapper>

测试类:

@Test
public void getUserByNameTest(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.getUserByName("root");
    System.out.println("user = " + user);
}

(2)多个字面量类型的参数

  若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,

    1)以arg0,arg1...为键,以参数为值;

    2)以param1,param2...为键,以参数为值;

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

usermapper.java:

package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
   User check(String username,String pwd);
}

usermapper.xml:

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

测试类:

    @Test
    public void checkUser(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.check("root","123");
        System.out.println("user = " + user);
    }

(3)map集合类型的参数

  若mapper接口中的方法需要的参数为多个时,

  此时可以手动创建map集合,将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,

  注意${}需要手动加单引号

usermapper.java:

package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
      User checkMap(Map<String,Object> map);
}

usermapper.xml:

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

测试类:

 @Test
    public void checkUserMap(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String,Object> map = new HashMap<>();
        map.put("username","root");
        map.put("password","123");
        User user = mapper.checkMap(map);
        System.out.println("user = " + user);
    }

 (4)实体类类型的参数

  若mapper接口中的方法参数为实体类对象时,

  此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号。

usermapper.java:

package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
     void insertUser(User user);
}

usermapper.xml:

<!-- 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 = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.insertUser(new User(null,"张三","123456",23,"男","123456@qq.com"));
    }

 (5)使用@Param标识参数

  可以通过@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中,

           1)以@Param注解的value属性值为键,以参数为值;

    2)以param1,param2...为键,以参数为值;

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

usermapper.java:

package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
     User checkLoginByParam(@Param("username") String username,@Param("password") String password);
}

usermapper.xml:

<!--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 TestCheckUser(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.checkLoginByParam("root","123");
        System.out.println("user = " + user);
    }

 

posted @   浑浑噩噩一只小迷七  阅读(211)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示