Mybatis是一个可以自定义SQL,存储过程和高级映射的持久层框架。
Mybatis只使用简单的XML和注解来配置和映射基本数据类型、Map接口和POJO到数据库记录
一个MyBatis是以一个SqlSessionFactory实例为中心。一个SqlSessionFactory实例可以使用SqlSessionFactoryBuilder来创造。
从 配置类中创造SqlSessionFactory实例,可以使用xml配置文件来生成一个SqlSessionFactory实例
Resources:从类路径和其他地址中加载资源
XML文件包含了许多MyBatis的核心设置,包括一个获取数据库连接(Connection)实例的数据源(DataSource),和一个决定事务作用域和操作的TrancaxtionManager。
mappers项中包含了一系列SQL语句映射定义的xml文件。
映射类是包含了SQL映射注解的Java类,可以用来取代XML。
Mybatis会自动查找和加载已经存在的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><!--1、mybatis可以使用properties来引入外部properties配置文件 resource:引入类路径下的资源 url:引入网络路径或磁盘下的资源 --> <properties resource="dbconfig.properties"></properties> <!--2、settings包含很多重要的设置项 setting:用来设置每一个设置项 name:设置项名 value:设置项取值 --> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!-- 3、typeAliases:别名处理器,可以为java类型起别名 --> <typeAliases> <!--typeAlias:为某个java类型起别名 type:指定要起别名的类型全类名,默认别名就是类名小写,employee alias:指定新的别名 --> <!-- <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"></typeAlias>--> <!-- 批量起别名 package:为某个包下的所有类批量起别名 name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个别名) 别名不区分大小写 --> <package name="com.atguigu.mybatis.bean"/> <!-- 批量起别名的情况下,如果别名重复,使用@Alias注解为某个类型指定新的别名--> </typeAliases><!-- 4、environments:环境们,mybatis可以配置多种环境
environment:配置一个具体的环境信息,必须有两个标签,id代表当前环境的唯一标识 transactionManager:事务管理器 type:事务管理器的类型 JDBC(JDBCTransactionFactory)|MANAGED(MANAGEDTransactionFactory) 自定义事务管理器:实现TransactionFactory接口,type指定为全类名 datasource:type数据源:UNPOOLED( UNPOOLEDDataSourceFactory) POOLED(POOLEDDataSourceFactory)默认使用 JNDI( JndiDataSourceFactory) myabtis自带的数据源 自定义数据源:实现DataSourceFactory,type为全类名 --> <!--<environments default="test"> <environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment></environments> --> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment></environments> <!-- 5、databaseIdProvier:支持多数据厂商的 type="DB_VENDOR":vendorDatabaseIdProvider 作用就是的得到数据库厂商的标识(驱动getDatabaseProviderName()),mybatis就能根据数据库厂商的标识来执行不同的sql --><!-- 将写好的Sql 文件配置到mybatis的全局映射文件中-->
<!-- 6、mapper:将sql映射注册到全局配置中 resource:引用类路径下的sql映射文件 url:引用网路路径下或磁盘路径下的资源file:///var/mapper/AuthorMapper.xml class:引用注册接口 1、有sql映射文件,映射文件名必须和接口同名,并且放在同一目录下 2、没有sql映射文件,所有的sql利用注解写在接口 比较重要的,复杂的DAO接口写sql映射文件 不重要,简单的DAO接口为了开发快速可以使用注解 --><mappers> <mapper resource="mybatis/mapper/EmployeeMapper.xml"/> <mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"></mapper></mappers></configuration>创建SqlSessionFactory实例
public SqlSessionFactory getSqlSessionFactory() throws IOException {
//获取xml文件 String resource = "mybatis-config.xml"; //创建数据流 InputStream inputStream = Resources.getResourceAsStream(resource); //生成sqlSessionFactory实例 return new SqlSessionFactoryBuilder().build(inputStream);}
使用SqlSessionFactory实例
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();Mybatis步骤:1、mybatis核心配置文件配置
2、POJO模型创建
3、映射文件配置
4、获取SqlSessionFactory
5、获取SqlSession
6、CRUD操作
7、事务操作
8、关闭sqlSession
1、接口式编程 原生:DAO====》DaoImpl
mybatis:mappen====》xxmapper.xml
2、sqlSession代表和数据库的一次会话,用完必须关闭(每次使用都应该取获取新的对象)
3、sqlSession和connection一样都是非线程安全
4、mapper接口没有实现类,但是 mybatis会为这个接口生成一个代理对象
5、两个重要的配置文件: 1、mybatis的全局配置文件:包含数据库连接池信息,事务管理
2、sql映射文件:保存每一个sql语句的映射信息(将sql抽取出来生成一个单独的文件)