深圳制作网站开发费用,河北省住房和城乡建设厅官方网站,wordpress首页文件,wordpress管理员改为投稿者MyBatis 是一个半 ORM#xff08;对象关系映射#xff09;框架#xff0c;它内部封装了 JDBC#xff0c;开发时只需要关注 SQL 语句本身#xff0c;不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
什么是 MyBatis#xff1f; MyBatis 是一个半…MyBatis 是一个半 ORM对象关系映射框架它内部封装了 JDBC开发时只需要关注 SQL 语句本身不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
什么是 MyBatis MyBatis 是一个半 ORM对象关系映射框架它内部封装了 JDBC开发时只需要关注 SQL 语句本身不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 MyBatis 与 Hibernate 有什么不同 MyBatis 和 Hibernate 都是 ORM 框架但 MyBatis 是半自动的需要手动编写 SQL 语句而 Hibernate 是全自动的可以自动生成 SQL 语句。MyBatis 更加灵活适合对 SQL 优化有较高要求的项目而 Hibernate 适合对数据库操作不熟悉或者对 SQL 优化要求不高的项目。 MyBatis的优缺点? 优点 1)易于上手和掌握 2)Sql写在xml里面便于统一管理和优化 3)减少Sql与程序代码的耦合 4)提供xml标签支持动态Sql编写 缺点 1)Sql工作量大尤其是字段多关联表多时更是如此 2)Sql依赖于数据库导致数据库移植性差 3)由于xml里面标签id必须唯一导致DAO中方法不支持方法重载。所以dao层必须是接口 mybatis的基本工作流程? 1.读取配置文件配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。 2.有了这些信息就能创建SqlSessionFactorySqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡 3.SqlSessionFactory建立SqlSession,目的执行sql语句SqlSession是过程级,一个方法中建立,方法结束应该关闭 4.当用户使用mapper.xml文件中配置的的方法时mybatis首先会解析sql动态标签为对应数据库sql语句的形式并将其封装进MapperStatement对象然后通过executor将sql注入数据库执行并返回结果。 5.将返回的结果通过映射包装成java对象。 总结 创建SqlSessionFactory 通过SqlSessionFactory创建SqlSession 通过SqlSession执行数据库操作 调用session.commit()提交事务 调用session.close()关闭事务 MyBatis应用中#与$有什么异同 相同点都是通过get来取值的 不同点$传过去的字符串不带引号#号带引号 1. #{}是预编译处理${}是字符串替换。 2. Mybatis在处理#{}时会将sql中的#{}替换为?号调用PreparedStatement的set方法来赋值 3. Mybatis在处理${}时就是把${}替换成变量的值相当于字符串拼接 4. 使用#{}可以有效的防止SQL注入提高系统安全性。 mybatis的缓存机制一级二级介绍一下? 1.一级缓存默认开启 SqlSession级别的缓存实现在同一个会话中数据的共享 一级缓存的生命周期和SqlSession一致 当有多个SqlSession或者分布式环境下数据库写操作会引起脏数据。 2.二级缓存默认不开启需手动开启 SqlSessionFactory级别的缓存实现不同会话中数据的共享是一个全局变量 可自定义存储源如Ehcache 当开启缓存后数据查询的执行的流程是二级缓存一级缓存数据库 不同于一级缓存二级缓存可设置是否允许刷新和刷新频率实现 JDBC编程有哪些不足之处MyBatis是如何解决这些问题的 1 数据库连接的创建、释放频繁造成系统资源浪费从而影响了性能如果使用数据库连接池就可以解决这个问题。当然JDBC同样能够使用数据源。 解决在xml中配置数据连接池使用数据库连接池管理数据库连接。 2 SQL语句在写代码中不容易维护事件需求中SQL变化的可能性很大SQL变动需要改变JAVA代码。 解决将SQL语句配置在mapper.xml文件中与java代码分离。 3 向SQL语句传递参数麻烦因为SQL语句的where条件不一定可能多也可能少占位符需要和参数一一对应。 解决Mybatis自动将java对象映射到sql语句。 4 对结果集解析麻烦sql变化导致解析代码变化且解析前需要遍历如果能将数据库记录封装成pojo对象解析比较方便。 解决Mbatis自动将SQL执行结果映射到java对象。