Mybatis---配置文件完成增删改查(查询详情)
查看详情功能实现步骤:
- 编写接口方法:Mapper接口
-
参数:id
查看详情就是查询某一行数据,所以需要根据id进行查询。而id以后是由页面传递过来。
-
结果:Brand
根据id查询出来的数据只要一条,而将一条数据封装成一个Brand对象即可
编写SQL语句:SQL映射文件
- 执行方法、进行测试
编写SQL语句
在
BrandMapper.xml
映射配置文件中编写statement
,使用resultMap
而不是使用resultType
xml <select id="selectById" resultMap="brandResultMap"> select * from tb_brand where id = #{id}; </select>
编写测试方法
查看代码
//1. 获取SqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2. 获取SqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //3. 获取Mapper接口的代理对象 BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); //4. 执行方法 Brand brand = brandMapper.selectById(id); System.out.println(brand); //5. 释放资源 sqlSession.close();
参数占位符
查询到的结果很好理解就是id为1的这行数据。而这里我们需要看控制台显示的SQL语句,能看到使用?进行占位。说明我们在映射配置文件中的写的 #{id}
最终会被?进行占位
-
#{} :执行SQL时,会将 #{} 占位符替换为?,将来自动设置参数值。从上述例子可以看出使用#{} 底层使用的是 PreparedStatement
-
${} :拼接SQL。底层使用的是
Statement
,会存在SQL注入问题。如下图将 映射配置文件中的 #{} 替换成 ${} 来看效果
=注意:==从上面两个例子可以看出,以后开发我们使用 #{} 参数占位符。
使用时机:#{}:参数传递的时候
${}:表名或者列名不固定的情况下
parameterType使用
对于有参数的mapper接口方法,我们在映射配置文件中应该配置 ParameterType 来指定参数类型。只不过该属性都可以省略。如下图:
xml <select id="selectById" parameterType="int" resultMap="brandResultMap"> select * from tb_brand where id = ${id}; </select>
SQL语句中特殊字段处理
以后肯定会在SQL语句中写一下特殊字符,比如某一个字段大于某个值,如下图
可以看出报错了,因为映射配置文件是xml类型的问题,而 > < 等这些字符在xml中有特殊含义,所以此时我们需要将这些符号进行转义,可以使用以下两种方式进行转义
- 转义字符
下图的 <
就是 <
的转义字符
- <![CDATA[内容]]> (快捷键是CD加Enter)