Mybatis深入学习(1)搭建mybatis环境及其注意事项以及简单的处理流程
创建一个maven工程后
准备实体类以及dao接口
package com.tianqicode.domain; import java.io.Serializable; import java.util.Date; public class User implements Serializable { private Integer id; private String userName; private Date birthday; private String sex; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", userName='" + userName + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; } }
实体类接口
package com.tianqicode.dao; import com.tianqicode.domain.User; import java.util.List; public interface UserDao { List<User> findAll(); }
创建Mybatis的主配置文件
新建一个SqlMapConfig.xml的配置文件
首先导入mybatis的约束
<?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> <!-- 配置环境 --> <environments default="mysql"> <!-- 配置MySQL的环境,与上面的environments标签默认值一致 --> <environment id="mysql"> <!-- 配置事务类型 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源(连接池) --> <dataSource type="POOLED"> <!-- 配置数据库中的四个基本信息 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/javaStudy"/> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <!-- 指定配置映射文件的位置 --> <mappers> <mapper resource="com/tianqicode/dao/UserDao.xml"></mapper> </mappers> </configuration>
创建映射配置文件
首先还是导入约束
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
接着
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace中填写UserDao的全限定类名 --> <mapper namespace="com.tianqicode.dao.UserDao"> <!-- 配置查询所有,id属性的取值必须与dao接口的方法同名,resultType属性指明返回类型 --> <select id="findAll"> select * from user </select> </mapper>
注意事项
第一:在Mybatis中它把持久层的操作接口和映射文件也叫做:Mapper
这里的Dao与Mapper是一样的效果
第二:在创建目录时,它和包是不同的
包在创建时:com.tianqicode.dao是三级结构
目录在创建时:com.tianqicode.dao是一级目录
第三:mybatis的映射文件位置必须和dao接口的包结构相同
第四:映射配置文件的mapper标签中的namespace属性的取值必须是dao接口的全限定类名
第五:映射配置文件的操作配置(select),id的取值必须是dao接口中的方法名。
简单流程的理解
由图中可知,Mabatis的处理流程。这里再简单说一下测试类中各个步骤的用处。
//1、读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2、创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3、使用工厂生产SqlSession对象 SqlSession session = factory.openSession(); //4、使用SqlSession创建Dao代理对象 UserDao userDao = session.getMapper(UserDao.class);
第一步读取配置文件
第二步创建创建SqlSessionFactory工厂,这里是使用SqlSessionFactoryBuilder类对象的build方法创建了SqlSessionFactory对象,这里SqlSessionFactory是一个接口,它有一个叫做DefaultSqlSessionFactory的实现类。其实这里的SqlSessionFactory对象,其实是DefaultSqlSessionFactory实现类的对象,SqlSessionFactoryBuilder在build方法中返回了这个实现类的对象。
//这里是Mybatis的源码 //在上面调用的是这个build方法,而它又调用了这个类中的重载方法 public SqlSessionFactory build(InputStream inputStream) { return this.build((InputStream)inputStream, (String)null, (Properties)null); } //也就是调用了这个方法 public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { SqlSessionFactory var5; try { XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties); //在这里又调用了一个方法给SqlSessionFactory对象实例化 var5 = this.build(parser.parse()); } catch (Exception var14) { throw ExceptionFactory.wrapException("Error building SqlSession.", var14); } finally { ErrorContext.instance().reset(); try { inputStream.close(); } catch (IOException var13) { } } return var5; } //也就是这个类给SqlSessionFactory对象进行了实例化,可以看到这是一个DefaultSqlSessionFactory类对象 public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }
第三步使用工厂类对象生产SqlSession对象。调用了openSession()方法
//也就是这个方法,它在这里又调用了其他的方法 public SqlSession openSession() { return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false); } //也就是这个方法 private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) { Transaction tx = null; DefaultSqlSession var8; try { Environment environment = this.configuration.getEnvironment(); TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(environment); tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit); Executor executor = this.configuration.newExecutor(tx, execType); //在这里对DefaultSqlSession类对象进行了实例化 var8 = new DefaultSqlSession(this.configuration, executor, autoCommit); } catch (Exception var12) { this.closeTransaction(tx); throw ExceptionFactory.wrapException("Error opening session. Cause: " + var12, var12); } finally { ErrorContext.instance().reset(); } //这里返回的是一个DefaultSqlSession对象 return var8; }
第四步使用DefaultSqlSession类对象获取代理对象
这里就不跟踪源码了,太多了,简单的说就是通过字节码创建了一个Dao的代理对象
- 点赞
- 收藏
- 分享
- 文章举报
- Mybatis学习笔记一:环境搭建以及简单使用
- 七牛EVM云主机ftp环境搭建以及注意事项
- Android JNI(NDK)简单学习(环境搭建,创建一个JNI项目的基本流程)
- Mybatis(一)、mybatis环境搭建以及实体类及其配置
- java学习(2) jdk配置注意事项以及简单知识点
- mybatis自带常用操作数据库方法详解以及如何搭建简单的mybatis环境
- 搭建KLEE环境步骤以及注意事项
- 第一天:NodeJs Windows环境搭建、学习资料地址、注意事项总结
- MyBatis的环境搭建以及简单案例
- MFC环境下搭建OpenGL框架并进行数据文件读取以及模型绘制的注意事项
- MyBatis学习笔记(一)----简单的环境搭建及测试Demo
- thrift学习第二步,一个简单的双向通信demo以及原理讲解,以及注意事项
- 自己搭建maven开发环境的步骤及其注意事项
- Mybatis深入学习(3)一些注意点以及标签的使用
- Mybatis学习笔记一:介绍以及环境搭建
- 【JavaEE学习笔记】MyBatis_01_概述,搭建一个简单的环境
- 基于maven学习SpringMVC笔记包含环境搭建、springMVC特有的方式收参,流程跳转、参数传递、注解开发、文件上传下载、拦截器、全局异常处理
- 2009年四六级考试流程以及注意事项+710分计分原理和简单换算+100个高频词汇+100个高频词组搭配
- 第一天:NodeJs Windows环境搭建、学习资料地址、注意事项总结
- QT学习——QT命令行开发环境搭建的几个问题以及处理