第一章 初识Mybatis
1.1 框架概述
- 生活中“框架”
- 买房子
- 笔记本电脑
- 程序中框架【代码半成品】
- Mybatis框架:持久化层框架【dao层】
- SpringMVC框架:控制层框架【Servlet层】
- Spring框架:全能...
1.2 Mybatis简介
- Mybatis是一个半自动化持久化层ORM框架
- ORM:Object Relational Mapping【对象 关系 映射】
- 将Java中的对象与数据库中表建议映射关系,优势:操作Java中的对象,就可以影响数据库中表的数据
- Mybatis与Hibernate对比
- Mybatis是一个半自动化【需要手写SQL】
- Hibernate是全自动化【无需手写SQL】
- Mybatis与JDBC对比
- JDBC中的SQL与Java代码耦合度高
- Mybatis将SQL与Java代码解耦
- Java POJO(Plain Old Java Objects,普通老式 Java 对象)
- JavaBean 等同于 POJO
1.3 官网地址
- 文档地址:mybatis – MyBatis 3 | Introduction
- 源码地址:GitHub - mybatis/mybatis-3: MyBatis SQL mapper framework for Java
第二章 搭建Mybatis框架
导入jar包
编写配置文件
使用核心类库
2.1 准备
- 建库建表建约束
- 准备maven工程
2.2 搭建Mybatis框架步骤
- 导入jar包
1. <!--导入MySQL的驱动包--> 2. <dependency> 3. <groupId>mysql</groupId> 4. <artifactId>mysql-connector-java</artifactId> 5. <version>5.1.37</version> 6. </dependency> 7. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> 8. <dependency> 9. <groupId>mysql</groupId> 10. <artifactId>mysql-connector-java</artifactId> 11. <version>8.0.26</version> 12. </dependency> 13. 14. <!--导入MyBatis的jar包--> 15. <dependency> 16. <groupId>org.mybatis</groupId> 17. <artifactId>mybatis</artifactId> 18. <version>3.5.6</version> 19. </dependency> 20. <!--junit--> 21. <dependency> 22. <groupId>junit</groupId> 23. <artifactId>junit</artifactId> 24. <version>4.12</version> 25. <scope>test</scope> 26. </dependency>
- 编写核心配置文件【mybatis-config.xml】
- 位置:resources目标下
- 名称:推荐使用mybatis-config.xml
- 示例代码
1. <?xml version="1.0" encoding="UTF-8" ?> 2. <!DOCTYPE configuration 3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4. "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5. 6. <configuration> 7. <environments default="development"> 8. <environment id="development"> 9. <transactionManager type="JDBC"/> 10. <dataSource type="POOLED"> 11. <!-- mysql8版本--> 12. <!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--> 13. <!-- <property name="url" value="jdbc:mysql://localhost:3306/db220106?serverTimezone=UTC"/>--> 14. <!-- mysql5版本--> 15. <property name="driver" value="com.mysql.jdbc.Driver"/> 16. <property name="url" value="jdbc:mysql://localhost:3306/db220106"/> 17. <property name="username" value="root"/> 18. <property name="password" value="root"/> 19. </dataSource> 20. </environment> 21. </environments> 22. <!-- 设置映射文件路径--> 23. <mappers> 24. <mapper resource="mapper/EmployeeMapper.xml"/> 25. </mappers> 26. </configuration>
- 书写相关接口及映射文件
- 映射文件位置:resources/mapper
- 映射文件名称:XXXMapper.xml
- 映射文件作用:主要作用为Mapper接口书写Sql语句
- 映射文件名与接口名一致
- 映射文件namespace与接口全类名一致
- 映射文件SQL的Id与接口的方法名一致
- 示例代码
1. <?xml version="1.0" encoding="UTF-8" ?> 2. <!DOCTYPE mapper 3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5. <mapper namespace="com.atguigu.mybatis.mapper.EmployeeMapper"> 6. <select id="selectEmpById" resultType="com.atguigu.mybatis.pojo.Employee"> 7. SELECT 8. id, 9. last_name, 10. email, 11. salary 12. FROM 13. tbl_employee 14. WHERE 15. id=#{empId} 16. </select> 17. </mapper>
- 测试【SqlSession】
- 先获取SqlSessionFactory对象
- 再获取SqlSession对象
- 通过SqlSession对象获取XXXMapper代理对象
- 测试
2.3 添加Log4j日志框架
- 导入jar包
1. <!-- log4j --> 2. <dependency> 3. <groupId>log4j</groupId> 4. <artifactId>log4j</artifactId> 5. <version>1.2.17</version> 6. </dependency>
- 编写配置文件
- 配置文件名称:log4j.xml
- 配置文件位置:resources
- 示例代码
1. <?xml version="1.0" encoding="UTF-8" ?> 2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 3. 4. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 5. 6. <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> 7. <param name="Encoding" value="UTF-8" /> 8. <layout class="org.apache.log4j.PatternLayout"> 9. <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /> 10. </layout> 11. </appender> 12. <logger name="java.sql"> 13. <level value="debug" /> 14. </logger> 15. <logger name="org.apache.ibatis"> 16. <level value="info" /> 17. </logger> 18. <root> 19. <level value="debug" /> 20. <appender-ref ref="STDOUT" /> 21. </root> 22. </log4j:configuration>
第三章 Mybatis核心配置详解【mybatis-config.xml】
3.1 核心配置文件概述
- MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
3.2 核心配置文件根标签
- 没有实际语义,主要作用:所有子标签均需要设置在跟标签内部
3.3 核心配置文件常用子标签
- properties子标签
- 作用:定义或引入外部属性文件
- 示例代码
1. #key=value 2. db.driver=com.mysql.jdbc.Driver 3. db.url=jdbc:mysql://localhost:3306/db220106 4. db.username=root 5. db.password=root
1. <properties resource="db.properties"></properties> 2. 3. <environments default="development"> 4. <environment id="development"> 5. <transactionManager type="JDBC"/> 6. <dataSource type="POOLED"> 7. <!-- mysql8版本--> 8. <!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--> 9. <!-- <property name="url" value="jdbc:mysql://localhost:3306/db220106?serverTimezone=UTC"/>--> 10. <!-- mysql5版本--> 11. <property name="driver" value="${db.driver}"/> 12. <property name="url" value="${db.url}"/> 13. <property name="username" value="${db.username}"/> 14. <property name="password" value="${db.password}"/> 15. </dataSource> 16. </environment> 17. </environments>
- settings子标签
- 作用:这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
- mapUnderscoreToCamelCase属性:是否开启驼峰命名自动映射,默认值false,如设置true会自动将字段a_col与aCol属性自动映射
- 注意:只能将字母相同的字段与属性自动映射
- 类型别名(typeAliases)
- 作用:类型别名可为 Java 类型设置一个缩写名字。
- 语法及特点
1. <typeAliases> 2. <!-- 为指定类型定义别名--> 3. <!-- <typeAlias type="com.atguigu.mybatis.pojo.Employee" alias="employee"></typeAlias>--> 4. <!-- 为指定包下所有的类定义别名 5. 默认将类名作为别名,不区分大小写【推荐使用小写字母】 6. --> 7. <package name="com.atguigu.mybatis.pojo"/> 8. </typeAliases>
- Mybatis自定义别名
别名 | 类型 |
_int | int |
integer或int | Integer |
string | String |
list或arraylist | ArrayList |
map或hashmap | HashMap |
- 环境配置(environments)
- 作用:设置数据库连接环境
- 示例代码
1. <!-- 设置数据库连接环境--> 2. <environments default="development"> 3. <environment id="development"> 4. <transactionManager type="JDBC"/> 5. <dataSource type="POOLED"> 6. <!-- mysql8版本--> 7. <!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--> 8. <!-- <property name="url" value="jdbc:mysql://localhost:3306/db220106?serverTimezone=UTC"/>--> 9. <!-- mysql5版本--> 10. <property name="driver" value="${db.driver}"/> 11. <property name="url" value="${db.url}"/> 12. <property name="username" value="${db.username}"/> 13. <property name="password" value="${db.password}"/> 14. </dataSource> 15. </environment> 16. </environments>
- mappers子标签
- 作用:设置映射文件路径
- 示例代码
1. <!-- 设置映射文件路径--> 2. <mappers> 3. <mapper resource="mapper/EmployeeMapper.xml"/> 4. <!-- 要求:接口的包名与映射文件的包名需要一致--> 5. <!-- <package name="com.atguigu.mybatis.mapper"/>--> 6. </mappers>
- 注意:核心配置中的子标签,是有顺序要求的。