Mybatis的使用注意(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq125281823/article/details/84935878

一,mybatis中#和$符号的区别

​ 1)#{}

​ 使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入,并且在使用#{}时形成的sql语句,已经带有引号

例,select * from table1 where id=#{id} 在调用这个语句时我们可以通过后台看到打印出的sql为:select * from table1 where id=‘2’ 加入传的值为2.也就是说在组成sql语句的时候把参数默认为字符串。

​ 2)${}

​ 使用 s q l s e l e c t f r o m t a b l e 1 w h e r e i d = {}时的sql**不会当做字符串处理**,是什么就是什么,如上边的语句:select * from table1 where id= {id} 在调用这个语句时控制台打印的为:select * from table1 where id=2 ,假设传的参数值为2

从上边的介绍可以看出这两种方式的区别,我们最好是能用#{}则用它,因为它可以防止sql注入,且是预编译的.

在需要原样输出时才使用${},如:

select * from ${tableName} order by ${id} 这里需要传入表名和按照哪个列进行排序 ,加入传入table1、id 则语句为:select * from table1 order by id

如果是使用#{} 则变成了select * from ‘table1’ order by ‘id’ 我们知道这样就不对了。

另,在使用以下的配置时,必须使用#{}

<select id="selectMessageByIdI" parameterType="int" resultType="Message">
    select * from message where id=#{id};
</select>
<!--在parameterType是int时,sql语句中必须是#{}。-->

二,mybatis与jdbc的区别

##### 1)定义

​ jdbc:

​ java database connection,是java提供的用于与数据库连接的一套接口和规范API,是最底层的数据库操作,其中规定了java类型与数据库类型的转换

​ 由于这是一套规范接口和类,所以每个数据库厂商可以有自己的实现.

​ mybatis:

​ 是一个支持普通sql查询,存储过程和高级映射的轻量级持久成框架

​ 是对jdbc的封装,底层还是jdbc

2)对比

​ mybatis几乎消除了所有jdbc复杂的代码和参数的手工设置以及对结果集的手动封装.

​ 可以xml配置将接口和pojo与数据库中记录互相映射

​ 一般访问数据库时通过连接池来访问,抽象一个datasorce来解耦具体的连接池实现

​ 简单的结果集映射

​ 动态和复杂逻辑的sql的简单配置

3)持久层

​ 持久化:把数据保存到可掉电的存储设备中

​ 持久层:向或者从一个或者多个数据存储器中存储或者获取数据的一类组件

这一层经常用到把数据库的表列封装成对象,或者domain模型,所以能够简单快速的解决从存储设备到内存的对象的映射与转换的框架就是一个非常好的框架,所以持久层框架都必须包含转换操作

​ 数据存储与内存中对象的转换涉及到一个问题:对象从内存中变成存储器中数据,这个过程是不可逆的,然后存储器中的数据怎么恢复到内存中的对象,就不能很好的转换,所以出现了序列化的问题

猜你喜欢

转载自blog.csdn.net/qq125281823/article/details/84935878