MyBatis简单源码分析1 - 环境搭建

本文以MyBatis独立使用的情形简单地分析MyBatis的源码,记录自己学习的过程

重要的Java代码如下:

主程序:

 1 package com.suntao.learning.debug;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.List;
 6
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11
12 import com.suntao.learning.dao.EmployeeDao;
13 import com.suntao.learning.dto.Employee;
14
15 public class DebugMyBatis {
16     private final static String CONFIGURATION_XML = "config.xml";
17
18     public static void main(String[] args) {
19         try {
20             InputStream inputStream = Resources.getResourceAsStream(CONFIGURATION_XML);
21             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
22             SqlSession sqlSession = sqlSessionFactory.openSession(true);
23             EmployeeDao employeeDao = sqlSession.getMapper(EmployeeDao.class);
24             Employee employee = new Employee("test", "M", "XXXXXXXXXXX");
25             int ret = employeeDao.insertEmployee(employee);
26             System.out.println(ret);
27             List<Employee> employees = employeeDao.findAllEmployees();
28             for (Employee e : employees) {
29                 System.out.println(e);
30             }
31         } catch (IOException e) {
32             e.printStackTrace();
33         }
34     }
35 }

EmployeeDao.java:

 1 package com.suntao.learning.dao;
 2
 3 import java.util.List;
 4
 5 import com.suntao.learning.dto.Employee;
 6
 7 public interface EmployeeDao {
 8     Employee findEmployeeById(String employeeId);
 9     List<Employee> findAllEmployees();
10     int insertEmployee(Employee e);
11 }

Employee.java:

 1 package com.suntao.learning.dto;
 2
 3 public class Employee {
 4     private int id;
 5     private String name;
 6     private String gender;
 7     private String tel;
 8
 9     public Employee() {}
10
11     public Employee(String name, String gender, String tel) {
12         this.name = name;
13         this.gender = gender;
14         this.tel = tel;
15     }
16
17     public int getId() {
18         return id;
19     }
20
21     public void setId(int id) {
22         this.id = id;
23     }
24
25     public String getName() {
26         return name;
27     }
28
29     public void setName(String name) {
30         this.name = name;
31     }
32
33     public String getGender() {
34         return gender;
35     }
36
37     public void setGender(String gender) {
38         this.gender = gender;
39     }
40
41     public String getTel() {
42         return tel;
43     }
44
45     public void setTel(String tel) {
46         this.tel = tel;
47     }
48
49     @Override
50     public String toString() {
51         return id + " " + name + " " + gender + " " + tel;
52     }
53
54 }

重要的配置文件如下:

config.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     <properties resource="jdbc.properties"></properties>
 5     <!-- 配置别名 -->
 6     <typeAliases>
 7         <typeAlias type="com.suntao.learning.dto.Employee" alias="Employee" />
 8     </typeAliases>
 9
10     <!-- 配置环境变量 -->
11     <environments default="development">
12         <environment id="development">
13             <transactionManager type="JDBC" />
14             <dataSource type="POOLED">
15                 <property name="driver" value="${driver}" />
16                 <property name="url" value="${url}" />
17                 <property name="username" value="${username}" />
18                 <property name="password" value="${password}" />
19             </dataSource>
20         </environment>
21     </environments>
22
23     <!-- 配置mappers -->
24     <mappers>
25         <mapper resource="employee.xml" />
26     </mappers>
27 </configuration>

Mapper文件employee.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="com.suntao.learning.dao.EmployeeDao">
 4     <resultMap id="EmployeeMap" type="Employee">
 5         <result column="ID" jdbcType="INTEGER" property="id" />
 6         <result column="NAME" jdbcType="VARCHAR" property="name" />
 7         <result column="GENDER" jdbcType="VARCHAR" property="gender" />
 8         <result column="TEL" jdbcType="VARCHAR" property="tel" />
 9     </resultMap>
10     <select id="findEmployeeById" parameterType="string" resultType="Employee">
11         select * from employee t where t.id = #{employeeId}
12     </select>
13     <select id="findAllEmployees" resultType="Employee">
14         select * from employee t
15     </select>
16     <insert id="insertEmployee" parameterType="Employee" useGeneratedKeys="true" keyProperty="id">
17         insert into employee
18         <trim prefix="(" suffix=")" suffixOverrides=",">
19             <if test="name != null">
20                 name,
21             </if>
22             <if test="gender != null">
23                 gender,
24             </if>
25             <if test="tel != null">
26                 tel,
27             </if>
28         </trim>
29         <trim prefix="values (" suffix=")" suffixOverrides=",">
30             <if test="name != null">
31                 #{name, jdbcType=VARCHAR},
32             </if>
33             <if test="gender != null">
34                 #{gender, jdbcType=VARCHAR},
35             </if>
36             <if test="tel != null">
37                 #{tel, jdbcType=VARCHAR},
38             </if>
39         </trim>
40     </insert>
41 </mapper>
时间: 2024-11-05 18:57:51

