Mybatis的运行原理?(1)sqlMapConfig.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂 (2)基于S
1.首先配置开发环境:
JDK1.8 >>>MYsql5.5-5.7
添加jar包:
c3p0-0.9.1.2
mysql-connector-java-5.0.8-bin.jar
Sql:
-- 1、删除 yonghedb 数据库(如果存在)
drop database if exists yonghedb;
-- 2、创建数据库 yonghedb 数据库
create database yonghedb charset utf8;
use yonghedb; -- 选择yonghedb数据库
-- 3、在 yonghedb 库中创建 emp 表
create table emp(
id int primary key auto_increment,
name varchar(50),
job varchar(50),
salary double
);
-- 4、往 emp 表中, 插入若干条记录
insert into emp values(null, "张三", '程序员', 3300);
sqlMapConfig.xml,引入Mapper配置文件
<configuration>
<!-- 配置开发环境 -->
<environments default="develop">
<!-- default指向哪个id,就使用的哪个环境 -->
<environment id="develop">
<!-- 配置环境,可配置多个环境(比如:develop开发、test测试) -->
<!-- id>环境的编号 environment标签不能为空 -->
<transactionManager type="JDBC">
<!-- 事务管理器>配置事务管理方式 type的取值:将事务交给JDBC管理,推荐使用
MANAGEN(自己管理事务,不推荐)-->
</transactionManager>
<!-- 配置数据源>连接池type=
POOLED(使用连接池)
UNPOOLEN(不使用连接池)
JNDI(不推荐使用)
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/yonghedb?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 引入Mapper配置文件,可以配置多个 -->
<mappers>
<mapper resource="com/java/pojo/EmpMapper.xml"/>
</mappers>
</configuration>
2.由以上配置文件印射了一个配置文件com/java/pojo/EmpMapper.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace一般指定为当前文件的所在包路径+文件名
将来在程序中通过[ namespace + id ]定位到执行哪一条SQL语句]
并且namespace、id的值不能重复
-->
<mapper namespace="com.java.pojo.EmpMapper">
<!-- 通过select、insert、update、delete标签声明要执行的SQL -->
<select id="findAll" resultType="com.java.pojo.Emp">
select * from emp
</select>
<update id="update">
update emp set name=#{name},job=#{job},salary=#{salary} where id=#{id}
</update>
<update id="add">
insert into emp values(null,#{name},#{job},#{salary})
</update>
<delete id="delete">
delete from emp where id=#{id}
</delete>
</mapper>
3.通过namespace+id标签指向的实体类Emp
public class Emp {
private Integer id;
private String name;
private String job;
private Double salary;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Emp [id=" + id + ", name=" + name + ", job=" + job + ", salary=" + salary + "]";
}
}
4.通过封装的JDBC操作数据库
public class TestMybatis {
public static void main(String[] args) throws Exception {
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory facyory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = facyory.openSession();
List<Emp> list = session.selectList("com.java.pojo.EmpMapper.findAll");
for (Emp emp : list) {
System.out.println(emp);
}
}
}
总结运行过程如下
(1)sqlMapConfig.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
(2)基于SqlSessionFactory可以生成SqlSession对象
(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4)Executor是SqlSession底层的对象,用于执行SQL语句
(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)