9.3.公共包QiDianWebCommon中MySQL数据库通用类DbManager的使用说明

数据库的增删改查,是管理系统的核心业务,所以针对数据库的常规操作和返回,进行了封装。在使用时,直接调用即可。

奇点的QiDianWebCommon包,是一个封装了常用WEB业务操作的功能包。针对MySQL数据库,提供增删改查等功能。

数据库执行类是DbManager类文件,包含有以下几大方法:

  1. 读取数据库连接配置文件,获取连接账号密码,建立连接,放入连接池。并提供获取连接方法。
  2. 执行更新、插入、批量插入、批量执行、事务执行。
  3. 查询第一行第一列数据(查询单元格数据)
  4. 查询结果是否存在
  5. 查询第一行数据
  6. 查询第一列数据
  7. 查询两列多行数据
  8. 查询多列多行数据

下面进行详细说明。

1、数据库连接

DbManager类中采用连接池技术提高性能,具体技术则是采用Tomcat的jdbc驱动。DbManager类中各个方法为静态方法,可直接使用。

在调用DbManager类的增删改查静态方法时,该方法内部会首先自动建立连接,连接成功后再执行具体方法。如果连接失败,则会抛出异常。

1.1、建立数据库连接

建立连接时,需要获取数据库连接信息,包括连接URL、数据库名称、账号、密码等信息。这些信息统一存放到dbconn.properties文件中。因此,在引入QiDianWebCommon包后,需要在当前项目的WEB-INF目录中,新建classes文件夹,再建立dbconn.properties文件。用于设定数据库连接账号信息,具体的配置项如下。

#
# *************************************************************  
# 文件:dbconn.properties  模块:TaiJiAdmin  项目:TaiJiAdmin
# 当前修改时间:2019年02月24日 17:53:45
# 上次修改时间:2019年02月23日 16:57:06
# 作者:李露
# Copyright (c) 2018-2019  苏州奇点智能科技有限公司
# *************************************************************  
#
dbUrl=jdbc:mysql://localhost:3306/dbtest?useSSL=false&useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true
dbUsername=username
dbPassword=mypassword
#isDebug=1或者0。表示是否开始调试模式。如果开启,则会输出每次执行的SQL语句。以system.out方式输出。
dbDebug=1

#连接池设置。根据实际在线量进行设置,可以在管理后台查看当前的连接池实时状态,再进行调整。
#初始化链接数量。根据实际访问量进行设置。开发模式设置为1足以。
initSize=1
#最大活动连接数。超过了连接数,新连接就要等待。
maxActive=20
#最小空闲连接数
minIdle=1
#最大空闲连接数
maxIdle=4

配置项说明如下:

  • 连接账号信息。dbUrl、dbUsername、dbPassword分别为数据库连接的URL、账号、密码。可参考上面样例进行修改。
  • dbDebug。调试开关。设置为1时,会在IDEA编辑器的控制台,或者在Tomcat的日志文件中,输出每次调用执行的SQL语句和参数。建议在开发测试时设置为1打开,在部署到Tomcat后设置为0关闭,否则会在服务器上存储大量的SQL执行日志记录。
  • 连接池设置。后面的4个参数,配置连接池体量。一般调试测试时,都设置较小。初始化连接数量、最小最大空闲连接数都为1即可。正式上线后,如果访问量大,就调大。

1.2、获取数据库连接

如果是直接调用数据库的增删改查方法,则完全不用获取数据库连接,因为方法内部会自动建立连接。

要获取数据库连接,一般用于自定义的事务执行。DbManager类中虽然也有事务执行方法,但是是按顺序批量执行SQL语句,有些事务功能无法这样执行。比如某个功能需求,是要先插入一条语句,再根据新插入记录的主键Id进行下一步的操作。那么就只能自己单独去写事务执行过程。该样例技巧在本文的事务章节中进行介绍。

获取数据库连接,调用DbManager.getConnection方法。如下样例所示,获取数据库连接后,自己写查询,自己关闭。效果一样。

扫描二维码关注公众号,回复: 9411882 查看本文章
//获取数据库连接样例。将异常抛给逻辑层。
public int AddUser() throws SQLException {
	Connection conn = DbManager.getConnection();
	if (conn == null) {
		//处理,返回错误
		System.out.println("数据库连接失败");
		return -1;
	}

	//新的finally写法。conn会自动关闭
	try (conn) {
		Object[] params = {"test", "123456", 1};
		String sql = "insert into qd_user(UserName,Password,Sex) values(?,?,?)";
		//采用QueryRunner进行数据库执行。其内部封装了prepareStatement的处理,更加方便。
		QueryRunner queryRunner = new QueryRunner();
		return queryRunner.update(conn, sql, params);
	}
}

1.3、获取数据连接池及属性

除了可以获取数据库连接,也可以获取数据库连接池。通过读取连接池的属性数据,可以及时了解连接池的状态。

获取连接池,采用DbManager.getDatasource方法。如下样例所示,可以获取连接池的各个状态值。

也可以直接调用DbManager.getDataSourceProperties方法,获取连接池状态属性。

//获取数据库连接池状态数据
public static Map<String, Object> getDataSourceProperties() {
	//采用Tomcat的数据库连接池
	org.apache.tomcat.jdbc.pool.DataSource dataSource = DbManager.getDataSource();
	if (dataSource == null) {
		return null;
	}

	//连接池属性
	ConnectionPool pool = dataSource.getPool();
	Map<String, Object> mapProp = new LinkedHashMap<>();
	mapProp.put("以下为当前实时状态", "实时状态值");
	mapProp.put("size", pool.getSize());
	mapProp.put("busy", pool.getActive());
	mapProp.put("idle", pool.getIdle());
	mapProp.put("waitCount", pool.getWaitCount());
	mapProp.put("borrowedCount", pool.getBorrowedCount());
	mapProp.put("returnedCount", pool.getReturnedCount());
	mapProp.put("createdCount", pool.getCreatedCount());
	mapProp.put("releasedCount", pool.getReleasedCount());
	mapProp.put("releasedIdleCount", pool.getReleasedIdleCount());
	mapProp.put("reconnectedCount", pool.getReconnectedCount());
	mapProp.put("removeAbandonedCount", pool.getRemoveAbandonedCount());


	return mapProp;
}

2、执行更新插入语句

2.1、执行更新

执行更新,调用update方法。返回执行影响的行数。

执行插入

批量执行

2.2、执行事务

自定义事务

3、查询单元格数据

3.1、查询结果是否存在

4、查询第一行多列数据

5、查询第一列多行数据

6、查询两列多行数据

7、查询多列多行数据

8、完整源码

发布了89 篇原创文章 · 获赞 71 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_42127613/article/details/101620299