版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr__Viking/article/details/91429150
序言
现在的开发基本上都已经高度集成化了,很多技术我们只需要一些简单的配置就能立马开箱即用。但是当我们需要快速编写一些小工具时,去配置一个SSM或者其他一些框架组合的整合项目,往往是比较麻烦的,同时我们也不一定就完全需要将这些整合中所有的东西。比如我们需要写一个类似爬虫之类的小工具去抓一些网页,这时我们就可以选择只用纯java SE工程再配置一个Mybatis用于桥接数据库就行了,使用起来也是非常的轻巧方便。下面我们就来分析一下如何在一个纯java SE的项目中把MyBatis的一套东西用起来。
目录
1.导入MyBatis相关的jar包
直接使用Maven的依赖,代码如下:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
2.配置MyBatis.xml
我们在项目中对于MyBatis的配置主要都集中与这个文件,因此这个文件是相对来说比较复杂一点的,详细内容就看代码的注释了。
<?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="config/mysql.properties" />
<!-- 全局变量配置 -->
<settings>
<!-- 开启驼峰命名法转换 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 不使用权限定名称时配置简称(两种方式,1.直接配置包名称;2.为每一个DO配置简称) -->
<typeAliases>
<package name="com.**.model"/>
<!--<typeAlias alias="Book" type="com.spider.model.Book" />-->
</typeAliases>
<!-- 配置数据源环境(可多个,但必须配置default数据源) -->
<environments default="development">
<!-- 第一个数据源 -->
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.user}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
<!-- 第二个数据源 -->
<environment id="dataSource2">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${DS-2.driver}" />
<property name="url" value="${DS-2.url}"/>
<property name="username" value="${DS-2.user}"/>
<property name="password" value="${DS-2.password}"/>
</dataSource>
</environment>
</environments>
<!-- 将mapper.xml映射到mybatis中(这里的xml文件如果是放在resource目录下面的话就必须老老实实配置每一个xml文件,如果是放在src下面某一个包内,可以用package指定包路径) -->
<mappers>
<mapper resource="dao/BookMapper.xml"/>
<!--<package name="com.spider.dao"/>-->
</mappers>
</configuration>
3.读取配置文件创建SqlSessionFactory
将代码中的配置文件路径改成自己的路径即可。
// mybatis相关参数
private final static String CONFIG_PATH = "config/mybatis.xml";
private static InputStream input;
private SqlSession sqlSession;
private void init(String environment){
try {
input = Resources.getResourceAsStream(CONFIG_PATH);
} catch (IOException e) {
e.printStackTrace();
}
// 通过mybatis配置文件和environment名称获取sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input, environment);
// 开启自动提交,否则的话需要自己在执行完操作后手动提交
sqlSession = sqlSessionFactory.openSession(true);
}
4.封装常用方法
我们在使用MyBatis的时候无外乎就只是需要使用SqlSession来创建Mapper实例对象,因此我们使用一个泛型方法来创建指定类型的Mapper实例。
public <T> T getMapper(Class<T> clazz){
return sqlSession.getMapper(clazz);
}
最后我再把我的java代码都贴一下:
package com.spider.util;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
/**
* Created by Viking on 2019/6/11
* 封装MyBatis的初始化及构造mapper的一些方法
*/
public class MyBatisUtil {
// mybatis相关参数
private final static String CONFIG_PATH = "config/mybatis.xml";
private static InputStream input;
private SqlSession sqlSession;
private void init(String environment){
try {
input = Resources.getResourceAsStream(CONFIG_PATH);
} catch (IOException e) {
e.printStackTrace();
}
// 通过mybatis配置文件和datasource名称获取sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input, environment);
// 设置自动提交
sqlSession = sqlSessionFactory.openSession(true);
}
// 使用默认datasource环境的构造器
public MyBatisUtil(){
init(null);
}
// 使用指定datasource环境的构造器
public MyBatisUtil(String environment){
init(environment);
}
// 创建Mapper实例
public <T> T getMapper(Class<T> clazz){
return sqlSession.getMapper(clazz);
}
// 关闭连接,使用结束后必须执行
public void close(){
if (null != sqlSession) {
sqlSession.close();
}
if (null != input) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}