import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties; public class DBUtils {
private static String driverName;
private static String url;
private static String username;
private static String password; static{
try {
//读取配置文件的信息
Properties properties = new Properties();
//从资源路径中去获取配置属性
InputStream is = DBUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");
try {
properties.load(is);
driverName = properties.getProperty("driverName");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
//1. 加载驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public static Connection getConnection(){
//获取连接对象
Connection connection = null;
try {
connection = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
} public static void closeAll(AutoCloseable...cs){
if(cs != null){ //如果只传了一个null过来,则不用进行遍历
for(AutoCloseable c: cs){
if(c != null){ //如果多个参数中有一个为null,则不用关闭
try {
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
//CommonUtils 公共的数据库操作工具类

import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties; //公共的数据库操作工具类--增删改
public class CommonUtils <T> {
//公共类--增删改
public static int updateCommon(String sql,Object...objs){
//获取连接对象,再获取执行对象,操作添加
Connection conn = null;
PreparedStatement prst = null;
try {
conn = DBUtils.getConnection();
prst = conn.prepareStatement(sql);
//遍历传入的对象的多个字段
for(int i=0;i<objs.length;i++){
prst.setObject(i+1, objs[i]);
}
return prst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtils.closeAll(prst,conn);
}
return 0;
} //公共类---查询---注意:要传一个反射对象进来
public List<T> queryCommon(String sql,Class<T> clazz,Object...objs){
Connection conn = null;
PreparedStatement prst = null;
ResultSet resultSet = null;
List<T> list = new ArrayList<>();
try {
conn = DBUtils.getConnection(); //获取连接对象
prst = conn.prepareStatement(sql);
//遍历传入的对象的多个字段
for(int i=0;i<objs.length;i++){
prst.setObject(i+1, objs[i]);
} resultSet = prst.executeQuery(); //获取到结果集
//---最终将结果集的信息存储到List集合中---
while(resultSet.next()){ //循环一次,就是一条记录(一个对象)
//clazz.getFields(); //私有的属性获取不到
Field[] fields = clazz.getDeclaredFields();
T t = clazz.newInstance(); //通过反射对象获取到实体类对象
for(Field f: fields){
String fieldName = f.getName(); //得到属性名 //获取字段对应值
Object value = null;
try {
value = resultSet.getObject(fieldName); //如何确定获取的字段---对应上属性名
} catch (SQLException e) {
//获取映射属性中的字段名(is_admin)
Properties properties = new Properties();
try {
properties.load(CommonUtils.class.getClassLoader().getResourceAsStream("mapping.properties"));
} catch (IOException e1) {
e1.printStackTrace();
}
fieldName = properties.getProperty("isAdmin");
value = resultSet.getObject(fieldName);
} f.setAccessible(true); //设置权限
f.set(t, value); //把值设置的对象的属性中
}
list.add(t); //将对象存储到集合中
} } catch (SQLException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}finally {
DBUtils.closeAll(resultSet,prst,conn);
}
return list;
} //-------分页获取总条数-------
public static int getTotalCount(String sql){
//获取连接对象,再获取执行对象,操作添加
Connection conn = null;
PreparedStatement prst = null;
ResultSet resultSet = null;
try {
conn = DBUtils.getConnection();
prst = conn.prepareStatement(sql);
resultSet = prst.executeQuery();
if(resultSet.next()){
return resultSet.getInt(1); //获取第一个字段
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtils.closeAll(resultSet,prst,conn);
}
return -1;
}
}
//Dao层示例

import java.util.List;
import com.qf.dao.IUserDao;
import com.qf.entity.User;
import com.qf.utils.CommonUtils; public class UserDaoImpl extends CommonUtils<User> implements IUserDao { @Override
public int addUser(User user) {
String sql = "insert into t_user(name,password,sex,phone,email,is_admin) values(?,?,?,?,?,?)";
int result = CommonUtils.updateCommon(sql, user.getName(),user.getPassword(),user.getSex()
,user.getPhone(),user.getEmail(),user.getIsAdmin());
return result;
} @Override
public int updateUser(User user) {
String sql="update t_user set name=?,password=?,sex=?,phone=?,email=?,is_admin=? where id=?";
int result = CommonUtils.updateCommon(sql, user.getName(),user.getPassword(),user.getSex()
,user.getPhone(),user.getEmail(),user.getIsAdmin(),user.getId());
return result;
} @Override
public int delUserById(Integer id) {
String sql="delete from t_user where id=?";
return CommonUtils.updateCommon(sql, id);
} @Override
public List<User> getUserList() {
String sql="SELECT id, NAME, PASSWORD, CASE WHEN sex = 1 THEN '男' WHEN sex = 0 THEN '女' END AS sex, email, phone, CASE WHEN is_admin = 1 THEN '是' WHEN is_admin = 0 THEN '否' END AS is_admin FROM t_user";
return super.queryCommon(sql, User.class);
} @Override
public User getUserById(Integer id) {
String sql="select * from t_user where id = ?";
List<User> list = super.queryCommon(sql, User.class,id);
if(list.size()>0){ //如果取到数据,则返回该对象
return list.get(0);
}
return null; //取不到数据,则返回null
} @Override
public int getTotalCount() {
String sql="select count(1) from t_user";
return CommonUtils.getTotalCount(sql);
} @Override
public List<User> getUserListPage(Integer startIndex, Integer pageSize) {
String sql="SELECT id, NAME, PASSWORD, CASE WHEN sex = 1 THEN '男' WHEN sex = 0 THEN '女' END AS sex, email, phone, CASE WHEN is_admin = 1 THEN '是' WHEN is_admin = 0 THEN '否' END AS is_admin FROM t_user limit ?,?";
return super.queryCommon(sql, User.class,startIndex,pageSize);
} @Override //批量删除
public int batchDelIds(String[] ids) {
StringBuilder builder = new StringBuilder("delete from t_user where id in (");
for(int i=0;i<ids.length;i++){
if(i==ids.length-1){ //最后一个则不用+“,”;要加“)”
builder.append(ids[i]+")");
}else{
builder.append(ids[i]+",");
}
}
String sql = builder.toString();
return CommonUtils.updateCommon(sql);
} @Override //验证用户名和密码是否正确
public User getUserByBackLogin(String name, String password) { String sql="select * from t_user where name=? and password=?";
List<User> list = super.queryCommon(sql, User.class, name,password);
if(list.size()>0){
return list.get(0);
}
return null;
}
}

DBUtils工具类的更多相关文章

  1. Java学习笔记49(DBUtils工具类二)

    上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...

  2. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  3. 30_java之DButils工具类

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...

  4. DBUtils工具类的使用

    DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...

  5. DBUtils工具类和DBCP连接池

    今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...

  6. java使用dbutils工具类实现小程序 管家婆记账软件

    1.所需创建的包和 jar包 2.创建表结构  #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...

  7. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用

    1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...

  8. dbutils工具类使用

    1DBUtils工具类 1.1概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 DBUtils三个核心功 ...

  9. DBUtils工具类学习一

    Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能 1.特征 DBUtils是java编程中 ...

  10. Java学习笔记48(DBUtils工具类一)

    上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回 ...

随机推荐

  1. GitHub Desktop下载及使用

    GitHub Desktop下载及使用   用了几次 GitHub Desktop 之后,发现不好用,其图形化界面功能有限.推荐使用Git for Windows,官方网站 https://git-f ...

  2. 如何打开kernel最开始的打印

    1.Kernel hacking  ---> Kernel low-level debugging functions -->   Early printk 2.boot option中你 ...

  3. sqlserver数据库不能重命名报错5030——我的一点小思考

    在学习asp.net的时候使用mssql‘经常会出现这种错误,数据库不能重名名5030的错误,其实很简单原因就是有应用程序正在占用这个连接,使用这样一行命令就可以查询出正在占用的连接 use mast ...

  4. eclipse+gradle

    一.gradle 下载与安装 下载地址:http://services.gradle.org/distributions/ 下载后,放到:D:\gradle-4.6 在系统环境变量path,中加:D: ...

  5. 【SQL触发器】类型 FOR 、AFTER、 Instead of

    1.AFTER(for)触发器 (操作后) after触发器是指在操作成功后,所采取的一些动作! 比如:下面是我创建好的一个after触发器 creat trigger [dbo].[T_Carego ...

  6. VisualSVN设置提交时必须输入日志信息

    VisualSVN设置提交时必须输入日志信息 1.svn提交时强制输入提交信息 为了阻止SVN提交空日志信息和垃圾文件可以在SVN服务器端强制必须填写日志信息,这时需用到pre-commit钩子脚本. ...

  7. python3-基础7

    协程函数 面向过程编程 递归与二分法 内置函数   lambda 模块与包的使用 import from ... import ... 常用模块 ########################### ...

  8. MVC5 方法扩展

    public static MvcHtmlString DataDictionaryDropDownList(this HtmlHelper htmlHelper, string name, obje ...

  9. 学习笔记《Java多线程编程实战指南》二

    2.1线程属性 属性 属性类型及用途  只读属性  注意事项 编号(id) long型,标识不同线程  是  不适合用作唯一标识 名称(name) String型,区分不同线程  否  设置名称有助于 ...

  10. 7.8 paint.c 程序

    ## 7.8 paint.c 程序 #include <stdio.h> #define COVERAGE 350 // 每罐尤其可刷的面积(单位:平方英尺) int main(void) ...