数据库(CRUD)操作MyDButils工具类
1、创建db.properties文件
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
username=root
password=123456
driver=com.mysql.jdbc.Driver
initialSize=20
minIdle=5
maxActive=30
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
注意
这个url中test是我的数据库名称,填写你自己的创建的数据库名称
username、password为你自己创建数据库的用户名和密码!
注意db.properties文件路径问题
Maven项目放在resources文件下
例如:
2、MyDButils工具类
Maven项目需要导入以下依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
复制粘贴即用,注意改package 路径
package com.hzc.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.beanutils.BeanUtils;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.sql.Date;
import java.util.*;
public class MyDbutils {
private static Connection connection=null;
private static PreparedStatement pre=null;
private static ResultSet resultSet=null;
//1.连接数据库返回一个connection
public static Connection getConnection() throws Exception {
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().
getResourceAsStream("config/db.properties");
Properties properties = new Properties();
properties.load(resourceAsStream);
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
return connection;
}
//2.关闭资源
public static void closeResources() throws SQLException {
try {
if(resultSet !=null)resultSet.close();
} catch (Exception e) {
}
try {
if(pre !=null)pre.close();
} catch (Exception e) {
}
try {
if(connection !=null)connection.close();
} catch (Exception e) {
}
}
//3.我们把我们的这个数据库的操作进行封装两个方法:(他可以完成的是你的,数据库层面 增,删,改)
public static int executeUpdate(String sql, Object...objects) throws Exception {
int count=0;
connection = MyDbutils.getConnection();
pre = connection.prepareStatement(sql);
if(objects!=null){
for (int i=0;i<objects.length;i++){
pre.setObject(i+1,objects[i]);
}
}
count=pre.executeUpdate();
closeResources();
return count;
}
//4.数据库查询,返回查询的数据
public static <T> List<T> Query(Class<T> clazz,String sql, Object...objects) throws Exception {
connection = MyDbutils.getConnection();
pre= connection.prepareStatement(sql);
if (objects!=null){
for (int i=0;i<objects.length;i++){
pre.setObject(i+1,objects[i]);
}
}
ResultSet rs = pre.executeQuery();
List<T> resultList = new ArrayList<>();
ResultSetMetaData rsmd = rs.getMetaData();
// 获取记录列的数量
int colNum = rsmd.getColumnCount();
while(rs.next()){
// 用户存储?条记录,row = [{key1=列名 value1=值,{key2=列名 value2=值}]
Map<String, Object> rowMap = new HashMap<>();
//循环处理
for (int i=0;i<colNum;i++)
{
// 获取列名 --- Student对象的属性名
String colNumName = rsmd.getColumnLabel(i + 1);
// 获取列名的取值----Student对象的属性值
Object colNumValue = rs.getObject(colNumName);
// 转换java.sql.Date类型-->java.util.Date //instanceof
if (colNumValue instanceof java.sql.Date){
java.sql.Date SqlDate = (java.sql.Date) colNumValue;
java.util.Date UtilDate=new java.util.Date(SqlDate.getTime());
colNumValue=UtilDate;
}
rowMap.put(colNumName,colNumValue);
}
// System.out.println(rowMap);
// 遍历rowMap 给Student对象赋值
// 创建Bean对象 调用默认无参的构造函
T bean = clazz.newInstance(); //newInstance
for (Map.Entry<String,Object> entry:rowMap.entrySet()) {
String propertyName = entry.getKey();
Object propertyValue = entry.getValue();
if (propertyValue!=null){
BeanUtils.setProperty(bean,propertyName,propertyValue); //
/* 2、BeanUtils可以直接get和set一个属性的值。它将property分成3种类型:
Simple——简单类型,如Stirng、Int……
Indexed——索引类型,如数组、arrayList……
Maped——这个不用说也该知道,就是指Map啦,比如HashMap……
访问不同类型的数据可以直接调用函数getProperty和setProperty。
getProperty只有2个参数,第一个是JavaBean对象,第二个是要操作的属性名;
setProperty提供三个参数,第一是JavaBean对象,第二个是要操作的属性名,第三个为要设置的具体的值*/
}
}
resultList.add(bean);
}
return resultList;
}
}
3、测试结果
public class DButilsTest {
public static void main(String[] args) throws Exception {
String sql="select *from user";
List<User> userList = MyDbutils.Query(User.class, sql);
//List<User> userList = MyDbutils.Query(User.class, sql,这里可以传入参数);
for (User user:userList) {
System.out.println("用户名:"+user.getName());
}
}
}
用户名:Uzi
用户名:xiaoming
用户名:小虎
用户名:jack
用户名:rose