Mybatis学习五($和#区别以及其他tips)

Posted murmansk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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语句内容]]>标签即可解决此问题

 

以上是关于Mybatis学习五($和#区别以及其他tips)的主要内容,如果未能解决你的问题,请参考以下文章

学习的一些mybatis

Hibernate 与 mybatis 区别

hibernate与mybatis的区别

一起了解Hibernate与Mybatis的区别优缺点对比

mybatis学习笔记(一) for 概念

MyBatis学习 之 五MyBatis配置文件