在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接口、数据表映射文件,如下图所示:
使用方法

参考资料

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值