DBUtils工具类
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工具类的更多相关文章
- Java学习笔记49(DBUtils工具类二)
上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...
- Java基础-DButils工具类(QueryRunner)详解
Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...
- 30_java之DButils工具类
01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...
- DBUtils工具类的使用
DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...
- DBUtils工具类和DBCP连接池
今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...
- java使用dbutils工具类实现小程序 管家婆记账软件
1.所需创建的包和 jar包 2.创建表结构 #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...
- 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...
- dbutils工具类使用
1DBUtils工具类 1.1概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 DBUtils三个核心功 ...
- DBUtils工具类学习一
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能 1.特征 DBUtils是java编程中 ...
- Java学习笔记48(DBUtils工具类一)
上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回 ...
随机推荐
- pycharm配置tensorflow环境 适用于Python3.6 CPU
一.环境 基于安装Python3.6以及pycharm. 二.在项目设置里配置编译环境 打开pycharm新建一个项目. 打开pycharm->file->setting->proj ...
- 小妖精的完美游戏教室——人工智能,A*算法,结点篇
//================================================================//// Copyright (C) 2017 Team Saluk ...
- 学习笔记TF066:TensorFlow移动端应用,iOS、Android系统实践
TensorFlow对Android.iOS.树莓派都提供移动端支持. 移动端应用原理.移动端.嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应:二在本地运行模型, ...
- EXCEL中,如何引用一个单元格中的数据,作为另一个单元格内容中的一部分?
https://zhidao.baidu.com/question/230715654.html 假设单元格A1值是8(该值由函数计算得出),我要在单元格B1中引用A1的值,但只是作为B1单元格内容中 ...
- vue简单实例代码
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- sqlserver 知识点
数据库知识点 1.数据库操作: 增:insert into 表名 values(值1,值2,值3) 删:delete 列名 from 表名 where 条件 改:update 表名 set =值 wh ...
- winscp工具和xshell连接linux机器时切换到root账户
由于工作中一些机器不能以root直接登陆(sshd_config配置了不能直接root登陆),但是又想连接的时候切换为root用户 处理方式 1.给普通用户sudo su - 权限 命令行输入visu ...
- MySQL高可用工具--orchestrator
orchestrator是一款MySQL高可用工具,其支持: 集群拓扑探测 集群拓扑重塑 故障恢复 提供3种使用方式: 命令行 HTTP API web页面 orchestator github地址
- Windows硬链接 软链接 符号链接 快捷方式
http://blog.nsfocus.net/shortcuthard-linkjunction-pointsymbolic-link/ Windows支持4种”链接”机制,分别是shortcut. ...
- Group(), Groups(),& Groupdict() 用法
group() 返回一个或多个匹配的字串.如果只有一个参数,结果只有单个字符串:如果有多个参数,结果是一个元组,元组里每一项对应一个参数.没有参数,group1默认是0(整个匹配串被返回).如果gro ...