1.当我们从数据库中查询数据时,大批量的数据会存在相同的数据。比如重名的人,当我们使用姓名查询该姓名的所有数据时,我们需要在Mybatis中使用到模糊查询的概念。
在接口中定义函数:
//模糊查询 使用name查询的数据为对象TB7,返回的不止一个对象使用List
public List<TB7> queryByName(String name);
2.映射器中解析Mapper。
<select id="queryByName" parameterType="java.lang.String" resultType="tB7" >
select id,username,salary,age,depart from tb7
where username like concat('%',#{username},'%')
</select>
- id为接口中函数名。
- parameterType为方法的参数类型。
- resultType为字段传入数据库中查询获得的数据返回的为什么类型。
- concat('%',#{username},'%')的使用防止了SQL注入的产生。
3.PreparedStatement和Statement的区别?
联系:
- PreparedStatement继承与Statement,两者均为接口。
- PreparedStatement和Statement都可以实现对数据表的CURD操作。
区别:
- PreparedStatement是预编译的,可以使用占位符,批处理比Statement效率高。
- 在对数据库只执行一次性存取的时候,用Statement对象进行处理。使用PreparedStatement对象比Statement对象的开销大,对于一次性操作而言并不会带来额外的好处。
- Statement每次执行SQL语句,相关数据库都要执行SQL语句的编译。而PreparedStatement对SQL语句进行预编译,支持批处理。
- 执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象,通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候,PreparedStatement对象允许数据库预编译SQL语句,这样在随后的程序运行中可以节省时间并增加代码的可读性。
- 使用PreparedStatement较于Statement的好处:(一)拼串(二)SQL注入问题