J2EE 之easyui+servlet+javabean模式(一)

Easyui+servket+javabean模式

實體層

持久層

業務層

 

 

項目 https://gitee.com/night_lack/easyui_servlet_javabean.git

 

 

實體層創建

其實就是爲每一張數據表創建創建一個實體類,實體類的成員變量的變量名、類型、長度和個數要和數據表的字段名、字段類型、字段長度和個數要一致。

如:login數據表的表結構如下圖所示。

 

 

則login數據表的實體類的代碼如下。

package entity;

public class LoginEntity {

private long id;

private String name;

private String pass;

public long getId() {  return id;  }

public void setId(long id) {  this.id = id;  }

public String getName() { return name; }

public void setName(String name) {  this.name = name;  }

public String getPass() { return pass; }

public void setPass(String pass) { this.pass = pass; }

}

 

 

 

持久層創建

第一步:在項目中的"Java Resources\src目錄中創建一個數據包,包名爲dao,然後右單擊數據包“ado”彈出如下的快捷菜單。

 

第二步:單擊“new->class”創建數據庫連接類DataConnection.java,如下圖所示。

第三步:單擊“Finish”按鈕完成DataConnection.java的創建。如下圖所示。

 

 

第四步:編寫DataConnection.java類的代碼,(注意引入的是com.sql下的包))代碼如下

package ado;

import java.lang.reflect.*;  //反射類庫

import java.sql.*;  //連接mysql數據庫相關的類都存入在java.sql數據包中,所以我們採用了"java.sql.*".

import java.util.*;//      java工具包

