什么是mybatis
mybatis是一种持久型框架,就是半成品,对很多的底层操作进行了封装,开发人员只需按照它的规范进行配置就可以快速的实现需求。类似的持久型框架还有Hibernate。
在对jdbc的使用中,有一些问题存在:
(1)频繁连接数据库,影响系统的性能
(2)sql语句硬编码在Java代码中。实际中sql的变化很大
(3)使用preparedStatement向占有位符号传参也存在硬编码问题
(4)查询的结果集是硬编码
为了解决以上问题,可以通过使用mybatis解决
mybatis工作原理
(1)导入jar包:MySQL、MyBatis
(2)MyBatis的全局配置文件(.xml):配置了mybatis的运行环境等信息。
(3)sql映射文件(.xml):配置了操作数据库的sql语句。这个文件需要在全局配置文件中加载
(4)构造SqlSessionFactory(会话工厂)
(5)由会话工厂创建sqlSession(会话),所有对数据库的操作由该会话来完成
(6)由sqlSession调用Executor执行器
(7)MappedStatement完成sql映射文件、参数、查询结果与pojo之间的映射的转换
idea创建Maven项目中整合MyBatis
项目结构
在idea中创建Mybatis全局配置文件、sql映射文件
sql映射文件(后缀名为properties)
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/info?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
mysql.user=root
mysql.password=010220
mybatis全局配置文件
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 从.properties文件中读取数据库的配置信息,不用硬编码 -->
<properties resource="jdbc.properties"></properties>
<!--配置MyBatis运行的全局参数-->
<settings>
<setting name="logImpl" value="LOG4J"/>
<!-- 开启懒加载(开启延迟加载)-->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 关闭实时加载-->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!--自定义别名-->
<typeAliases>
<!-- 批量配置别名 -->
<package name="com.pojo"/>
<!-- 配置单个别名 -->
<!--typeAlias type="com.pojo.Student" alias="Student"/ -->
</typeAliases>
<!--配置数据库环境 -->
<environments default="mysql">
<environment id="mysql">
<!--配置事务管理器-->
<transactionManager type="JDBC"/>
<!--配置数据源-->
<dataSource type="POOLED">
<property name="driverClassName" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.user}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!--映射器;告诉MyBatis在哪里找映射文件-->
<mappers>
<!-- 使用类路径查找映射文件 <mapper resource="com/mapper/StudentMapper.xml"/>-->
<!-- 使用接口名 <mapper class="com.mapper.StudentMapper"/>-->
<!--使用本地文件的绝对路径 <mapper url="file:///c:/xxx/xxxmapper.xml"/>-->
<!--使用包名-->
<package name="com.mapper"/>
</mappers>
</configuration>
1、properties resource:
<properties resource="jdbc.properties"></properties>
可以从.properties文件中读取数据库的配置信息
不用硬编码;方便统一管理
2、settings:
配置MyBatis运行的全局参数
(1)开启二级缓存
<setting name="cacheEnabled" value="true"/>
(2)开启延迟加载
<setting name="lazyLoadingEnabled" value="true"/>
3、typeAliases:
自定义别名。在映射文件中配置sql语句的resultType、parameterType时要使用全类名。通过配置别名可以方便开发
(1)配置单个别名
<typeAlias type="com.pojo.Student" alias="Student"/>
(2)批量配置别名
<package name="com.pojo"/>
4、typeHandlers:
完成jdbc类型和java类型的转换
5、environments:
配置数据库环境
(1)<transactionManager type="JDBC"/>:
配置事务管理器
A、jdbc:直接使用jdbc的事务提交和回滚,依赖于数据源
B、managed:自己不提交和回滚一个连接(什么都不做),而是让容器来管理事务
(2)<dataSource type="POOLED">:
配置数据源
A、POOLED:使用jdbc的数据库连接池对数据库连接对象进行管理
B、UNPOOLED:不使用数据库连接池,需要时建立连接,使用结束后关闭连接
C、JDNI:使用web服务器来实现数据库的连接,由Web服务器在外部配置数据源
6、mappers:
映射器。告诉MyBatis在哪里找映射文件
(1)使用类路径查找映射文件
<mappers>
<mapper resource="com/mapper/StudentMapper.xml"></mapper>
</mappers>
(2)使用本地文件:使用本地文件的绝对路径
<mapper url="file:///c:/xxx/xxxmapper.xml"/>
(3)使用接口名
<mapper class="com.mapper.StudentMapper"/>
(4)使用包名
<package name="com.mapper"/>