一、什么是mybatis?
MyBatis 是一款优秀的半自动的ORM持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
二、MyBaits与JDBC
JDBC核心对象
DriverManager,数据库驱动管理对象
Connection,数据库连接对象
Statement | PrepareStatement ,操作数据库SQL语句对象
ResultSet,结果集对象
MyBaits核心对象
SqlSession对象,该对象包含了执行SQL语句的所有方法,例如JDBC里面Connection
Executor接口,将传递过来的参数动态生成SQL语句,负责查询缓存。
MappedStatement对象,该对象负责对SQL封装,用于存储需要映射的SQL语句及参数等信息
ResultHandler对象,用户返回结果集合,封装成最红想要的数据类型,可以自定义返回类型
三、MyBaits执行流程
依赖:
//mybatis依赖配置 implementation 'org.mybatis:mybatis:3.5.15' //MySQL连接驱动 implementation 'com.mysql:mysql-connector-j:8.2.0
mybatis核心组件:
①SqlSessionFactoryBuilder:构建SqlSessionFactory的构建器,采用了分布构建方式进行构建
②SqlSessionFactory:生产SqlSession的工厂(工厂设计模式),在项目的生命周期应该以单例的形式进行存在
③SqlSession:mybatis围绕SqlSession进行工作,
提供:发送执行sql语句;
获取mapper映射器;
控制事务
④mapper映射器:接口+映射文件(注解或者xml)xml常用
注意:在xml中&是特殊符号,有具体的语义,要使用&表示连接
mybatis不支持方法重载
因为MyBatis动态代理寻找策略是:全限定名+方法名,不涉及参数,所以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核心配置文件--> <configuration> <!--通过 properties文件进行配置datasource数据源--> <properties resource="datasource.properties"/> <!--settings:会改变mybatis的运行时行为 logImpl:指定mybatis所有日志的具体实现,未指定时将自动查找 mapUnderscoreToCamelCase:驼峰映射 autoMapperBehavior:指定mybatis应如何自动映射列到字段或属性 (NONE:关闭自动映射;PARTIAL只会自动映射没有定义嵌套结果映射的字段;FULL会自动映射任何) ..... --> <settings> <!-- 开启驼峰映射 默认是关闭的--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!--类型别名:不区分大小写--> <typeAliases> <!-- 针对类型单独进行别名配置--> <typeAlias type="com.monster.pojo.Student" alias="student"/> <!-- 位于指定包下指定别名,别名即为类的简单名称(mybatis 的别名不区分大小写)--> <package name="com.monster.pojo"/> </typeAliases> <!--类型处理器:处理Java对象属性和数据表字段类型不一致的类型转换 BooleanTypeHandler FloatTypeHandler BigDecimalTypeHandler EnumTypeHandler: 数据库兼容的字节流类型【VARCHAR 或任何兼容的字符串类型,用来存储枚举的名称(而不是索引序数值)】 .....等等 --> <typeHandlers> <!-- 单独加载 自定义类型转换处理器--> <!-- <typeHandler handler="com.monster.typehandler.GenderTypeHandler"--> <!-- javaType="com.monster.enums.Gender"/>--> <!-- mybatis自带的类型转换器(这儿是枚举转换器)--> <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.monster.enums.Gender"/> <!--包加载--> <!-- <package name="com.monster.typehandler"/>--> </typeHandlers> <!-- 自定义对象工厂:当创建结果集的时候,mybatis会使用一个对象工厂创建这个结果集的实例,然后实现里面的方法 --> <objectFactory type="com.monster.factory.MyObjectFactory"/>
<!-- 插件(plugins):允许你在映射语句执行过程中的某一点进行拦截调用。
-->
<!-- 环境配置 --> <environments default="development"> <environment id="development"> <!-- 事务管理器(需要实现Transaction接口) JDBC:采用JdbcTransaction生成的JdbcTransaction对象实现,以JDBC的方式对数据库的事务进行操作 MANAGED:采用ManagedTnansaction生成的WanagedTransaction对象实现。它的提交和回滚不需要任何操作,而是把事务交给容器处理。 在默认情况下会自动关闭连接,然而容器并不希望这样做,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为 --> <transactionManager type="JDBC"/> <!-- 数据源环境 POOLED:连接池 UNPOOLED:非连接池的方式创建连接 JNDI:在外部(容器)配置数据源 --> <dataSource type="POOLED"> <!-- 连接驱动--> <property name="driver" value="${driverClassName}"/> <!-- 在xml中&是特殊符号,有具体的语义,要使用&表示连接--> <property name="url" value="jdbc:mysql://localhost:3306/studentmanage?userUnicode=true&characterEncoding=UTF8"/> <property name="username" value="longhj"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 映射器 ①类名 ②包名 ③注解映射 --> <mappers> <!--<mapper resource="com/monster/mapper/StudentMapper.xml"/> 顺序:mapper >> package --> <!--通过注解映射的mapper直接被扫描,不需要通过xml注册--> <!-- 省略:<mapper class="com.monster.mapper.BookMapper"/>--> <package name="com/monster/mapper"/> </mappers> </configuration>