Java泛型與數(shù)據(jù)庫應(yīng)用實(shí)例詳解
本文實(shí)例講述了Java泛型與數(shù)據(jù)庫應(yīng)用。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
BaseDao定義了基本的數(shù)據(jù)庫增刪查改, 之后可以繼承該泛型類,實(shí)現(xiàn)各自的增刪查改,或者使用超類的增刪查改,同時(shí)每個(gè)繼承類還能增加自己的操作。
二 實(shí)戰(zhàn)
1 BaseDao.java
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class BaseDao<T> {
Connection connection;
PreparedStatement pStatement;
String urlString = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF8";
String drivString = "com.mysql.jdbc.Driver";
void OpenDB() {
try {
if (connection == null) {
Class.forName(drivString);
this.connection = DriverManager.getConnection(urlString, "root", "123456");
}
} catch (Exception e) {
e.printStackTrace();
}
}
void CloseDB() {
try {
if (pStatement != null) pStatement.close();
if (connection != null) connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void Save( T t ) {
OpenDB();
String table = "";
String sqlString = "insert into ";
try {
table = t.getClass().getSimpleName();
Field[] fields = t.getClass().getDeclaredFields();
sqlString += table;
String sqlNameString = "";
String sqlValString = "";
for (Field field : fields) {
sqlNameString += field.getName() + ",";
sqlValString += "?,";
}
sqlNameString = sqlNameString.substring(0, sqlNameString.length() - 1);
sqlValString = sqlValString.substring(0, sqlValString.length() - 1);
pStatement = connection.prepareStatement(sqlString + " (" + sqlNameString + ") values (" + sqlValString + ")");
int n = 1;
for (Field field : fields) {
field.setAccessible(true);
System.out.println(field.get(t).toString());
pStatement.setString(n, field.get(t).toString());
n++;
}
pStatement.executeUpdate();
CloseDB();
} catch (Exception e) {
e.printStackTrace();
CloseDB();
}
}
public void Del( T t ) {
}
public void Update( T t ) {
}
public void Search( T t ) {
}
}
2 StudentDao.java
public class StudentDao extends BaseDao<Student> {
}
3 TeacherDao.java
public class TeacherDao extends BaseDao<Teacher> {
}
4 Student.java
public class Student {
public String name;
public int age;
public String dept;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return the dept
*/
public String getDept() {
return dept;
}
/**
* @param dept the dept to set
*/
public void setDept(String dept) {
this.dept = dept;
}
}
5 Teacher.java
public class Teacher {
}
6 TestDao.java
public class TestDao {
public static void main(String[] args) {
System.out.println("ok");
Student stud=new Student();
stud.age=20;
stud.name="zhangsan";
stud.dept="computer";
StudentDao sd=new StudentDao();
sd.Save(stud);
System.out.println(stud.dept);
}
}
三 運(yùn)行
ok
zhangsan
20
computer
computer

四 怎樣在IDEA中導(dǎo)入jar包
可參考附錄:IDEA連接數(shù)據(jù)庫(導(dǎo)入jar包)
五 另外一種寫法
StudentDao.java
public class StudentDao<M> extends BaseDao<M> { // 這里的M可以是任意合法標(biāo)識符
}
TestDao.java
public class TestDao {
public static void main(String[] args) {
System.out.println("ok");
Student stud=new Student();
stud.age=20;
stud.name="zhangsan2";
stud.dept="computer";
StudentDao<Student> sd=new StudentDao<>(); // 這里要說明是Student
sd.Save(stud);
System.out.println(stud.dept);
TeacherDao<Teacher> te= new TeacherDao<>();
}
}
附:IDEA連接數(shù)據(jù)庫(導(dǎo)入jar包)
Java連接 MySQL 需要驅(qū)動包,最新版下載地址為:http://dev.mysql.com/downloads/connector/j/,解壓后得到j(luò)ar庫文件,然后在對應(yīng)的項(xiàng)目中導(dǎo)入該庫文件。
IDEA導(dǎo)入jar過程:新建文件夾(名稱任意,這里使用Lib),導(dǎo)入mysql-connector-java-*.*.**-bin.jar如下圖

右鍵點(diǎn)擊jar文件,然后點(diǎn)擊Add as Library,jar導(dǎo)入成功。后面百度java使用mysql即有詳細(xì)的訪問mysql的代碼。

ecplice導(dǎo)入jar過程:新建文件夾(名稱任意,這里使用Lib),導(dǎo)入mysql-connector-java-*.*.**-bin.jar如下圖

右鍵-》buildpath-》add to build path
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
如何擴(kuò)展Spring Cache實(shí)現(xiàn)支持多級緩存
這篇文章主要介紹了如何擴(kuò)展Spring Cache實(shí)現(xiàn)支持多級緩存,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理(總結(jié))
這篇文章主要介紹了Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
Spring MVC實(shí)現(xiàn)mysql數(shù)據(jù)庫增刪改查完整實(shí)例
這篇文章主要介紹了Spring MVC實(shí)現(xiàn)mysql數(shù)據(jù)庫增刪改查完整實(shí)例,從創(chuàng)建一個(gè)web項(xiàng)目開始,分享了項(xiàng)目結(jié)構(gòu)以及具體Java代碼和前端頁面等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12
設(shè)計(jì)模式之構(gòu)建(Builder)模式 建造房子實(shí)例分析
構(gòu)建模式主要用來針對復(fù)雜產(chǎn)品生產(chǎn),分離部件構(gòu)建細(xì)節(jié),以達(dá)到良好的伸縮性,考慮到設(shè)計(jì)模式來源于建筑學(xué),因此舉一個(gè)建造房子的例子,需要的朋友可以參考下2012-12-12
關(guān)于SSM框架下各層的解釋說明(Controller等)
這篇文章主要介紹了關(guān)于SSM框架下各層的解釋說明(Controller等),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
SpringBoot整合MongoDB實(shí)現(xiàn)事務(wù)管理
Spring Boot是一種快速開發(fā)Spring應(yīng)用的方式,它提供了大量的自動配置和默認(rèn)設(shè)置,以簡化開發(fā)流程,MongoDB是一個(gè)基于文檔的NoSQL數(shù)據(jù)庫,本文將介紹如何在Spring Boot應(yīng)用中整合MongoDB,并實(shí)現(xiàn)事務(wù)管理,需要的朋友可以參考下2024-07-07

