博客
关于我
Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息
阅读量:393 次
发布时间:2019-03-05

本文共 3334 字,大约阅读时间需要 11 分钟。

代码直接放在Github仓库【 】,可直接运行,就不占篇幅了。

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文件里配置的是:

现在我们定义一个jdbc-mysql.properties文件,将数据库连接的属性直接写进属性文件里(我们可以有好几个不一样的.properties文件,配置着不同的数据库):

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/testjdbc.user=rootjdbc.password=123456

将mybatis.xml改造成(注意下面需要配置属性文件,然后才能在environment标签里面使用,直接使用key就可以了,属性文件配置是按照key-value的模式配置的):

【作者简介】

秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。

此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

转载地址:http://obmzz.baihongyu.com/

你可能感兴趣的文章
Hmz 的女装(递推)
查看>>
HDU5589:Tree(莫队+01字典树)
查看>>
Codeforces Round #459 (Div. 2):D. MADMAX(记忆化搜索+博弈论)
查看>>
不停机替换线上代码? 你没听错,Arthas它能做到
查看>>
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
查看>>
分库分表的 9种分布式主键ID 生成方案,挺全乎的
查看>>
MySQL不会丢失数据的秘密,就藏在它的 7种日志里
查看>>
Python开发之序列化与反序列化:pickle、json模块使用详解
查看>>
回顾-生成 vs 判别模型-和图
查看>>
采坑 - 字符串的 "" 与 pd.isnull()
查看>>
无序列表 - 链表
查看>>
SQL 查询强化 - 数据准备
查看>>
SQL 强化练习 (四)
查看>>
Excel 拼接为 SQL 并打包 exe
查看>>
Pandas数据分析从放弃到入门
查看>>
Matplotlib绘制漫威英雄战力图,带你飞起来!
查看>>
机器学习是什么
查看>>
《小王子》里一些后知后觉的道理
查看>>
《自私的基因》总结
查看>>
《山海经》总结
查看>>