1.占位符#{}和${}的对比
MyBatis处理#{}使用jdbc对象是PrepareStatement对象
#{}占位符的特点:1)使用的PrepareStatement对象,执行sql语句,效率高
2)使用的PrepareStatement对象,能够避免sql注入,sql语句更加安全。
3)#{}常常作为列值使用,位于等号的右侧,#{}位置的值和数据类型有关。
${}占位符的特点:1)使用Statement对象,执行sql语句,效率低
2)${}占位符的值,使用的字符串连接方式,有sql注入的风险,有代码安全问题
3)${}数据是原样使用的,不会区分数据类型。
4)${}常用作表名或者列名,在能够保证数据安全的情况下使用${}
2.实体符号在mapper文件的的表示
在mapper文件中,大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等符号最好将其转换成为实体符号,否则在xml文件中可能会出现解析错误问题。特别是小于(<),在xml文件中是绝对不能出现的。下面是实体符号表:
3.模糊查询
关于模糊查询主要是like方式查询模糊的数据。下面是like的两种查询方式代码中有标注
实体接口(StudentDao接口):
// like的两种方式,第一种方法 List<Student> selectlikeone(@Param("name") String name); //like的第二种方法 List<Student> selectliketwo(@Param("name") String name);
mapper文件(StudentDao.xml):
<!-- 模糊查询 like的第一种方式--> <select id="selectlikeone" resultType="com.liuhaiyang.domain.Student"> select * from student where name like #{name} </select> <!-- like的第二种方式--> <select id="selectliketwo" resultType="com.liuhaiyang.domain.Student"> select * from student where name like "%" #{name} "%" </select>
测试类(Test):
@Test//like的第一种方式 public void likeone(){ SqlSession session =MybatisUtils.getSqlSession(); StudentDao dao=session.getMapper(StudentDao.class); List<Student> ls= dao.selectlikeone("%刘%"); ls.forEach(stu-> System.out.println(stu)); session.close(); } @Test //like的第二种方式 public void liketwo(){ SqlSession session =MybatisUtils.getSqlSession(); StudentDao dao=session.getMapper(StudentDao.class); List<Student> ls= dao.selectliketwo("刘"); ls.forEach(stu-> System.out.println(stu)); session.close(); }
like的第一种方式结果截图
like的第二种方式结果截图