在Maven項目中使用tk-mybatis(不結合SpringBoot)

什麼是tk-mybatis

通用 Mapper4(tk-mybatis) 是一個可以實現任意 MyBatis 通用方法的框架,項目提供了常規的增刪改查操作以及Example 相關的單表操作。通用 Mapper 是爲了解決 MyBatis 使用中 90% 的基本操作,使用它可以很方便的進行開發,可以節省開發人員大量的時間。

項目WiKi地址:https://gitee.com/free/Mapper/wikis/Home

如何在Maven項目中使用tk-mybatis

第一步,添加依賴

首先創建一個Maven項目,然後在pom.xml文件中加入以下依賴項:

  1. 添加mybatis3.x依賴和tk-mybatis4.x依賴以及mysql數據庫連接驅動
	<!-- 添加tk-mybatis數據庫工具 -->
      <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.6</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper -->
      <dependency>
          <groupId>tk.mybatis</groupId>
          <artifactId>mapper</artifactId>
          <version>4.1.5</version>
      </dependency>
	  
	  <!-- mysql數據庫連接驅動 -->
	  <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
  1. 添加dbcp數據庫連接池(後面創建數據源會用到)
		<!--注意:在linux環境下,commons-logging1.2好像無法找到裏面的/LogFactory,但commons-logging1.1.3可以-->
        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.5.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.4.2</version>
        </dependency>
  1. 添加log4j2日誌工具(也可使用其他日誌框架,不強求)
		<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>

第二步,創建mybatis-config.xml文件

  1. 在項目的src/main/resources路徑下,新建一個mybatis-config.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="jdbc.properties"/>-->

    <settings>
        <!-- log4j.properties的配置,用於打印SQL語句及結果到控制檯,便於調試 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <setting name="callSettersOnNulls" value="true"/>
        <!--將數據庫字段字段映射成java對象的駝峯命名-->
        <setting name= "mapUnderscoreToCamelCase" value="true" />
    </settings>
    <typeAliases>
    </typeAliases>

    <!-- 配置環境:可以配置多個環境,default:配置某一個環境的唯一標識,表示默認使用哪個環境 -->
    <environments default="phm">
        <environment id="phm">
            <transactionManager type="JDBC"/>
            <dataSource type="com.yj.config.DBCPDataSourceFactory">
                <!-- 配置連接信息 -->
                <!--<property name="driver" value="${jdbc.driverClass}"/>-->
                <!--<property name="url" value="${jdbc.connectionURL}"/>-->
                <!--<property name="username" value="${jdbc.username}"/>-->
                <!--<property name="password" value="${jdbc.password}"/>-->
            </dataSource>
        </environment>
    </environments>
    <!-- 映射map -->
    <mappers>
        <!--mapper的方式是配置mapper.xml文件-->
        <mapper resource="mapper/DeviceInfoMapper.xml"/>

        <!--package是執行mapper接口的包的路徑-->
        <!--<package name="com.mlamp.htcrrc.mapper"/>-->
    </mappers>
</configuration>

mybatis-config.xml文件是mybatis的核心配置文件,它用來設置mybatis的日誌輸出、數據源信息、實體類別名、數據表映射文件的位置等,這些設置項都是初始化mybatis的必備條件。

  1. 創建DBCPDataSourceFactory 類,加載dbcp連接池:
public class DBCPDataSourceFactory extends UnpooledDataSourceFactory {

    public DBCPDataSourceFactory() {
        try {
            InputStreamReader isr = new InputStreamReader(DBCPDataSourceFactory.class.getResourceAsStream("/jdbc.properties"), "UTF-8");
            Properties prop = new Properties();
            prop.load(new BufferedReader(isr));
            this.dataSource = BasicDataSourceFactory.createDataSource(prop);
            LOGINFO.info("初始化數據庫連接池成功");
        } catch (Exception e) {
            e.printStackTrace();
            LOGERROR.error(e.getLocalizedMessage());
            LOGINFO.info(e.getLocalizedMessage());
            //如果這裏連不上數據庫就退出程序
            System.exit(0);
        }
    }

這個類,就是上面mybatis-config.xml配置文件中datasource標籤使用的數據庫連接池創建類。

  1. src/main/resources路徑下創建jdbc.properties文件,用來配置數據庫連接的相關信息:
#數據庫的連接參數
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demo?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
username=root
password=123456
#初始資源
initialSize=5
#活動資源
maxActive=10
#最大空閒資源
maxIdle=6
#最小空閒資源
minIdle=2
#從數據庫連接池獲得一個連接時,最大的等待時間,單位爲毫秒
maxWait=60000
characterEncoding=UTF-8
#自動提交事務,這個必須設置,否則setAutoCommit無效
defaultAutoCommit=true

#設定數據庫連接池可回收利用
#標記是否刪除超過removeAbandonedTimout所指定時間的被遺棄的連接
removeAbandoned=true
#一個被拋棄連接可以被移除的超時時間,單位爲秒
removeAbandonedTimeout=120
#標誌是否爲應用程序中遺棄語句或連接的代碼開啓日誌堆棧追蹤
logAbandoned=true
#對connection進行有效性檢測
testOnBorrow=true
#測試連接可用性
validationQuery=select 1

第三步,初始化mybatis,集成tk-mybatis

  1. 使用MybatisConfig類初始化mybatis,加載mybatis-config.xml配置文件:
/**
 * Mybati配置類,獲取sqlSessionFactory
 */
public class MybatisConfig {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

sqlSessionFactory應該使用單例模式,作用域爲應用區域,即在整個程序運行期間,它都應該存在,且只存在一個。

