zoukankan      html  css  js  c++  java
  • Mybatis学习五($和#区别以及其他tips)

    1.$和#区别

    1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id ='1'.

    2 $是将传入的数据直接显示生成sql语句,eg:select id,name,age from student where id =${id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.

    3 使用#可以很大程度上防止sql注入。(语句的拼接 #{xxx},使用的是PreparedStatement,会有类型转换,比较安全 简单的说就是#{}是经过预编译的,是安全的,${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。)

    4 但是如果使用在order by 中就需要使用 $.

    5 在大多数情况下还是经常使用#,但在不同情况下必须使用$.

    2.添加数据后返回此条数据的ID

     在句中加入相应属性

    useGeneratedKeys="true" keyProperty="id"
    <insert id="addUser" parameterType="com.zhiyou100.zhl.bean.Users" useGeneratedKeys="true" keyProperty="id">
            insert into users(name,age) value(#{name},#{age});
    </insert>

    然后进行测试即可获得此id值

    1 @Test
    2 void testAdd() {
    3     Users u=new Users("什么",21);
    4     usersdao.addUser(u);
    5     System.out.println(u.getId());
    6 } 

    3.sql语句中的大于号与小于号问题

    <select id="selByAge" parameterType="map" resultType="com.zhiyou100.zhl.bean.Users">
            <![CDATA[select * from users where age>=#{min} and age<=#{max}]]>
    </select> 

    加入<![CDATA[sql语句内容]]>标签即可解决此问题

     
  • 相关阅读:
    爱迪生从事过300+个行业,并且硕果累累,诀窍不过以下3点……
    【转载】这些都是套路,但对标题党吸睛100%有用……
    【转载】有人出天价买他的一个文案标题,今天10min教会你……
    一张图看懂开源许可协议
    Git高级用法
    时频域,从傅里叶变换谈起
    【转载】数字图像处理
    摄影入门
    人像摄影
    C++语法
  • 原文地址:https://www.cnblogs.com/murmansk/p/11442972.html
Copyright © 2011-2022 走看看