mybatis 是一个优秀的基于java的持久层框架,它内部封装了 jdbc,使开发者只需要关注sql语句本身,而不需要花费精力 去处理加载驱动、创建连接、创建statement等繁杂的过程。
MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射
ORM(Object Relational Mapping 对象关系映射):指的是持久化数据和实体对象的映射模式。
Mybatis的隔离级别:
1.读未提交(Read uncommitted):脏读
脏读: 一个事务在执行的过程中读取到了其他事务还没有提交的数据
2.读已提交(Read committed):
可避免 脏读 的发生。
两次读取的数据不一样,自己事务没有提交的时候可以读取别的已经提交的事务。
3.可重复读(Repeatable read):幻读
MySql默认隔离级别。自己事务没有提交的时候,读不到别的已经提交的事务。
4.串行化(Serializable ):
可避免 脏读、不可重复读、幻读 的发生。
Mybatis中#和$占位符的区别
#占位符的特点
-
MyBatis处理 #{ } 占位符,使用的 JDBC 对象是PreparedStatement 对象,执行sql语句的效率更高。
-
使用PreparedStatement 对象,能够避免 sql 注入,使得sql语句的执行更加安全。
-
#{ } 常常作为列值使用,位于sql语句中等号的右侧;#{ } 位置的值与数据类型是相关的。
$占位符的特点
-
MyBatis处理 ${ } 占位符,使用的 JDBC 对象是 Statement 对象,执行sql语句的效率相对于 #{ } 占位符要更低。
-
${ } 占位符的值,使用的是字符串连接的方式,有 sql 注入的风险,同时也存在代码安全的问题。
-
${ } 占位符中的数据是原模原样的,不会区分数据类型。
-
${ } 占位符常用作表名或列名,这里推荐在能保证数据安全的情况下使用 ${ }。
#和$两者含义不同
#会把传入的数据都当成一个字符串来处理,会在传入的数据上面加一个双引号来处理。
而$则是把传入的数据直接显示在sql语句中,不会添加双引号。
MyBatis 与Hibernate 有哪些不同?
MyBatis 和 Hibernate 是两种在 Java 开发中常用的持久化框架,
相同点:
他们都是用于简化 Java 应用程序与数据库之间的交互,从而实现数据持久化的目的。
无论是 MyBatis 还是 Hibernate,都支持将 Java 对象映射到数据库表,使开发者可以使用面向对象的方式操作数据。
两者都提供了事务管理功能,可以确保在数据库操作中的一系列操作要么全部成功要么全部失败,从而保持数据的一致性和完整性。配置相对复杂,
MyBatis 和 Hibernate 都支持缓存机制,可以减少数据库访问次数,提高性能。
不同点:
Hibernate 是全自动的 ORM 框架,它会自动生成 SQL 语句并执行,开发者无需编写 SQL,可以通过 HQL(Hibernate Query Language)进行查询。但在某些情况下,可能会导致开发者失去对 SQL 查询执行的直接控制。
MyBatis 则是半自动的 ORM 框架,开发者需要手动编写 SQL 或者使用 MyBatis 的 XML 配置文件来映射 SQL 语句,从而更加灵活地控制 SQL 查询。配置较为简单,可以直接控制 SQL 查询的执行方式,并且可以使用动态 SQL 构建动态查询。