目录
注:本篇搭建的是Mybatis最简单的一种运行方式,目的是为了分析Mybatis原始的运行逻辑和方式,至于集成Spring和Springboot框架的本篇不做说明。
传送门:
- 对Mybatis架构组成感兴趣的可以跳转到(二)Mybatis持久化框架原理之架构组成
进行源码分析前的项目准备
此次的Mybatis的源码分析是基于3.4.1。maven pom.xml文件配置如下:
<properties>
<!-- mybatis版本号 -->
<mybatis.version>3.4.1</mybatis.version>
</properties>
<dependencies>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
</dependencies>
实体类
@Data
public class DemoEntity {
/**
* 学号
*/
private String sno;
/**
* 姓名
*/
private String name;
/**
* 性别
*/
private String sex;
/**
* 生日
*/
private Date birth;
/**
* 班级
*/
private String grade;
}
Mapper接口
public interface DemoMapper {
/**
* 查询信息
*
* @param test
* @param test2
* @param test3
* @return
*/
List<DemoEntity> select(String test, Integer test2, Character test3);
}
XML文件Mapper
<?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">
<mapper namespace="com.iboxpay.mapper.DemoMapper">
<resultMap id="demo" type="com.iboxpay.entity.DemoEntity">
<result property="sno" column="SNO"/>
<result property="name" column="SNAME"/>
<result property="sex" column="SSEX"/>
<result property="birth" column="SBIRTHDAY"/>
<result property="grade" column="SCLASS"/>
</resultMap>
<select id="select" resultMap="demo">
select t.* from student t
</select>
</mapper>
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>
<properties resource="database.properties"/>
<typeAliases>
<!-- package和typeAlias只能存在一种 -->
<!-- package name="com.iboxpay.entity"/ -->
<typeAlias type="com.iboxpay.entity.DemoEntity" alias="student"/>
</typeAliases>
<environments default="demo">
<environment id="demo">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${connection.driver}"/>
<property name="url" value="${connection.url}"/>
<property name="username" value="${connection.username}"/>
<property name="password" value="${connection.password}"/>
</dataSource>
</environment>
<environment id="demo1">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${connection.driver}"/>
<property name="url" value="${connection.url}"/>
<property name="username" value="${connection.username}"/>
<property name="password" value="${connection.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- package和mapper只能存在一种,且mapper只能使用一种属性去指定mapper类 -->
<!-- package name="com.iboxpay.entity"/ -->
<mapper resource="DemoMapper.xml"/>
</mappers>
</configuration>
Mybatis的简单运行实例
public class Main {
private static final String RESOURCE_URL = "mybatis-config.xml";
public static void main(String[] args) {
try {
InputStream inputStream =
Resources.getResourceAsStream(RESOURCE_URL);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder()
.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoMapper demoMapper = sqlSession.getMapper(DemoMapper.class);
List<DemoEntity> demoEntity = demoMapper.select("1", 2, '3');
System.out.println(demoEntity);
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**********************************************/
/**
运行结果为:
[DemoEntity(sno=4444, name=test1, sex=男, birth=null, grade=123456),
DemoEntity(sno=5555, name=test2, sex=男, birth=null, grade=123456)]
*/
/**********************************************/