mybatis与mysql的优点_Mybatis和JDBC的区别(优缺点)

Mybatis和JDBC的区别(优缺点)

JDBC是Java提供的一个操作数据库的API;

[b]MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。[/b]

Mybatis的优点:

1. 优化获取和释放

2.SQL统一管理,对数据库进行存取操作(修改SQL一个需要重新编译 一个不需要)

3.生成动态SQL语句

4.能够对结果集进行映射(一个是resultset一个可以映射成JavaBean对象、一个Map、一个List等等)

5.mybatis提供了一级和二级缓存(需要配置打开),强大的动态sql,自动化的session管理,都比手工维护来的方便和安全。

另外:

MyBatis使用SqlSessionFactoryBuilder来连接完成 JDBC需要代码完成的数据库获取和连接,减少了代码的重复。

mybatis的sql统一放在xml文件 优雅 统一 ,好管理

[b]mybatis的核心组件:[/b]

SqlSessionFactoryBuilder:会根据配置信息或代码来生成SqlSessionFactory;

SqlSessionFactory:依靠工厂来生成SqlSession;

SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口;

SQL Mapper:是MyBatis新设计的组件,由一个Java接口和XML文件构成,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。

构建SqlSessionFactory

每个MyBatis应用都是以SqlSessionFactory的实例为中心的,它的任务是创建SqlSession。SqlSesion类似于一个JDBC的Connection对象。

提供了2种方式创建SqlSessionFactory:一种是XML配置的方式,一种是代码的方式,推荐使用XML配置的方式。

[b]mybatis组件生命周期[/b]

SqlSessionFactory在MyBatis应用的整个生命周期中,每个数据库只对应一个SqlSessionFactory,可以实现一个工具类,以单例模式获取该对象。

SqlSession的生命周期在请求数据库处理事务的过程中,它是一个线程不安全的对象,在涉及多线程的时候要特别当心。它存活于一个应用的请求和操作,可以执行多条SQL,保证事务的一致性。

Mapper的作用是发送SQL,然后返回需要的结果,或者执行SQL修改数据库的数据,所以它应该在一个SqlSession事务方法之内,如同JDBC中一条SQL语句的执行,它最大的范围和SqlSession是相同的。

打赏

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
出现该问题可能是因为 MyBatis 对于 MySQL 的 Merge 语法的支持不太好。你可以尝试在 MyBatis 的配置文件中加入下面的配置: ```xml <settings> <setting name="useGeneratedKeys" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="aggressiveLazyLoading" value="false"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useCacheStatements" value="true"/> <setting name="cacheEnabled" value="true"/> <setting name="defaultStatementTimeout" value="25000"/> <setting name="defaultFetchSize" value="100"/> <setting name="lazyLoadingEnabled" value="false"/> <setting name="callSettersOnNulls" value="false"/> <setting name="logImpl" value="LOG4J"/> <setting name="configurationFactory" value="com.xxx.xxx.MybatisConfigurationFactory"/> <setting name="defaultScriptingLanguage" value="com.xxx.xxx.CustomLanguageDriver"/> </settings> ``` 其中,`CustomLanguageDriver` 是自定义的 MyBatis 语言驱动,可以通过继承 `XMLLanguageDriver` 实现。在自定义的语言驱动中,你可以重写 `merge()` 方法来实现 MySQL 的 Merge 语法。 另外,你还需要在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> ``` 这是集成了 Druid 连接池的依赖。你需要在 MyBatis 的配置文件中配置 Druid 连接池。例如: ```xml <dataSource type="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="root"/> <property name="maxActive" value="20"/> <property name="initialSize" value="1"/> <property name="maxWait" value="60000"/> <property name="minIdle" value="1"/> <property name="validationQuery" value="SELECT 1 FROM DUAL"/> <property name="testOnBorrow" value="false"/> <property name="testOnReturn" value="false"/> <property name="testWhileIdle" value="true"/> <property name="timeBetweenEvictionRunsMillis" value="60000"/> <property name="minEvictableIdleTimeMillis" value="25200000"/> <property name="filters" value="stat,wall"/> <property name="connectionProperties" value="druid.stat.mergeSql=true"/> </dataSource> ``` 注意,最后一行的 `druid.stat.mergeSql=true` 是用来开启 Druid 的 Merge SQL 统计功能的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值