• Mybatis实战练习二【查询详情】


    目录

    查询详情

    编写接口方法

    编写SQL语句

    编写测试方法

    参数占位符

    parameterType使用

    SQL语句中特殊字段处理


    查询详情

    有些数据的属性比较多,在页面表格中无法全部实现,而只会显示部分,而其他属性数据的查询可以通过 查看详情 来进行查询,如上图所示。

    查看详情功能实现步骤:

    • 编写接口方法:Mapper接口

     

    • 参数:id

      查看详情就是查询某一行数据,所以需要根据id进行查询。而id以后是由页面传递过来。

    • 结果:Brand

      根据id查询出来的数据只要一条,而将一条数据封装成一个Brand对象即可

    编写SQL语句:SQL映射文件

    • 执行方法、进行测试  

    编写接口方法

    BrandMapper 接口中定义根据id查询数据的方法

    1. /**
    2. * 查看详情:根据Id查询
    3. */
    4. Brand selectById(int id);

    编写SQL语句

    BrandMapper.xml 映射配置文件中编写 statement,使用 resultMap 而不是使用 resultType

    1. <select id="selectById" resultMap="brandResultMap">
    2. select *
    3. from tb_brand where id = #{id};
    4. select>

    注意:上述SQL中的 #{id}先这样写,一会我们再详细讲解  

    编写测试方法

    test/java 下的 com.itheima.mapper 包下的 MybatisTest类中 定义测试方法

    1. @Test
    2. public void testSelectById() throws IOException {
    3. //接收参数,该id以后需要传递过来
    4. int id = 1;
    5. //1. 获取SqlSessionFactory
    6. String resource = "mybatis-config.xml";
    7. InputStream inputStream = Resources.getResourceAsStream(resource);
    8. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    9. //2. 获取SqlSession对象
    10. SqlSession sqlSession = sqlSessionFactory.openSession();
    11. //3. 获取Mapper接口的代理对象
    12. BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
    13. //4. 执行方法
    14. Brand brand = brandMapper.selectById(id);
    15. System.out.println(brand);
    16. //5. 释放资源
    17. sqlSession.close();
    18. }

    执行测试方法结果如下:

     

    参数占位符

    查询到的结果很好理解就是id为1的这行数据。而这里我们需要看控制台显示的SQL语句,能看到使用?进行占位。说明我们在映射配置文件中的写的 #{id} 最终会被?进行占位。接下来我们就聊聊映射配置文件中的参数占位符。

    mybatis提供了两种参数占位符:

    • #{} :执行SQL时,会将 #{} 占位符替换为?,将来自动设置参数值。从上述例子可以看出使用#{} 底层使用的是 PreparedStatement

    • ${} :拼接SQL。底层使用的是 Statement,会存在SQL注入问题。如下图将 映射配置文件中的 #{} 替换成 ${} 来看效果

    1. <select id="selectById" resultMap="brandResultMap">
    2. select *
    3. from tb_brand where id = ${id};
    4. select>

    重新运行查看结果如下:  

    ==注意:==从上面两个例子可以看出,以后开发我们使用 #{} 参数占位符。  

    parameterType使用

    对于有参数的mapper接口方法,我们在映射配置文件中应该配置 ParameterType 来指定参数类型。只不过该属性都可以省略。如下图:

    1. <select id="selectById" parameterType="int" resultMap="brandResultMap">
    2. select *
    3. from tb_brand where id = ${id};
    4. select>

    SQL语句中特殊字段处理

    以后肯定会在SQL语句中写一下特殊字符,比如某一个字段大于某个值,如下图

    可以看出报错了,因为映射配置文件是xml类型的问题,而 > < 等这些字符在xml中有特殊含义,所以此时我们需要将这些符号进行转义,可以使用以下两种方式进行转义

    • 转义字符

      下图的 < 就是 < 的转义字符。

     

     

  • 相关阅读:
    linux 用户名和密码的处理
    杭电oj 2043 密码 C语言
    仓库风格,数据库系统、黑板系统、超文本系统的概念以及应用
    gitlab-runner配置与注册
    一个字符串数组里的id和json数组里的元素对比
    C语言快速排序
    增强大型语言模型(LLM)可访问性:深入探究在单块AMD GPU上通过QLoRA微调Llama 2的过程
    已备案域名用国外服务器会不会掉备案?
    海康威视面试经历
    php 打印分页 一组数据不分页问题解决
  • 原文地址:https://blog.csdn.net/m0_64550837/article/details/126586361