1、MyBatis是什么?
MyBatis源自于IBatis,是一个持久层框架,封装了jdbc操作数据库的过程,使得开发者只用关心sql语句,无需关心驱动加载、连接,创建statement,手动设置参数,结果集检索等jdbc底层操作。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
MyBatis的数据源,事务属性,以及映射文件的索引xml配置:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 3 <configuration> 4 <environments default="development"> 5 <environment id="development"> 6 <transactionManager type="JDBC" /> 7 <!-- 配置数据库连接信息 --> 8 <dataSource type="POOLED"> 9 <property name="driver" value="com.mysql.jdbc.Driver" /> 10 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> 11 <property name="username" value="root" /> 12 <property name="password" value="root" /> 13 </dataSource> 14 </environment> 15 </environments> 16 17 <mappers> 18 <!-- 注册userMapper.xml文件, 19 userMapper.xml位于com.test.mapping这个包下,所以resource写成com/test/mapping/userMapper.xml--> 20 <mapper resource="com/test/mapping/userMapper.xml"/> 21 </mappers> 22 23 </configuration>
映射文件xml配置:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 4 例如namespace="com.test.mapping.userMapper"就是com.test.mapping(包名)+userMapper(userMapper.xml文件去除后缀) 5 --> 6 <mapper namespace="com.test.mapping.userMapper"> 7 <!-- 8 根据id查询得到一个user对象 9 --> 10 <select id="getUser" parameterType="int" 11 resultType="com.test.domain.User"> 12 select * from users where id=#{id} 13 </select> 14 </mapper>
2.MyBatis架构图
MyBatis配置:包括全局配置和映射文件配置。全局配置文件中包含了数据库连接信息、事务管理、映射文件索引。
MyBatis根据配置文件创建SqlSeesionFactory:SqlSeesionFactory
1 // mybatis的配置文件 2 String resource = "conf.xml"; 3 // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) 4 InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); 5 // 构建sqlSession的工厂 6 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
和使用SqlSeesionFactory创建SqlSeesion:
1 package org.apache.ibatis.session; 2 3 import java.sql.Connection; 4 5 public interface SqlSessionFactory { 6 7 SqlSession openSession(); 8 9 SqlSession openSession(boolean autoCommit); 10 SqlSession openSession(Connection connection); 11 SqlSession openSession(TransactionIsolationLevel level); 12 13 SqlSession openSession(ExecutorType execType); 14 SqlSession openSession(ExecutorType execType, boolean autoCommit); 15 SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level); 16 SqlSession openSession(ExecutorType execType, Connection connection); 17 18 Configuration getConfiguration(); 19 20 }