public class DataConnection<T>{

//連接數據庫的驅動程序的字符常量

private static final String DBDRIVER="org.gjt.mm.mysql.Driver";

//連接數據庫地址,其中jdbc是連接數據庫的主協議;mysql是子協議;localhost:3306是我們在本機上安裝的mysql數據庫管理服務器名,stsc是在myssql數據庫系統中創建的數據庫名

private static final String DBURL="jdbc:mysql://localhost/stsc";

//連接數據庫管理員,是mysql數據庫的系統管理員root

private static final String DBUSER="root";

//連接數據庫管理員登錄密碼,是在安裝mysql數據庫時,給定的密碼

private static final String DBPASS="admin";

private static Connection conn=null;

/**

 * 方法用於獲取數據庫連接對象

 * @return 連接成功返回數據庫連接對象(Connection類的對象)

 */

public static Connection getConn(){

try {

//加載驅動程序

Class.forName(DBDRIVER);

//獲取數據庫連接對象

conn=DriverManager.getConnection(DBURL, DBUSER, DBPASS);

//連接成功返回連接對象

return conn;

} catch (ClassNotFoundException | SQLException e) {

e.printStackTrace();

//如果連接失敗返回null

return conn;

}

}

/**

 * 用於對數據庫操作對象進行關閉操作,一般對數據庫進行操作對象都是這三個類(ResultSet,PreparedStatement ,Connection )的對象

 * @param rs 保存從數據表取加的數據集

 * @param psta 執行sql命令的對象

 * @param conn 連接數據對象

 */

public static void close(ResultSet rs,PreparedStatement psta,Connection conn){

try {

//判斷rs不爲空,則它存在,就關閉它

if(rs != null){

rs.close();

}

//判斷psta不爲空,則它存在,就關閉它

if(psta != null){

psta.close();

}

//判斷conn不爲空,則它存在,就關閉它

if(conn != null){

conn.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

 

/**

 * 執行insert、update和delete命令的方法

 * @param sqlcomm sql命令字符串

 * @param para sql命令中參數參數所對應的值

 * @return 執行命令成功返回true,否則返回false

 */

public static boolean request(String sqlcomm,Object ... para){

boolean flag=false;

try {

//創建數據庫連接

Connection conn=getConn();

//創建執行sql命令的對象

PreparedStatement psta = conn.prepareStatement(sqlcomm);

//判斷命令中是否有參數,若沒有參數,則把參數值的數組設置爲0

if(para==null){

                para=new Object[0];

            }

//遍歷參數列表,並進行賦值

for(int i=0;i<para.length;i++){

psta.setObject(i+1, para[i]);

}

//執行sql命令

int i=psta.executeUpdate();

if(i>0){

flag= true;

}

close(null, psta, conn);

return flag;

} catch (SQLException e) {

return false;

}

}

/**

 * 用於執行查詢命令

 * @param cls 數據表所對應的實體類

 * @param sql 要執行的sql查詢命令

 * @param para 要執行的sql命令中參數所對應的值,若沒有則爲null

 * @return 返回數據集,數據集中的第一個元素都是cls的對象

 */

public   List<T> query(Class<T> cls , String sql, Object ... para){

        List<T> list = new ArrayList<>();

        try {

            conn = getConn();

            PreparedStatement psta = conn.prepareStatement(sql);

          //判斷命令中是否有參數,若沒有參數,則把參數值的數組設置爲0

if(para==null){

                    para=new Object[0];

            }

//遍歷參數列表,並進行賦值

for(int i=0;i<para.length;i++){

psta.setObject(i+1, para[i]);

}

            ResultSet rs = psta.executeQuery(); 

            ResultSetMetaData rsmd = rs.getMetaData();//rs中列的名稱和類型的信息,並把它賦給rsmd,如:select id,name,pass from login,rsmd爲得列名稱爲id,name,pass,列的類型爲long、String、String等信息

            while(rs.next()){

                T obj = cls.newInstance(); //創建這個類的新的實例

                int col = rsmd.getColumnCount();//獲取rs中的列數據,取sql命令中所給的字段 數,如 select id,name,pass from login,則col=3

 

                //遍歷rs中所有列

                for (int i=1; i<=col; i++){

                    String DBField = rsmd.getColumnLabel(i); //獲取第i列名稱

                    Field field = cls.getDeclaredField(DBField); //獲取cls類中定的成員變量名與列名DBField

                    field.setAccessible(true); //私有可見

                    field.set(obj, rs.getObject(i));//把rs元素中的第i個列的值,賦給對象obj的field成員變量

                }

                list.add(obj);//obj添加到list中

            }

            close(rs, psta, conn);

        } catch (Exception e) {

         e.printStackTrace();

        }

        return list; 

    }

}

 

 

第四步:測試DataConnection.java類是否能夠正確的應用。

1、測試是否能夠連接到數據庫,我們在data數據包創建一個Test.java類,代碼如下。

package ado;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(DataConnection.getConn().toString());

}

}

運行Test.java程序,若見如下的信息,則表示連接成功。

com.mysql.jdbc.JDBC4Connection@d8cfe0

2、測試是否能夠正確執行增刪改操作,代碼如下。

package ado;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

String sql="insert into login(name,pass) values(?,?)";//定義要執行的sql命令

Object[] para=new Object[]{new String("test"),new String("test")};//定義兩個一個數組用於存放與sql命令參數對應的數據值。

if(DataConnection.request(sql, para)){//調用數據庫類中的request()方法,執行sql命令,若執行成功返回true,否則返回false

System.out.println("添加數據成功");

}else{

System.out.println("添加數據失敗");

}

}

}

運行程序結果如下。

 

3、測試查詢命令是否能夠執行,代碼如下。

package ado;

import java.util.*;

import entity.LoginEntity;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

String sql="select id,name,pass from login ";//定義要執行的sql命令

LoginEntity Login=new LoginEntity();//創建數據表的實體類

DataConnection dc=new DataConnection<LoginEntity>();//創建數據庫類的對象

List<LoginEntity> list=dc.query(Login.getClass(), sql, null);//調用查詢方法返回數據集

for (LoginEntity LoginEntity : list) {//採用遍歷方式把數據進行輸出

System.out.println("id="+LoginEntity.getId()+",name="+LoginEntity.getName()+",pass="+LoginEntity.getPass());

}

 

}

}

運行程序結果如下:

 

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