Mybatis随笔

Mybatis随笔(一) 构建源码调试环境

2020-03-15  本文已影响0人  sunyelw

1. 源码下载

mybatis-3 github
mybatis 带中文注释版
我下的是最新的,中文注释的版本目前最高是 3.3.0-SNAPSHOT

git clone --depth 1 git@github.com:mybatis/mybatis-3.git

只下载最新一个提交,这样比较快。
然后处理pom.xml

<optional>true</optional>
-> :%s/true/false/g
<optional>false</optional>
<osgi.export>org.apache.ibatis.*;version=${project.version};-noimport:=true</osgi.export>
<!--
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pdf-plugin</artifactId>
      </plugin>
-->
源码目录

接下来在 src/test/java 下面加入测试代码

测试目录
<?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>
    <settings>
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
    <typeAliases>
        <typeAlias alias="Account" type="com.hy.test.po.Account"/>
    </typeAliases>
    <!-- 定义数据库的信息 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />

                <!-- mysql 8.* -->
                <!-- &amp; 转义 & -->
                <!--<property name="url" value="jdbc:mysql://localhost:3306/asia?serverTimezone=UTC&amp;useSSL=false" />-->

                <!-- mysql 5.1.44 -->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/asia?useSSL=false" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <!-- 定义映射器, 重复注册会报错 -->
    <mappers>
        <!-- 指定注册 -->
        <mapper resource="resources/mapper/AccountMapper.xml" />
        <!-- 不支持批量注册 -->
        <!--<package name="com.hy.test.dao"  />-->
    </mappers>
    
</configuration>
log4j.rootLogger=DEBUG,stdout
log4j.logger.org.mybatis=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.logDailyFile.layout.ConversionPattern = %5p %d %C:%m%n
public class MainTest {

    private static Logger log = Logger.getLogger(MainTest.class);

    public static void main(String[] args){

        String config = "resources/mybatis-config.xml";

        // 测试代码
        try (InputStream is = Resources.getResourceAsStream(config)) {
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = factory.openSession();
            AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);
            int num = accountMapper.insertSelective(new Account("java", 10));
            log.info("---- num: " + num + " -----------");
//            sqlSession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
             <configuration>
                <!--允许移动生成的文件-->
                <verbose>true</verbose>
                <!--允许覆盖生成的文件-->
                <overwrite>true</overwrite>
                <configurationFile>src/main/resources/generatorSql.xml</configurationFile>
            </configuration>
        </plugin>
    </plugins>
</build>

可以参考 mybati-generator插件使用

经过这些步骤就可以把Mybatis调试起来了,附上本文代码地址 sunyelw-MybatisStudy.git


  1. mysql 版本过高
    最新的源码包中的MySQL版本是8.*, 需要配置时区
jdbc:mysql://localhost:3306/asia?serverTimezone=UTC&amp;useSSL=false

当然可以调低到5.1.*

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.44</version>
</dependency>
  1. mappers 配置DAO目录

有以下四种方式

相信只要用过springspringboot的开发都知道,Mybatis的这种映射是可以批量配置的,这种方式就是配置一个*Mapper.java接口包名和一个*Mapper.xml目录

在纯 Mybatis 的项目中也可以这么玩, 但有三个条件(缺一不可, 如果你发现可以请留言, 拜谢)

但我不喜欢把*Mapper.java*Mapper.xml放在同一个目录下面, 而<package name = "com...." />不支持 *Mapper.xml之类的语法, 所以在目前这种纯 Mybatis 的项目中, 是不支持批量的
因此, 对于每一个*Mapper.xml只能以下三种种任选其一

大体原因是,Mybatis<mapper/> 标签的解析就是遍历, 是 package - name 方式就会先把目录下的 *Mapper.java 注册到配置中, 然后在同级目录找同名的 XML 文件进行注册, 而其他方式就是解析 *Mapper.xml 文件并将此文件关联的*Mapper.java进行注册(通过 namespace进行关联)

具体原因会写一篇文章从源码分析清楚

上一篇 下一篇

猜你喜欢

热点阅读