java DAO示例
一、底層DAO實現
DAO.java
package com. atguigu.java2;
import java. lang.reflect.*;
import java. sql.*;
import java. util.*;
import org. apache.commons.dbutils.*;
import org. apache.commons.dbutils.handlers.*;
class ReflectionUtils {
//如何獲取形參 clazz的父類的泛型
public static Class
getSuperClassGeneric (Class clazz ) {
Type t = clazz .getGenericSuperclass ();
ParameterizedType type = (ParameterizedType ) t ;
Type [] types = type .getActualTypeArguments ();
return (Class ) types [0];
}
}
public class DAO<T> {
Class<T> clazz = null;
public DAO() {
// 此處的this 相當於正在建立的 customerDAO物件
clazz = ReflectionUtils.getSuperClassGeneric(this.getClass());
}
//查詢某些特殊數值的資料
public <E> E
getValue (Connection conn ,String
sql,Object ... args){
try {
ResultSetHandler <Object >handler =new ScalarHandler();
QueryRunner runner =new QueryRunner ();
Object obj =runner .query (conn , sql , handler , args);
return (E ) obj ;
} catch (Exception
e ) {
e .printStackTrace ();
}
return null;
}
//通用的查詢方法,返回多個物件的集合
public List <T > getForList (Connection
conn , String sql, Object... args ) {
QueryRunner runner = new QueryRunner ();
try {
ResultSetHandler <List <T >> handler = new BeanListHandler< T>( clazz );
List <T >list =runner .query (conn , sql , handler );
return list ;
} catch (Exception
e ) {
e .printStackTrace ();
}
return null;
}
// 通用的查詢方法,返回一個物件
public T
getInstance (Connection conn , String
sql , Object... args) {
try {
QueryRunner runner = new QueryRunner ();
ResultSetHandler <T > handler = new BeanHandler<T>( clazz);
return runner .query (conn , sql , handler , args);
} catch (Exception
e ) {
e .printStackTrace ();
}
return null;
}
// 通用的增、刪、改的方法( version
3.0)
public void update(Connection
conn , String sql , Object... args) {
try {
QueryRunner runner = new QueryRunner ();
runner .update (conn , sql , args );
} catch (SQLException
e ) {
e .printStackTrace ();
}
}
}
二、繼承DAO,事務處理
CustomerDAO .java
package com. atguigu.java2;
import java. sql.Connection;
import java. sql.Date;
import java. util.List;
public class CustomerDAO extends DAO<Customer > {
/**
*
* 獲取customers 表中的最大的日期
* @param conn
* @return
*/
public Date
getMaxBirth (Connection conn ){
String sql = "select
max(birth) from customers";
return (Date )getValue (conn ,sql );
}
/**
* 獲取customers 表中的資料的條目數
* @param conn
* @return
*/
public long getCount(Connection
conn ){
String sql = "select
count(*) from customers";
return (long) getValue(conn, sql);
}
/**
* 獲取customers 表中的所有資料
* @param conn
* @return
*/
public List<Customer > getAll (Connection
conn ){
String sql = "select
id,name,email,birth from customers";
return getForList (conn , sql );
}
/**
*按照指定的id 查詢表中的一條資料,以物件的形式返回
* @param conn
* @param custId
* @return
*/
public Customer
query (Connection conn ,int custId){
String sql = "select
id,name,email,birth from customers where id = ?";
return getInstance (conn ,sql ,custId );
}
/**
* 刪除customers 表中指定id的資料
* @param conn
* @param custId :要刪除的指定的資料的 id號
*/
public void delete(Connection
conn ,int custId){
String sql = "delete
from customers where id = ?";
update (conn ,sql ,custId );
}
/**
* 修改customers 表中的一條資料
* @param conn
* @param cust :將表中與cust的 id相同的資料改為cust的資訊
*/
public void update(Connection
conn , Customer cust ) {
String sql = "update
customers set name = ?,email = ?,birth = ? where id = ?";
update (conn ,sql ,cust .getName (), cust .getEmail (), cust.getBirth(),
cust .getId ());
}
/**
* 向customers 表中插入一條資料
* @param conn :資料庫的連線
* @param cust :將此物件新增到 customers表中
*/
public void insert(Connection
conn , Customer cust ) {
String sql = "insert
into customers(name,email,birth) values(?,?,?)";
update (conn , sql , cust .getName (), cust.getEmail(), cust.getBirth());
}
}
三、測試類
package com. atguigu.java2;
import java. sql.Connection;
import java. sql.Date;
import java. util.List;
import org. junit.Test;
import com. atguigu.java.JDBCUtils;
public class TestCustomerDAO {
CustomerDAO custDao = new CustomerDAO ();
//查詢年齡最小的日期
@Test
public void testGetMaxBirth (){
Connection conn = null;
try {
conn = JDBCUtils .getConnection ();
Date birth = custDao .getMaxBirth (conn );
System .out .println (birth );
} catch (Exception
e ) {
e .printStackTrace ();
}finally{
JDBCUtils .close (null, null, conn);
}
}
//查詢 customers表中的人數
@Test
public void testGetCount(){
Connection conn = null;
try {
conn = JDBCUtils .getConnection ();
long count = custDao .getCount (conn );
System .out .println (count );
} catch (Exception
e ) {
e .printStackTrace ();
}finally{
JDBCUtils .close (null, null, conn);
}
}
//查詢 customers表中所有資料
@Test
public void testQuery1(){
Connection conn = null;
try {
conn = JDBCUtils .getConnection ();
List <Customer > list = custDao .getAll (conn );
for(Customer
c : list ){
System .out .println (c );
}
} catch (Exception
e ) {
e .printStackTrace ();
}finally{
JDBCUtils .close (null, null, conn);
}
}
//查詢 id=20的 一條資料
@Test
public void testQuery(){
Connection conn = null;
try {
conn = JDBCUtils .getConnection ();
Customer cust = custDao .query (conn ,20);
System .out .println (cust );
} catch (Exception
e ) {
e .printStackTrace ();
}finally{
JDBCUtils .close (null, null, conn);
}
}
//刪除資料
@Test
public void testDelete(){
Connection conn = null;
try {
conn = JDBCUtils .getConnection ();
custDao .delete (conn , 18);
} catch (Exception
e ) {
e .printStackTrace ();
}finally{
JDBCUtils .close (null, null, conn);
}
}
//更新資料
@Test
public void testUpdate() {
Connection conn = null;
try {
conn = JDBCUtils .getConnection ();
Customer cust = new Customer (21, " 張藝謀", "zhangym@126.com", new Date(
new java .util .Date ().getTime ()));
custDao .update (conn , cust );
} catch (Exception
e ) {
e .printStackTrace ();
}finally{
JDBCUtils .close (null, null, conn);
}
}
//插入資料
@Test
public void testInsert() {
Connection conn = null;
try {
conn = JDBCUtils .getConnection ();
Customer cust = new Customer (21, " 張藝謀", "zhangym@126.com", new Date(
new java .util .Date ().getTime ()));
custDao .insert (conn , cust );
} catch (Exception
e ) {
e .printStackTrace ();
}finally{
JDBCUtils .close (null, null, conn);
}
}
}
相關文章
- java DAO模式Java模式
- 六:Dao
- Java中PO、DO、TO、DTO、 VO、 BO、POJO 、DAO的概念JavaPOJO
- Java NIO 程式碼示例Java
- java SPI 程式碼示例Java
- JAVA開發之簡化Dao層、提高開發效率Java
- is java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport錯誤原因JavaErrorSpringFramework
- Defi/IDO/DAO/AVIVE流動性質押挖礦系統技術開發Dapp示例APP
- java 回撥函式示例Java函式
- Java NIO程式設計示例Java程式設計
- JAVA開發之簡化Dao層、提高開發效率(二)Java
- java的幾種物件(PO,VO,DAO,BO,POJO,DTO)解釋Java物件POJO
- Java中的WeakHashMap與類示例JavaHashMap
- Java使用ObjectMapper的簡單示例JavaObjectAPP
- Java 多執行緒售票示例Java執行緒
- DAO社群治理模式系統開發需求梳理及所使用原始碼語言(Python)實現示例模式原始碼Python
- defi/Newc新鏈質押挖礦系統開發程式碼示例丨dapp丨NFT丨DAOAPP
- dao層 和controllerController
- Spring Boot Crud操作示例 | Java Code GeeksSpring BootJava
- Java 8 lambda 表示式10個示例Java
- Java設計模式之策略模式示例Java設計模式
- Java設計模式之外觀模式示例Java設計模式
- FlinkSQL寫入Kafka/ES/MySQL示例-JAVAKafkaMySqlJava
- 用Java拆分字串示例和技巧 -DreamixJava字串
- 編寫表DAO類
- Java不用遞迴的迭代快速排序示例Java遞迴排序
- Java多執行緒——synchronized的使用示例Java執行緒synchronized
- 關於Java異常的分類示例Java
- 如何解釋DAO 治理模型?模型
- DAO 的核心是什麼?
- java8 – 新的時間日期API示例JavaAPI
- Java正規表示式的語法與示例Java
- 什麼是加密貨幣DAO?加密
- DAO的起源與發展前景
- Hibernate的Dao層通用設計
- Java 10 var關鍵字詳解和示例教程Java
- Java使用代理進行網路連線方法示例Java
- Java代理機制分析——JDK代理(Proxy、InvocationHandler與示例)JavaJDK
- Java實現圖片轉字元輸出示例demoJava字元