Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息
代码直接放在Github仓库【https://github.com/Damaer/Mybatis-Learning 】,可直接运行,就不占篇幅了。
1.使用工具类获取sqlSession实例对象
在上一个demo中,处理了多个namespace的问题,那么我们可以看到代码还是会有一定的冗余,比如下面这段代码中我们每一个增删改查操作都需要读取一遍配置文件:
public class StudentDaoImpl implements IStudentDao {
private SqlSession sqlSession;
public void insertStu(Student student) {
try {
InputStream inputStream;
inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
sqlSession=sqlSessionFactory.openSession();
sqlSession.insert("mapper1.insertStudent",student);
sqlSession.commit();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
}
我们的思路应该是写一个工具类来替我们获取配置文件的信息,只要返回一个sqlSession实例就可以了。所以就有了MyBatisUtils.class,下面这样的方式,只要使用sqlSession=MyBatisUtils.getSqlSession();
就可以获取到sqlsession的实例。
public class MyBatisUtils {
public SqlSession getSqlSession(){
InputStream is;
try {
is = Resources.getResourceAsStream("mybatis.xml");
return new SqlSessionFactoryBuilder().build(is).openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
但是以上的方式并不是最好的,还是会浪费资源,如果sqlsession已经存在了,这段代码还是会去创建一个新的实例对象。我们知道sqlsession没有可修改的属性,是线程安全的,所以我们需要把它改写成单例模式。
public class MyBatisUtils {
static private SqlSessionFactory sqlSessionFactory;
// 单例模式
static public SqlSession getSqlSession() {
InputStream is;
try {
is = Resources.getResourceAsStream("mybatis.xml");
if (sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
}
return sqlSessionFactory.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
使用的时候只需要获取即可
sqlSession=MyBatisUtils.getSqlSession();
2.DB配置改造成读取配置文件
现在我们需要将DB使用配置文件读取,不是用xml配置,很多人会问,为什么这样做,有人可能会回答是因为改动的时候容易改,但是xml改动的时候不是挺容易改么?
其实,写到属性文件的原因与上面的一样,就是为了更好改,要是上线了需要该数据库我们只需要改动<properties resource="jdbc_mysql.properties">
这一个地方就可以了,xml文件就变得更加简洁清晰了。
原来在mybatis.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>
<!-- 配置运行环境 -->
<!-- default 表示默认使用哪一个环境,可以配置多个,比如开发时的测试环境,上线后的正式环境等 -->
<environments default="mysqlEM">
<environment id="mysqlEM">
<!--事务管理器-->
<transactionManager type="JDBC">
</transactionManager>
<!--数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 注册映射文件 -->
<mappers>
<mapper resource="mapper/mapper.xml"/>
<mapper resource="mapper/mapper1.xml"/>
</mappers>
</configuration>
现在我们定义一个jdbc-mysql.properties文件,将数据库连接的属性直接写进属性文件里(我们可以有好几个不一样的.properties文件,配置着不同的数据库):
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.user=root
jdbc.password=123456
将mybatis.xml改造成(注意下面需要配置属性文件,然后才能在environment标签里面使用,直接使用key就可以了,属性文件配置是按照key-value的模式配置的):
<?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_mysql.properties">
</properties>
<!-- 配置运行环境 -->
<!-- default 表示默认使用哪一个环境,可以配置多个,比如开发时的测试环境,上线后的正式环境等 -->
<environments default="mysqlEM">
<environment id="mysqlEM">
<transactionManager type="JDBC">
</transactionManager>
<environment type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 注册映射文件 -->
<mappers>
<mapper resource="mapper/mapper.xml"/>
<mapper resource="mapper/mapper1.xml"/>
</mappers>
</configuration>
【作者简介】:
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~
Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息的更多相关文章
- jdbc(工具类和配置文件)
原始的jdbc要操作7步 导入jar包 加载驱动 获取连接 获取执行者对象 编写sql语句 处理结果 释放对象资源 当我们每次都要注册驱动,获取连接的时候,都感觉很烦,这时候怎么才能懒呢? 把driv ...
- MyBatis sqlsession 简化 使用工具类创建
2019-04-09 @Test public void Test() throws Exception { // 1.读取配置文件 String resource = "mybatis-c ...
- mybatis怎样自动生成java类,配置文件?
其实没有什么东西是可以自动生成的,只不过是别人已经写好了,你调用罢了. 所以想要mybatis自动生成java类,配置文件等,就必须要一些配置和一些jar包.当然这些配置也很简单. 为了有个初步的认识 ...
- 自定义JDBC工具类(配置文件)
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql. ...
- mybatis generator自动生成 实体类, sqlmap配置文件 详细介绍
我使用的是Eclipse Luna 装了自己常用的插件, generator也是其中一个推荐下载 MyBatis_Generator_1.3.1.zip离线安装包 <?xml version=& ...
- java工具类-读配置文件
///读配置文件 import java.io.InputStream;import java.util.HashMap;import java.util.Map;import java.util.M ...
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
- 工具类MyBatisUtils创建SqlSessionFactory
package com.js.ai.modules.pointwall.interfac; import java.io.IOException; import java.io.InputStream ...
- jdbc连接的工具类
在不实用框架的情况下,有一个jdbc的工具类来进行数据库的连接就再好不过了,下面提供这个工具类DBUtil.java package org.jdbc.test; import java.io.Inp ...
- Java基础-DButils工具类(QueryRunner)详解
Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...
随机推荐
- 第一个鸿蒙程序Hello Word
DevEco Studio介绍 HUAWEI DevEco Studio(以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备 ...
- TypeScript – Using Disposable
前言 TypeScript v5.2 多了一个新功能叫 Disposable. Dispose 的作用是让 "对象" 离开 "作用域" 后做出一些 " ...
- JavaScript – Web Worker
前言 在上一篇 << 单线程 与 执行机制 >> 中, 我们提到了 Web Worker. 它的诞生是为了解决 JS 主线程执行耗时计算时, 导致 UI 无法及时更新的卡死现象 ...
- 2024.7.5-2024.7.20 HA省学会集训游记(焦作一中)
这是一篇长篇小说 DAY1 除了DAY4-DAY5个别内容以外,这些都是补的,但是全写完有太多了qwq,挑题写了 树状数组和线段树基础 很多都是一些模板题,太模板的题不再做太多解释 题目: P4062 ...
- 暑假集训CSP提高模拟7
这个 T1 的 \(n^{3}\) 的 SPJ 效率还是太慢了,膜拜 SPJ 大神学长,还会画画 A.Permutations & Primes 这题感觉挺水的但是感觉有不是那么水,主要还是因 ...
- 【赵渝强老师】大数据工作流引擎Oozie
一.什么是工作流? 工作流(WorkFlow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算.工作流要解决的主要问题是:为实现某 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 7 期(2024年9.23-9.30)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- linux(centos7)中安装7z
linux(centos7)中安装7z 一. 先安装wget yum -y install wget 二. 下载7z的压缩包 wget https://sourceforge.net/projects ...
- UEFI原理与编程(三)
1 开发UEFI服务 本质Protocol 就是包含属性和函数指针的结构体,功能上来说就是提供者和使用者对服务的一种约定. 2 开发UEFI驱动 一个设备/总线驱动程序在安装时首要找到对应的硬件设备( ...
- 多款国产操作系统安装数据库干货文档汇总(含Oracle/MySQL/国产数据库等)
随着国产化的逐步推进,越来越多的企业选择将数据库安装在国产操作系统上.为帮助大家了解国产操作系统上的数据库成功搭建案例与搭建方式,本文整理了墨天轮数据技术社区上用户分享的实操文档,涵盖银河麒麟.中标麒 ...