我这里采用的是mysql数据库,当然你用其他数据库也一样。
一、数据库的建立
建表语句:
DROP TABLE IF EXISTS `payment`;
CREATE TABLE `payment` (
`id` bigint(20) NOT NULL,
`serial` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of payment
-- ----------------------------
INSERT INTO `payment` VALUES (1, '2323');
INSERT INTO `payment` VALUES (36, '121212');
SET FOREIGN_KEY_CHECKS = 1;
二、构建maven项目
这个就不行了,发下目录。(maven项目不会构建,那目前不适合看源码,把mybatis用熟练了再说)
2.1、项目结构
2.2、pom文件
依赖,我这里用的是3.5.0的版本
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
</dependencies>
2.3、相关代码
2.3.1 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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/db2019?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/PaymentMapper.xml"/>
</mappers>
</configuration>
2.3.2 entity 文件
package com.fxy.mybatis.entity;
public class Payment {
private Long id;
private String serial;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getSerial() {
return serial;
}
public void setSerial(String serial) {
this.serial = serial;
}
@Override
public String toString() {
return "Payment{" +
"id=" + id +
", serial='" + serial + '\'' +
'}';
}
}
2.3.3、mapper接口文件
package com.fxy.mybatis.reposity;
import com.fxy.mybatis.entity.Payment;
public interface PaymentMapper {
Payment getPayment(int id);
}
2.3.4、mapper.xml配置文件
<?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.fxy.mybatis.reposity.PaymentMapper">
<select id="getPayment" resultType="com.fxy.mybatis.entity.Payment">
select * from payment where id = #{id}
</select>
</mapper>
2.3.5、主函数入口文件
package com.fxy.mybatis;
import com.fxy.mybatis.entity.Payment;
import com.fxy.mybatis.reposity.PaymentMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class OrgionCodeRead {
public static void main(String[] args) throws IOException {
//1\读取配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//2、初始化mybatis,创建SqlSessionFactory类实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//3、创建Session实例
SqlSession session = sqlSessionFactory.openSession();
Payment payment = session.selectOne("com.fxy.mybatis.reposity.PaymentMapper.getPayment",36);
PaymentMapper paymentMapper = session.getMapper(PaymentMapper.class);
Payment payment1= paymentMapper.getPayment(1);
System.out.println(payment.toString());
System.out.println(payment1.toString());
}
}
三、执行结果,即简单调试说明
证明我们搭的环境没问题,接下来便是一步步调试,阅读源码的过程。
注意事项
1、请对mybatis的使用有一定的了解
2、带有目的的去阅读源码,比如说我们配置文件是如何被获取的,又在哪里被使用? mapper接口和mapper.xml 如何关联在一起?接口里的方法和xml里的sql是怎么绑定在一起?输入参数,和输出参数又是怎么转换的呢?输入参数是在哪里被替换为sql语句中的参数?我们没有写mapper接口的实现,那接口里的方法是怎么被实现调用的呢?等等很多问题,带着问题去源码中寻找他们是怎么解决的,会有比较好的效果,要不然阅读起来比较枯燥,漫无目的,会忽略很多细节。
3、阅读源码的时候也要对mybatis整个框架有一定的了解,从宏观—到 微观—再总结—从微观到宏观。多看几次会有个更深的理解。
下一节将对mybatis整个框架进行一个介绍