jdbc basedao mysql_Java访问数据库之JDBC实现方式

数据库连接池

数据库连接池用c3p0-0.9.1.2.jar包,通过配置文件的方式来维护数据库连接信息。在类路径下新建c3p0-config.xml文件,内容如下:

root

123456789

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/shiro?characterEncoding=utf-8

5

5

5

20

20

5

JdbcUtils类

该类主要用来加载c3p0数据源属性,获取connection及释放connection。

/**

* 获取数据库连接,及sql语句

*@author逍遥居士

*@versionV 1.0

*/

publicclassJdbcUtils {

privatestaticDataSourcedataSource=null;

static{

//加载c3p0数据源

dataSource=newComboPooledDataSource("shiro");

}

/**

* 返回、connection

*

*@return

*@throwsSQLException

*/

publicstaticConnection getConnection()throwsSQLException {

returndataSource.getConnection();

}

/**

* 根据sql语句名获取具体的sql语句命令

*

*@paramname

*@return

*/

publicstaticString getSql(Stringname) {

Mapsqls=null;

try{

sqls= QueryLoader.instance().load("/sql.properties");

returnsqls.get(name);

}catch(IOExceptione) {

e.printStackTrace();

}

returnnull;

}

/**

* 释放连接资源

*

*@paramconnection

*/

publicstaticvoidrealseDb(Connectionconnection) {

if(connection!=null) {

try{

connection.close();

}catch(SQLExceptione) {

e.printStackTrace();

}

}

}

publicstaticvoidrelase(ResultSetreslutSet,Statementsatement) {

if(reslutSet!=null) {

try{

reslutSet.close();

}catch(SQLExceptione) {

e.printStackTrace();

}

}

if(satement!=null) {

try{

satement.close();

}catch(SQLExceptione) {

e.printStackTrace();

}

}

}

}

JDBCDao 接口

Dao定义 Dao 的基本操作,由BaseDao提供实现。

/**

*Dao接口, 定义Dao的基本操作, 由 BaseDao 提供实现.

*

*@param:

*Dao实际操作的泛型类型

*@author逍遥居士

*@versionV 1.0

*/

publicinterfaceDAO {

/**

* 执行 INSERT 操作, 返回插入后的记录的 ID

*

*@paramsql:

*            待执行的 SQL 语句

*@paramargs:

*            填充占位符的可变参数

*@return: 插入新记录的 id

*/

intinsert(Stringsql, Object...args);

/**

* 执行 UPDATE 操作, 包括 INSERT(但没有返回值), UPDATE, DELETE

*

*@paramsql:

*            待执行的 SQL 语句

*@paramargs:

*            填充占位符的可变参数

*/

booleanupdate(Stringsql, Object...args);

/**

* 执行单条记录的查询操作, 返回与记录对应的类的一个对象

*

*@paramsql:

*            待执行的 SQL 语句

*@paramargs:

*            填充占位符的可变参数

*@return: 与记录对应的类的一个对象

*/

T query(Stringsql, Object...args);

/**

* 执行多条记录的查询操作, 返回与记录对应的类的一个 List

*

*@paramsql:

*            待执行的 SQL 语句

*@paramargs:

*            填充占位符的可变参数

*@return: 与记录对应的类的一个 List

*/

List queryForList(Stringsql, Object...args);

/**

* 执行一个属性或值的查询操作, 例如查询某一条记录的一个字段, 或查询某个统计信息, 返回要查询的值

*

*@paramsql:

*            待执行的 SQL 语句

*@paramargs:

*            填充占位符的可变参数

*@return: 执行一个属性或值的查询操作, 例如查询某一条记录的一个字段, 或查询某个统计信息, 返回要查询的值

*/

E getForValue(Stringsql, Object...args);

/**

* 执行批量更新操作

*

*@paramsql:

*            待执行的 SQL 语句

*@paramargs:

*            填充占位符的可变参数

*/

voidbatch(Stringsql, Object[]...args);

}

