mybatis


JDBC

缺点:

  • 非对象,修改表需要重写api。没用连接池,操作数据库需要频繁的创建和关联链接
  • 修改sql的话需要重编译java,不利于系统维护
  • 使用PreparedStatement预编译对变量进行编号,序号不利于维护
  • 返回结果集需要硬编码

MyBatis

宏观

连接数据库。

数据源:Driver, URL, username, password

执行语句:CRUD

操作:Connection, PreparedStatement, ResultSet

全局配置

mybatis_config.xml

功能:分页,监控,日志,记录sql,数据埋点,逆向工程

<plugin interceptor="SqlPrint"> </plugin>

获取数据库源

XMLConfigBuilder中parseConfiguration() 解析mybatis全局配置标签。environmentsElement()解析数据库源。

获取SQL

SqlSessionFactoryBuilder.build (java.io.InputStream)

​ SqlSessionFactoryBuilder.java

​ XMLConfigBuilder.parse

​ XMLConfigBuilder.parseConfiguration

​ XMLConfigBuilder.mapperElement

​ XMLConfigBuilder.buildStatemnetFromContext

​ addMappedStatement

mybatis加载mappers有4种方式:

resource, url, class, package

其中package优先级最高。

mapperElement()解析数据库源。

操作数据库

openSession()

mybatis有3种执行器:

simple, batch, reuse。默认是simple。

注解 vs XML

XML的优先级是比annotation高的。

正常interface无法实例化,但是在mybatis中的Interface加了注释以后会被执行。因为底层通过加代理进行了实例化。

Annotation: 不适合复杂sql。不方便管理sql

XML:条件不确定的查询。容易写错,特殊字符转义。

SQL语句替换

MappedStatement.java中getBoundSql()方法。

SqlSourceBuilder.java中调用parse()方法进行了替换。


Author: csy99
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source csy99 !
评论
  TOC