刚开始学习Mybatis,跟着教程把各个知识过了一遍,每一项知识点都自己写了代码进行验证测试,并且将一些概念性的知识记录下,用于以后查阅。
Mybatis 是一个
数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种
半自动化的ORM实现
Mybatis 将
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
Mybatis VS Hibernate
Mybatis
|
Hibernate
|
SQL语句映射的框架(工具) | 主流ORM框架、提供从POJO到数据库表的全套映射机制 |
运行期不会自动生成SQL | 会自动生成SQL |
自动化程度低、手工映射SQL、灵活程度高 | 自动化程度高、映射配置复杂、api复杂,灵活性低 |
需要熟练掌握SQL语句 | 不必关注SQL底层语句开发 |
Mybatis Generator Mybatis的代码生成器
- 依赖jar包: mybatis-generator-core-1.3.2.jar、mysql-connector-java-5.0.7-bin.jar
- 使用指令:java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
- 配置模板: generator.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 驱动jar包,mysql使用mysql-connector-java-5.0.8-bin.jar -->
<classPathEntry location="mysql-connector-java-5.0.7-bin.jar" />
<context id="FreeCMS_Tables" targetRuntime="MyBatis3">
<!-- mysql配置 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis_test"
userId="root"
password="Mj3623811">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- model生成文件的存放位置 -->
<javaModelGenerator targetPackage="test.model"
targetProject="mybatis_study_src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- sqlmap生成文件的存放位置 -->
<sqlMapGenerator targetPackage="test.mapping"
targetProject="mybatis_study_src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- dao生成文件的存放位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="test.dao"
targetProject="mybatis_study_src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 要生成的表 -->
<table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
- 最终结果:
Mybatis 配置数据源——mybatis.xml的配置
Mybatis的XML配置文件包含了设置和影响Mybatis行为的属性,层次结构如下:
-configuration配置
- properties 配置文件中属性值
- settings 修改Mybatis运行时的行为方式
- typeAliases 为Java类型命名一个短的名字
- typeHandlers 类型处理器
- objectFactory 对象工厂
- plugins 插件
-environments 环境
- environment 环境变量
- transactionManager 事务管理器
- dataSource 数据源
- mappers 映射器
1 . properties
配置文件中的属性值,可用于在整个文件中使用,通过${ }进行引用
也可以引入外部定义的文件值
也可以通过子标签property设置值
<properties resource="com/mybatis/property/jdbc.properties"> <!-- 引入外部文件 -->
<property name="username" value="admin" /> <!-- 通过property标签设置值 -->
<property name="password" value="admin" />
</property>
在properties中定义的属性值可以在本文件内任何地方使用 ${ }引用
<dataSource type="POOLED"> <!-- 用来演示properties的作用 -->
<property name="driver" value="${driver}" /> <!-- 通过${}引用了上面properties定义的属性
...
</dataSource>
2 . settings
用于设置和改变Mybatis运行中的行为。
设置选项 | 描述 | 可用值 | 默认值 |
logImpl | 指定Mybatis使用的Logging的实现方法 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING |
Not Set
|
cacheEnabled | 全局性地启用或禁用所有在mapper配置文件中配置的缓存 | true | false | true |
lazyLoadingEnabled | 全局地启用或禁用延迟加载。当禁用时所有关联的配置都会立即加载 | true | false | true |
aggressiveLazyLoading | 当为true后,一个有延迟加载属性的对象的任何一个延迟属性被加载时,该对象所有属性都会被加载,否则所有属性是按需加载 | true | false | true |
multipleResultSetsEnabled | 允许或禁止从单一的语句返回多个结果集(需要驱动的兼容) | true | false | true |
useColumnLabel | 使用列的标签而不是列的名称。ps:不同的驱动程序的实现不同。 | true | false | true |
userGenerateKeys | 允许JDBC自动生成主键,true则强行自动生成主键。 | true | false | false |