mybatis源码学习方式

前提条件:

配置好了Maven


背景:

有时候,我们想学习优秀的开源项目,但是,很多开源项目的依赖包都是通过maven配置的,如果我们想通过Eclipse学习,就得首先把Maven的配置转为Eclipse的工程。


流程如下:

1.下载MyBatis的源代码:

2.解压文件

3.运行mvn eclipse:eclipse


4.导入到Eclipse项目中

5.在Eclipse中配置Maven的路径

mybatis源码学习方式_第1张图片


6.项目效果图:

mybatis源码学习方式_第2张图片




https://blog.csdn.net/wtzvae/article/details/52584472

1.文件准备 
既然是学习源码,这次的就不导入mybatis的jar包,直接导入源码。 
源码下载:https://github.com/mybatis/mybatis-3/releases 
下载源码
我下载了3.4.1版本的,有两个文件,source code和mybatis-3.4.1.zip,其中mybatis-3.4.1.zip中有官方的文档,可以看看。

2.项目建立

源码下载好后,我们开始新建自己的项目,把源码导入到项目中

源码结构目录如下,我们可以看出这是一个maven项目,先要配置好maven 
这里写图片描述

2.1配置maven(已有maven可以跳过) 
maven下载链接:http://maven.apache.org/download.cgi 
这里写图片描述
这里不配置maven环境变量,直接在eclipse里面配置好maven路径,想配置环境变量可以自己百度一下。 
解压出来,修改默认本地仓库的位置,本地仓库文件位置配置在${maven}/conf/setting.xml中 
这里写图片描述
从上图可以看到本地仓库默认配置在用户目录文件夹下,即c盘,注释掉。现在改到d盘,所有下载的jar就会存放到d盘。 
再到eclipse里面配置maven 
这里写图片描述
配置好settings.xml文件的位置就搞定了。

2.2建立maven项目 
new一个maven project,之前已经建好,所以下面的图片有个小红叉 
这里写图片描述

2.3导入源码 
右键项目import->file system, 选中解压后的mybatis源码文件夹,这样就可以导入mybatis的源码项目。 
刚导入时,maven下载mybatis项目需要的jar,项目会出现错误,稍等一会就好。如果还有错误,可以build path配置jdk版本,我用的是jdk1.7 
这里写图片描述


上一节已经导入了mybatis源码项目,这次我们建立一个小Demo,往数据库里插入数据,需要在pom.xml配置mysql连接的jar。

为了不影响源码项目的目录结构,新建了两个source folder存放自己编写的代码,如下图 
mybatis源码学习方式_第3张图片 
SqlSessionFactoryUtil.java

package cn.wtzvae.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionFactoryUtil {


    public static SqlSessionFactory getSqlSessionFactory(){
        String path = "mybatis-config.xml";
        SqlSessionFactory sqlSessionFactory = null;
        try {
            Reader reader = Resources.getResourceAsReader(path);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            System.out.println("获取配置文件失败");
            e.printStackTrace();
        }

        return sqlSessionFactory;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

mybatis-config.xml




<configuration>
    <typeAliases>
        <package name="cn.wtzvae.model"/>
    typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />

            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/db_mybatis" />
                <property name="username" value="mybatis" />
                <property name="password" value="123456"/>
            dataSource>
        environment>
    environments>


    <mappers>
        <mapper resource="cn/wtzvae/mappers/PersonMapper.xml"/>
    mappers>

configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

PersonMapper.xml



<mapper namespace="cn.wtzvae.dao.PersonDao">

    <insert id="insert" parameterType="Person">
        INSERT INTO person (name, age, phone, email, address)
        VALUES(#{name},#{age},#{phone},#{email},#{address})
    insert>   

mapper> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Person.java

package cn.wtzvae.model;

public class Person {

    private int id;
    private String name;
    private int age;
    private String phone;
    private String email;
    private String address;
    //....
    getXXX();
    setXXX();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

PersonDao.java

package cn.wtzvae.dao;

import cn.wtzvae.model.Person;

public interface PersonDao {

    public int insert(Person p);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

TestFactory.java

package cn.wtzvae.test;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

import cn.wtzvae.dao.PersonDao;
import cn.wtzvae.model.Person;
import cn.wtzvae.util.SqlSessionFactoryUtil;

public class TestFactory {

    @Test
    public void test(){
        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.getConnection();
        PersonDao personDao =  sqlSession.getMapper(PersonDao.class);
        Person p = new Person();
        p.setAddress("广东省");
        p.setAge(12);
        p.setEmail("[email protected]");
        p.setName("啊角");
        p.setPhone("110");
        personDao.insert(p);
        sqlSession.commit();
        sqlSession.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

以上是本次小demo的多有代码,之后再详细介绍mybatis的配置。成功运行测试类,往数据库插入数据。

你可能感兴趣的:(batis)