MyBatis获取参数值的两种方式

MyBatis获取参数值的两种方式: #{}(占位符赋值)和  ${}(字符串拼接)

1. 若mapper接口方法的参数为单个的字面量类型,此时可以通过#{}和${}以任意的内容获取参数值,但是要注意${}的单引号问题

UserMapper.java接口:

     /**
     * 根据用户名查找用户信息
     * @param username
     * @return
     */
    User getUserByUsername(String username);

UserMapper.xml映射文件:

    <!--User getUserByUsername-->
    <!--#{}和${}都是可以使用的,但是${}需要加单引号-->

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

测试代码:

    @Test
    public void testGetUserByUsername(){
        // SqlSessionUtil类是提前创建好的一个工具类,可参考前几篇文章查看详细代码
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.getUserByUsername("王五");
        System.out.println(user);
        sqlSession.close();
    }

2. 若mapper接口方法的参数为多个的字面量类型,此时会将参数放在map集合中,以两种方式存储数据:

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

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

UserMapper.java接口:

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

UserMapper.xml映射文件:

    <!--checkLogin-->
    <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>

测试代码:

    @Test
    public void testCheckLogin(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.checkLogin("admin", "444");
        System.out.println(user);
        System.out.println(user.getUsername());
        sqlSession.close();
    }

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

UserMapper.java接口:

    /**
     * 验证登录 — 以自定义的Map集合作为参数
     * @param map
     * @return
     */
    User checkLoginByMap(Map<String, Object> map);

UserMapper.xml映射文件:

    <!--checkLoginByMap-->
    <select id="checkLoginByMap" resultType="User">
        select * from  t_user where username = #{username} and password = #{password};
        <!--select * from  t_user where username = '${username}' and password = '${password}';-->
    </select>

测试代码:

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

4. 若mapper接口方法的参数是实体类型的参数,只需要通过#{}和${}访问实体类中的属性名,就可以获得对应的属性值,要注意${}的单引号问题

UserMapper.java接口:

    /**
     * 添加用户信息
     * @param user
     */
    void insertUser(User user);

UserMapper.xml映射文件:

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

测试代码:

    @Test
    public void testInsertUser(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = new User(null, "root", "123456", 33, "女", "456@qq.com");
        userMapper.insertUser(user);
        sqlSession.close();
    }

5. 可以在mapper接口方法的参数上设置@Param注解,MyBatis会将这些参数放在map中,以两种方式进行存储:

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

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

         此时可以通过#{}和${}以任意的内容获取参数值,要注意${}的单引号问题

UserMapper.java接口:

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

UserMapper.xml映射文件:

    <!--checkLoginByParam-->
    <select id="checkLoginByParam" resultType="User">
        select * from  t_user where username = #{username} and password = #{password};
    </select>

测试代码:

    @Test
    public void testCheckLoginByParam(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.checkLoginByParam("admin", "444");
        System.out.println(user);
        sqlSession.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顽固油渍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值