| bind 部分使用 SQL concat() 函数   <select id="getUserListLikeConcat" resultType="org.example.User">          SELECT * FROM user WHERE name LIKE concat ('%', #{name}, '%')      </select> 
 除了注入问题之外,这里还需要对用户的输入进行过滤,不允许有通配符,否则在表中数据量较多的时候,假设用户输入为 %%,会进行全表模糊查询,严重情况下可导致 DOS 参考: http://www.tothenew.com/blog/sql-wildcards-is-your-application-safe IN 条件 
     使用 <foreach> 和 #{} Mapper 接口方法    List<User> getUserListIn(@Param("nameList") List<String> nameList); 
 xml 配置文件   <select id="selectUserIn" resultType="com.exaple.User">        SELECT * FROM user WHERE name in        <foreach item="name" collection="nameList"                  open="(" separator="," close=")">              #{name}        </foreach>      </select> 
 具体可参考 http://www.mybatis.org/mybatis-3/dynamic-sql.html foreach 部分 limit 语句 List<User> getUserListLimit(@Param("offset") int offset, @Param("limit") int limit); 
 xml 配置文件   <select id="getUserListLimit" resultType="org.example.User">         SELECT * FROM user limit #{offset}, #{limit}     </select> 
 JPA & Hibernate 介绍 JPA: 
     全称 Java Persistence API ORM (object-relational mapping) 持久层 API,需要有具体的实现 更多请参考: https://en.wikipedia.org/wiki/JavaPersistenceAPI Hibernate: 更多请参考 http://hibernate.org。 说明 这里有一种错误的认识,使用了 ORM 框架,就不会有 SQL 注入。而实际上,在 Hibernate 中,支持 HQL (Hibernate Query Language) 和 native sql 查询,前者存在 HQL 注入,后者和之前 JDBC 存在相同的注入问题,来具体看一下。 HQL HQL 查询例子   Query<User> query = session.createQuery("from User where name = '" + name + "'", User.class);      User user = query.getSingleResult(); 
 这里的 User 为类名,和原生 SQL 类似,拼接会导致注入。 正确的用法: 
     位置参数 (Positional parameter)    Query<User> query = session.createQuery("from User where name = ?", User.class);      query.setParameter(0, name); 
 Query<User> query = session.createQuery("from User where name = :name", User.class);     query.setParameter("name", name); 
 
     命名参数 list (named parameter list)    Query<User> query = session.createQuery("from User where name in (:nameList)", User.class);     query.setParameterList("nameList", Arrays.asList("lisi", "zhaowu")); 
 User user = new User();     user.setName("zhaowu");     Query<User> query = session.createQuery("from User where name = :name", User.class);     // User 类需要有 getName() 方法     query.setProperties(user); 
 Native SQL (编辑:鹰潭站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |