使用c3p0封裝jdbc

即使寫了DBUtil感覺還是對數據庫的操作會有點麻煩,還是有一些操作是重複的,所以介紹一個傳智播客弄出來的一個jdbc的封裝,個人覺得簡潔好用。

導包:鏈接:jar提取碼:rdgt
還有一個mysql驅動包,這個包都不知道的話建議還是先學jdbc
準備一個數據庫和表Category
在這裏插入圖片描述

配置一個c3p0配置文件,放在src目錄下
在這裏插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<!-- 這是默認配置信息 -->
	<default-config> 
		<!-- 連接四大參數配置 -->
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/how2java?characterEncoding=utf-8</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="user">root</property>
		<property name="password">gt1010992686</property>
		<!-- 池參數配置 -->
		<property name="acquireIncrement">3</property>
		<property name="initialPoolSize">10</property>
		<property name="minPoolSize">2</property>
		<property name="maxPoolSize">10</property>
	</default-config>
	
	
</c3p0-config>

很顯然配置數據庫的參數就在這裏,密碼和數據庫名改改就能用了,下面是幾個關於c3p0的連接池的參數。

CRUD操作,那些connection prestatement statement resultset都不用我們寫了,直接封裝好了

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.itcast.jdbc.TxQueryRunner;

public class JdbcUtil {
	//qr是一個把所有增刪改查都封裝好了的類
	private QueryRunner qr = new TxQueryRunner();
	
	//添加
	public void add(Category category)  {
		try {
		String sql = "insert into category_ values (?,?)";
		//這裏的參數對應上面sql語句裏面的?
		Object param[] = {category.getId(),category.getName()};
		//執行得到結果
		qr.update(sql,param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public void delete(int id) {
		try {
		//參數既可以用一個數組保存也可以直接寫在qr調用的方法後面
		//例如 qr.update(sql,category.getId(),category.getName())和qr.update(sql,param)一樣
		String sql = "delete category_ where id = ?";
		qr.update(sql,id);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public void update(Category category,int id) {
		try {
			//和添加基本一樣
			String sql = "update category_ set id = ? name = ? where id = ?";
			Object param[] = {category.getId(),category.getName(),id};
			qr.update(sql,param);
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
	public List<Category> selectAll(){
		List<Category> list = new ArrayList<>();
		try {
			String sql = "select * from category_";
			//beanListHandler使用反射原理把查詢出來數據變成對象再放進List中
			 list =  qr.query(sql, new BeanListHandler<Category>(Category.class));
			
			return list;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		return null;
	}
	
	public Category findById(int id) {
		try {
			String sql = "select * from category where id=?";
			//BeanHandler是單個的數據變成對象
			return qr.query(sql, new BeanHandler<Category>(Category.class), id);
		} catch(SQLException e) {
			throw new RuntimeException(e);
		}
	}
}

Category對象

public class Category {
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Category [id=" + id + ", name=" + name + "]";
	}
	
	
}

測試方法`

import java.util.List;

public class Test {
	public static void main(String[] args) {
		JdbcUtil jdbcUtil = new JdbcUtil();
		List<Category> list = jdbcUtil.selectAll();
		for(int i = 0;i < list.size();i++) {
			System.out.println(list.get(i));
		}
	}
}

在這裏插入圖片描述
感覺這樣寫比傳統的jdbc要方便很多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章