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


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

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

    UserMapper.java接口

    1. /**
    2. * 根据用户名查找用户信息
    3. * @param username
    4. * @return
    5. */
    6. User getUserByUsername(String username);

    UserMapper.xml映射文件:

    1. <select id="getUserByUsername" resultType="User">
    2. select * from t_user where username = '${username}';
    3. select>

    测试代码:

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

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

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

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

    UserMapper.java接口:

    1. /**
    2. * 验证登录
    3. * @param username
    4. * @param password
    5. * @return
    6. */
    7. User checkLogin(String username, String password);

    UserMapper.xml映射文件:

    1. <!--checkLogin-->
    2. <select id="checkLogin" resultType="User">
    3. <!--select * from t_user where username = #{arg0} and password = #{arg1};-->
    4. select * from t_user where username = '${param1}' and password = '${param2}';
    5. </select>

    测试代码:

    1. @Test
    2. public void testCheckLogin(){
    3. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    4. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    5. User user = userMapper.checkLogin("admin", "444");
    6. System.out.println(user);
    7. System.out.println(user.getUsername());
    8. sqlSession.close();
    9. }

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

    UserMapper.java接口:

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

    UserMapper.xml映射文件:

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

    测试代码:

    1. @Test
    2. public void testCheckLoginByMap(){
    3. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    4. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    5. Map<String, Object> map = new HashMap<>();
    6. map.put("username", "admin");
    7. map.put("password", "444");
    8. User user = userMapper.checkLoginByMap(map);
    9. System.out.println(user);
    10. sqlSession.close();
    11. }

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

    UserMapper.java接口:

    1. /**
    2. * 添加用户信息
    3. * @param user
    4. */
    5. void insertUser(User user);

    UserMapper.xml映射文件:

    1. <insert id="insertUser">
    2. insert into t_user values(null, #{username}, #{password}, #{age}, #{gender}, #{email});
    3. insert>

    测试代码:

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

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

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

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

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

    UserMapper.java接口:

    1. /**
    2. * 验证登录 - 使用@Param注解
    3. * @param username
    4. * @param password
    5. * @return
    6. */
    7. User checkLoginByParam(@Param("username") String username, @Param("password") String password);

    UserMapper.xml映射文件:

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

    测试代码:

    1. @Test
    2. public void testCheckLoginByParam(){
    3. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    4. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    5. User user = userMapper.checkLoginByParam("admin", "444");
    6. System.out.println(user);
    7. sqlSession.close();
    8. }
  • 相关阅读:
    C语言之const
    数据库select语句基础
    公众号接收事件推送
    Git的入门详细教程
    搭建简单的Jmeter性能监控平台(Influxdb+Grafana)
    停止tomcat服务器的几种方式、修改tomcat默认的端口号、第一种部署Web工程的方式、第二种部署Web工程的方式
    Linux系统64位AT&T系统调用汇编指令syscall
    FOC直流无刷电机控制算法 理论到实践 —— 理论(一)
    【LeetCode刷题笔记】二叉树(三)
    Go Web开发的高级技巧和最佳实践
  • 原文地址:https://blog.csdn.net/qq_48051316/article/details/128129842