BaseDao泛型类

BaseDao实现DAO的方法。

/**

* 定义BaseDao泛型类

*

*@author逍遥居士

*@versionV 1.0

*

*@param

*            实际操作类型

*/

publicclassBaseDAOimplementsDAO {

privateQueryRunnerqueryRunner=newQueryRunner();

privateClasstype;

publicBaseDAO() {

type= ReflectionUtils.getSuperGenericType(getClass());

}

/**

* 返回一个具体的值

*

*@paramsql

*@paramargs

*@return

*/

public E getForValue(Stringsql, Object...args) {

Connectionconnection=null;

try{

connection= JdbcUtils.getConnection();

return(E)queryRunner.query(connection,sql,newScalarHandler<>(),args);

}catch(SQLExceptione) {

e.printStackTrace();

}

finally{

JdbcUtils.realseDb(connection);

}

returnnull;

}

/**

* 返回多个对象

*

*@paramsql

*@paramargs

*@return

*/

publicList queryForList(Stringsql, Object...args) {

Connectionconnection=null;

try{

connection= JdbcUtils.getConnection();

returnqueryRunner.query(connection,sql,newBeanListHandler<>(type),args);

}catch(SQLExceptione) {

e.printStackTrace();

}

finally{

JdbcUtils.realseDb(connection);

}

returnnull;

}

/**

* 返回一个对象

*

*@paramsql

*@paramargs

*@return

*/

publicT query(Stringsql, Object...args) {

Connectionconnection=null;

try{

connection= JdbcUtils.getConnection();

returnqueryRunner.query(connection,sql,newBeanHandler<>(type),args);

}catch(SQLExceptione) {

e.printStackTrace();

}

finally{

JdbcUtils.realseDb(connection);

}

returnnull;

}

/**

* 增、删、改

*

*@paramsql

*@paramargs

*/

publicbooleanupdate(Stringsql, Object...args) {

Connectionconnection=null;

booleanflag=false;

try{

connection= JdbcUtils.getConnection();

queryRunner.update(connection,sql,args);

flag=true;

}catch(SQLExceptione) {

e.printStackTrace();

}

finally{

JdbcUtils.realseDb(connection);

}

returnflag;

}

/**

* 根据插入的记录获取相应的主键值

*

*@paramsql

*@paramargs

*/

@Override

publicintinsert(Stringsql, Object...args) {

intid= 0;

Connectionconnection=null;

java.sql.PreparedStatementpreparedStatement=null;

ResultSetresultSet=null;

try{

connection= JdbcUtils.getConnection();

preparedStatement=connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

if(args!=null) {

for(inti= 0;i

preparedStatement.setObject(i+ 1,args[i]);

}

}

preparedStatement.executeUpdate();

resultSet=preparedStatement.getGeneratedKeys();

if(resultSet.next()) {

id=resultSet.getInt(1);

}

}catch(SQLExceptione) {

e.printStackTrace();

}finally{

JdbcUtils.relase(resultSet,preparedStatement);

}

returnid;

}

/**

* 批量处理

*

*@paramsql

*@paramargs

*/

@Override

publicvoidbatch(Stringsql, Object[]...args) {

Connectionconnection=null;

try{

connection= JdbcUtils.getConnection();

queryRunner.batch(connection,sql,args);

}catch(SQLExceptione) {

e.printStackTrace();

}

}

}

具体业务DAO实现

根据不同的业务来定义需要的接口,例如维护用户信息(CRUD)的UserDao。

0b515e3816eeef6c2030d2cf1857fa0b.png

在数据持久层定义UserDao的实现类UserDaoImpl去继承BaseDao泛型类实现具体的UserDao。

2085a856653db4feac159d81268483ea.png

在逻辑业务层去实例化UserDaoImpl,再调用相应的方法完成数据的CRUD。

f5adf1b6cf8f6ae468057340932bc1d0.png

79f7deb8191d335c66dc36d6dc99bd79.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值