  1. 創建SqlSessionUtil類,用於創建SqlSession,並集成tk-mybatis
public class SqlSessionUtil {

    public static SqlSession openSqlSession() {
        //從剛剛創建的 sqlSessionFactory 中獲取 session
        SqlSession sqlSession = MybatisConfig.getSqlSessionFactory().openSession();
        //創建一個MapperHelper
        MapperHelper mapperHelper = new MapperHelper();
        //特殊配置
        Config config = new Config();
        //主鍵自增回寫方法,默認值MYSQL,詳細說明請看文檔
        config.setIDENTITY("MYSQL");
        //支持getter和setter方法上的註解
        config.setEnableMethodAnnotation(true);
        //設置 insert 和 update 中,是否判斷字符串類型!=''
        config.setNotEmpty(true);
        //校驗Example中的類型和最終調用時Mapper的泛型是否一致
        config.setCheckExampleEntityClass(true);
        //啓用簡單類型
        config.setUseSimpleType(true);
        //枚舉按簡單類型處理
        config.setEnumAsSimpleType(true);
        //自動處理關鍵字 - mysql
        config.setWrapKeyword("`{0}`");
        //設置配置
        mapperHelper.setConfig(config);
        //註冊通用接口,和其他集成方式中的 mappers 參數作用相同
        //4.0 之後的版本,如果類似 Mapper.class 這樣的基礎接口帶有 @RegisterMapper 註解,就不必在這裏註冊
        mapperHelper.registerMapper(MyMapper.class);
        //配置 mapperHelper 後,執行下面的操作
        mapperHelper.processConfiguration(sqlSession.getConfiguration());
        return sqlSession;
    }

    public static void closeSqlSession(SqlSession sqlSession){
        sqlSession.commit();
        sqlSession.close();
        sqlSession=null;
    }
  1. src/main/java路徑下加入package tk.mybatis.mapper,並在該包下創建MyMapper類:
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}

第四步,開始使用tk-mybatis操作數據庫

以下是使用通用Mapper(tk-mybatis)查詢數據的推薦寫法:

public class DeviceInfoDao {

    public List<DeviceInfo> getAllDeviceInfoList(){
        List<DeviceInfo> list=null;
        try {
            SqlSession sqlSession=SqlSessionUtil.openSqlSession();
            DeviceInfoMapper mapper=sqlSession.getMapper(DeviceInfoMapper.class);
            list=mapper.selectAll();
            SqlSessionUtil.closeSqlSession(sqlSession);
        }catch (Exception e){
            LOGINFO.error("查詢錯誤:",e);
            LOGERROR.error("查詢錯誤:",e);
        }
        return list;
    }
}

注意,從openSqlSession那一行到closeSqlSession結束,應該放入try-catch語句中,並且每次使用mapper操作數據庫時,都應該是先openSqlSession,再closeSqlSession。重要!使用完後,一定要調用closeSqlSession

使用mybatis代碼自動生成插件,生成實體類、mapper接口、映射文件

第一步,在pom.xml文件中加入mybatis-generator插件

	<properties>
		<mysql.version>5.1.44</mysql.version>
        <tk-mybatis-mapper.version>4.1.5</tk-mybatis-mapper.version>
        <!-- Maven Settings -->
        <mybatis-generator-maven-plugin.version>1.3.7</mybatis-generator-maven-plugin.version>
	</properties>

<build>
	<plugins>
	<!--mybatis代碼自動生成插件-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>${mybatis-generator-maven-plugin.version}</version>
                <configuration>
                    <!--配置文件的位置-->
                    <configurationFile>
                        ${basedir}/src/main/resources/generator/generatorConfig.xml
                    </configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>${tk-mybatis-mapper.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
	</plugins>
	
	<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>
</build>

第二步,創建generatorConfig.xml配置文件

  1. src/main/resources下創建generator文件夾,在generator下創建generatorConfig.xml,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <!-- 引入數據庫連接配置 -->
    <properties resource="generator/jdbc.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <property name="javaFileEncoding" value="UTF-8"/>

        <!-- 自帶插件,實體類序列化 -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- 配置 tk.mybatis 插件 -->
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.MyMapper"/>
            <property name="caseSensitive" value="true"/>
            <!--<property name="lombok" value="Data"/>-->
            <!--<property name="swagger" value="true"/>-->
        </plugin>

        <!-- 配置數據庫連接 -->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.connectionURL}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}">
            <!--解決mysql驅動升級到8.0後不生成指定數據庫代碼的問題-->
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>

        <!-- 配置實體類存放路徑 -->
        <javaModelGenerator targetPackage="com.yj.bean" targetProject="src/main/java"/>

        <!-- 配置 XML 存放路徑 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>

        <!-- 配置 DAO 存放路徑 -->
        <javaClientGenerator targetPackage="com.yj.dao.mapper"
                             targetProject="src/main/java"
                             type="XMLMAPPER"/>

        <!-- 配置需要指定生成的數據表,% 代表所有表 -->
        <table tableName="%">
            <!-- mysql 配置 -->
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
  1. 創建jdbc.properties數據庫連接配置文件:
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/demo?nullCatalogMeansCurrent=true
jdbc.username=root
jdbc.password=123456

第三步,使用mybatis-generator插件生成代碼

在idea的maven project面板中,找到mybatis-generator插件,點擊mybatis-generator:generate即可自動生成實體類、dao層的mapper接口、數據表映射文件,如下圖所示:
使用方法

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章