MyBatis简单源码分析1 - 环境搭建的相关文章

数据库中间件 MyCAT 源码分析 —— 调试环境搭建

关注**微信公众号:[芋艿的后端小屋]**有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码的疑问每条留言都将得到认真回复.甚至不知道如何读源码也可以请教噢. 新的源码解析文章实时收到通知.每周更新一篇左右. 1. 依赖工具 2. 源码拉取 3. 数据库配置 4. MyCat 配置 5. MyCAT 启动 6. MyCAT 测试 7. 交流

Spring源码分析——(001)环境搭建

1.官方参考 spring-framework的github链接:https://github.com/spring-projects/spring-framework 源码环境搭建官方参考1:考如何构建源码,Build from Source:https://github.com/spring-projects/spring-framework/wiki/Build-from-Source 源码环境搭建官方参考2:源码如何导入eclipse,import-into-eclipse:https:

Idea下Kafka源码阅读编译环境搭建

Kafka源码编译阅读环境搭建 开发环境: Oracle Java 1.7.0_25 + Idea + Scala 2.10.5 +Gradle 2.1 + Kafka 0.9.0.1 一.Gradle安装配置 Kafka代码自0.8.x之后就使用Gradle来进行编译和构建了,因此首先需要安装Gradle.Gradle集成并吸收了Maven主要优点的同时还克服了Maven自身的一些局限性--你可以访问https://www.gradle.org/downloads/ 下载最新的Gradle版本

【MyBatis源码分析】环境准备

前言 之前一段时间写了[Spring源码分析]系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章[MyBatis源码分析],在[MyBatis源码分析]文章的基础之上,可以继续分析数据库连接池.Spring整合MyBatis源码.Spring事物管理tx等等. [MyBatis源码分析]整个文章结构相较[Spring源码分析]稍微改一改,后者会在每一部分源码分析的开头列出要分析的源码的实例,比如: 分析Bean流程加载,就会先写Bean的代码示例及xml

mybatis缓存源码分析之浅谈缓存设计

一般我们用到缓存的时候,只知道他很快,很强,还能持久,但是为什么他可以做到这些呢,有人会说这是天赋,遗传的,是的,你想的没错,确实是大佬们在构造这些的时候,赋予他这些能力,那今天我们就来剖析一下,大佬们干了啥,区区缓存就能这么厉害. 去大厂面试的时候,面试官总会喜欢问为什么,一开始,完全搞不懂我就去拧个螺丝,你问我造火箭怎么造我咋知道,后来在工作中遇到各种各样的问题,解决不了的时候,看着身边大佬们一层层点进去看源码分析问题的时候,瞬间觉得这多牛逼啊,或许一开始有动力看源码,了解为什么就是因为这个

S5PV210-uboot源码分析-uboot环境变量

9.1.uboot的环境变量 1.环境变量的作用 (1)在我们不改变uboot源代码的情况下,只需要改变环境变量的值就可以改变uboot运行时的数据和一些特性.比如说,通过修改bootdelay环境变量,就可以更改开机倒数的秒数. 2.环境变量的优先级 (1)uboot代码当中有一个值,环境变量(DDR 环境变量的分区中)中也有一个值,uboot程序实际运行时,规则是,如果环境变量(DDR中环境变量的分区)为空,则使用代码中的环境变量的值,如果环境变量不为空,优先使用环境变对应的值. (2)比如

[Tomcat源码分析] Eclipse中搭建Apache Tomcat源码调试环境

网上很多文章都推荐使用Ant下载编译,但本地实践中屡屡失败,无法下载. 后来参考 https://blog.csdn.net/xiongyouqiang/article/details/78941077 总算把调试环境搭建完成. 以下文章几乎完全copy上述网址,但稍作延展. 下载源码 官网直接下载源码 http://tomcat.apache.org/download-70.cgi 源码导入到Eclipse中 第1步:Eclipse中新建一个Java Project,例如名称可以是Tomcat

跟厂长学PHP内核(二):源码分析的环境与工具

本文主要介绍分析源码的方式,其中包含环境的搭建.分析工具的安装以及源码调试的基本操作. 一.工具清单 PHP7.0.12 GDB CLion 二.源码下载及安装 $ wget http://php.net/distributions/php-7.0.12.tar.gz $ tar zxvf php-7.0.12.tar.gz $ cd php-7.0.12/ $ ./configure --prefix=/usr/local/php7 --enable-debug --enable-fpm $

Spring整合MyBatis(二)源码分析

在Spring配置Mybatis的文件中我们可以看到如下代码: <!-- 扫描dao --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="org.tarena.note.dao"> </property> MapperScannerConfig