查验一下。
- #{ } :先编译 SQL 语句,再对占位符传值,底层是 PrepareedStatement 实现,可以防止 SQL 注入,比力常用
- ${ }:先进行SQL语句的拼接,然后再对SQL语句进行编译,底层是 Statement 实现,这种方式存在 SQL注入现象,SQL注入的风险,简单的说就是,直接将传入的值拼接为了SQL语句,然后再实行的)。只有在需要进行SQL语句关键字拼接的情况下才会用到。
- 简单的说一个区别就是:#{} 传的值是带有 '' 单引号的,而 ${} 传的值是(直接就是值,没有单引号,或者是双引号,两个都没有)
{}
${}通过实行可以清楚的看到,sql 语句中是带有 ? 的,这个 ? 就是各人在JDBC中所学的占位符,专门用来接收值的。
使用 ${} 拼接上的结果为:select * from t_log_20220902; 直接就是 20220902 的值,没有加单引号/双引号。使用 #{ } 的方式是会带上 ‘’ 单引号的。
使用 #{} 拼接上的结果为:select * from t_log_‘20220902’; 加上的单引号后拼接上去,t_log_20220902是一个数据表名的,加了单引号后,MySQL 就找不到该数据表了,编译无法通过了。3.1.2 批量删除
假设如今使用in的方式处置惩罚,前端传过来的字符串:1, 2, 3以是我们要接纳 ${} ,不加单引号的形式。
如果使用mybatis处置惩罚,应该使用#{} 还是 ${}
使用#{} :delete from t_user where id in('1,2,3') 会加上单引号, 实行错误:1292 - Truncated incorrect DOUBLE value: '1,2,3'
使用${} :delete from t_user where id in(1, 2, 3),实行乐成
使用 <?xml version="1.0" encoding="UTF-8" ?>5. mappers 路径设置的使用
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
</mapper>还可以将这个包下的所有的类的全部自动起别名,别名就是简名,不区分大小写
,所有的别名不区分大小写。但是:namespace 不能使用别名机制
同时需要按照一定的顺序放置,放到指定的顺序当中去
userGeneratedKeys = "true" 使用自动天生的主键值,false 则是不使用自动天生的主键值了
keyProperty="id" 指定主键值赋值给POJO类(ORM映射)对象的哪个属性,这个就表现将主键值给Car对象的 id属性。
留意:这个 keyProperty 指定的值,一定要和对应上的 pojo 对象类上的属性一致,不然,不可的。
9. 最后:
- { } 与 ${ } 的区别和使用
复制代码
- - #{ } :先编译 SQL 语句,再对占位符传值,底层是 PrepareedStatement 实现,可以防止 SQL 注入,比较常用
- - ${ }:先进行SQL语句的拼接,然后再对SQL语句进行编译,底层是 Statement 实现,这种方式存在 SQL注入现象,SQL注入的风险,简单的说就是,直接将传入的值拼接为了SQL语句,然后再执行的)。只有在需要进行SQL语句关键字拼接的情况下才会用到。
- - 简单的说一个区别就是:#{} 传的值是带有 '' 单引号的,而 ${} 传的值是(直接就是值,没有单引号,或者是双引号,两个都没有)
- 什么情况下必须使用 $
复制代码
- 拼接表名
- 批量删除
- 模糊查询
- typeAliases 别名定义的使用,留意:接口,一定要为全限定类名(带有包名),不可以用别名机制 ,发起接纳第二种 package 方式,,同时留意:typeAliases 的正确顺序和位置,可以参考报错信息,进行修正。
复制代码
- <typeAliases>
- <mappers>
- <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
- <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
- <mapper resource="org/mybatis/builder/PostMapper.xml"/>
- </mappers>
- <mappers>
- <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
- <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
- <mapper resource="org/mybatis/builder/PostMapper.xml"/>
- </mappers> <package name="com.rainbowsea.mybatis.pojo"/>
- </typeAliases>
- mappers 路径设置的使用 ,发起接纳 package 标签的方式,留意条件,两个条件的一致性。
复制代码
- - SQL映射文件和mapper接口放在同一个目录下。
- - SQL映射文件的名字也必须和mapper接口名一致。
- 在 IDEA 中自定义配置文件模板
- 插入数据时获取自动天生的主键的值,**前提是:在对应数据表中的主键是自动天生的(自增的方式才行)。 **
复制代码
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="">
- </mapper><?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="">
- </mapper><?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="">
- </mapper>insert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})<?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="">
- </mapper>
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时候再次相遇。”
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |