1. 程式人生 > >spring jdbcTemplate 做持久層 並對其進行優化

spring jdbcTemplate 做持久層 並對其進行優化

這個系列的文章不只是為了向大家介紹成果,同時也是開發過程的記錄,也是一個腳印吧。

為什麼選擇jdbcTemplate

    本人在開發的過程中接觸到的持久層包括 hibernate 、mybatis .. 兩種持久層框架都感覺不盡如人意。首先說說hibernate,hibernate對資料庫操作進行了重量級封裝,使得對資料庫的操作完全是面向物件的操作,其中的面向物件操作成為很多開發人員的福音。但是hql就不那麼好了,hql雖然是sql的簡化版本,但是hql畢竟是在sql上面套了一層,如果有一天你的程式在那一塊操作變的異常的緩慢,那麼對hql優化將會變得比較間艱難,而且hibernate底層大量使用了反射機制,雖然其反射大多數情況都是在程式初始化時執行的,但是在程式執行過程中反射機制也是存在的。而mybatis是持久層的輕量級封裝,在mybatis中如果需要進行某一個操作,首先需要定義mapper,然後再定義mapper.xml。在mapper.xml中需要完成model對映,需要寫上介面相關的sql,這個過程作者認為重複性的工作比較大。如果能夠在java類中直接書寫sql,同時還能夠進行簡單的物件操作,那麼程式將既擁有hibernate的部分有點,又將擁有mybatis的部分有點。在今後的開發中,我將會使用spring jdbcTemplate進行開發。

jdbcTemplate 的缺點

jdbcTemplate開發時不需要定義那麼多的xml,不會有hql語句優化艱難的缺點,但是其存在一個致命性的問題,就是太過基礎,基礎的就像在使用jdbc進行操作。這嚴重影響了開發的效率。不過也正因為其基礎性非常好,才使得其優化具有可行性。

如何進行jdbcTemplate的優化

      我認為提高jdbcTemplate 開發效率的方式是使用其具有面向物件的功能,比如說我們可以定義方法使得傳入物件就可以完成單表CRUD操作、比如說,我們查詢的時候,查詢介面可以完成到DTO或者model的對映。

        這個時候我們就會想這在model上,或者dto上寫上註解。使得欄位可以與成員變數對映,然後使用反射操作將結果對映成物件。前面定義註解我認為是可取的,因為寫註解的開銷並不是很大。當然如果實體很多的時候,重複性也是會讓人受不了的。不過我之前寫過一個eclipse的外掛,該外掛可以給定義的實體批量的添加註解,雖然新增的註解有時候會有誤差。但是修改比重複的新增效率總會提升很多很多吧。而後者使用反射來進行CRUD操作我認為是不可取的,因為反射的效率太慢了。

        我的想法是自動生成實體相關的crud操作例項化物件,然後建立可以map物件儲存 實體的class與crud操作類相對映,每次對某個實體進行crud操作時,就從map中獲取的操作物件,然後呼叫該操作類完成操作即可,業務處理過程將不存在任何的反射操作。

理想如此豐滿,現實意味著妥協

       我採用javasist+freemarker的相關技術完成了相關的功能,由於javasist的很多的限制,比如說javasist不支援泛型,javasist生成的類有時候會不能通過java虛擬機器的安全校驗,結果不是像前面說的那麼的完美,但是最終的結果應該是等效的。

相關推薦

spring jdbcTemplate 持久 進行優化

這個系列的文章不只是為了向大家介紹成果,同時也是開發過程的記錄,也是一個腳印吧。 為什麼選擇jdbcTemplate     本人在開發的過程中接觸到的持久層包括 hibernate 、mybatis .. 兩種持久層框架都感覺不盡如人意。首先說說hibernate,hib

翻譯:如何在Ubuntu16.04上安裝Mosquitto這個MQTT消息服務器進行安全配置

加ss ide 特定 path cert 安裝完成 再次 應用 ron 原文地址: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-the-mosquitto-mqtt-m

遍歷各個像素點進行修改

width imwrite filename print n) pre use img app #Author C import osimport cv2list = []for filename in os.listdir(r‘C:\Users\Uaena\Desktop

建立一棵用二叉樹連結串列方式儲存的二叉樹,進行遍歷(先序,中序和後序),列印輸出遍歷結果

題目如下 程式碼如下 #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct Node//結構體 {

ListView的簡單應用進行簡單優化

主佈局檔案(只有一個ListView) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

Unity3D用程式碼方式建立一個Cube進行操作用C#實現

// Use this for initialization void Start () { //我們將obj1初始化為一個Cube立方體,當然我們也可以初始化為其他的形狀 GameObject obj1 = GameObject.CreatePrimitiv

Java——集合轉陣列進行遍歷

* A:集合的遍歷 * 其實就是以此獲取集合中的每一個元素 * B:案例 * 把集合轉成陣列,可以實現集合的遍歷 * public Object[] toArra

將圖片檔案轉化為位元組陣列字串,進行Base64編碼處理和 位元組陣列字串進行Base64解碼生成圖片

public static String imageToBase64(String path) { // 將圖片檔案轉化為位元組陣列字串,並對其進行Base64編碼處理 byte[] data = null; // 讀取圖片位元組

減少drawable.xml進行管理

我們開發Android的時候經常會碰到給按鈕或者文字設定背景,圓角,填充顏色,描邊,按壓狀態這些樣式,首先想到的就是用shape,selector生成一個xml檔案然後通過drawable引用,但是隨著專案維護迭代的時間越長,你會發現shape,selector檔案的數量會瘋

GreenDao資料庫框架 最精簡使用教程 進行簡單封裝

GreenDao框架的使用步驟:(android studio) 1.首先在project的build.gradle下進行新增如下依賴: dependencies { classpath 'org.greenrobot:greendao-grad

通過反射訪問私有屬性進行修改

public class Private { private String name="Lucy"; public String getName() { return name; } } import java.lang.Class; import ja

Java建立一個text文字檔案,進行讀寫操作

package test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.

在應用來截獲資料鏈路的幀處理

目前大多數作業系統都為應用程式提供訪問資料鏈路層的強大功能。這種功能可以提供如下能力:能夠監視由資料鏈路層接收的分組,使得諸如(tcpdump)等程式能夠在普通計算機系統上執行,而無需專門的硬體裝置來監視分組。如果結合使用網路介面 進入混雜模式(promiscuous mode)的能力,那麼應用程式設定能夠監

sell01 環境搭建、編寫持久進行測試

boot 就會 -s 虛擬 調試 deb project 直接 jdk1 1 環境配置   JDK  1.8   MAVEN  3.5   MYSQL  5.7   VirtualBox  5.1 2 搭建MYSQL環境   下載 VM 和 虛擬鏡像文件   虛擬鏡

取出一個圖的symbol 在基礎上進行修改

earch con sender true search nbsp return eat cursor 取出一個圖層的symbol 在其基礎上對其進行修改 private void button1_Click(object sender, EventArgs e)

演算法 -- 猴子選大王的四種方法,時間與記憶體消耗的分析和對比&PHP

本篇利用PHP對“猴子選大王”問題,給出了四種方法,並對其進行了時間消耗的分析與對比。 題目:n個猴子要選出一個大王,隨機給出一個數m,當猴子報數為m的時候,則被淘汰,剩餘的最後一個猴子即為大王。  一、演算法解釋及程式碼展示 方法一:圍圈報數 n 個猴子圍成一圈從 1

輸入字串,大小寫和字元進行統計輸出

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //輸入字串,並對其大小寫和字元進行統計輸出 //經分析,除了英文,其他都是字元。 void main(void) { char

Java基於jdbctemplate資料持久操作封裝

相關資源分享-下載可直接使用: https://download.csdn.net/download/csdn_heliu/10736181 JdbcTemplate簡介: spring對資料庫的操作在jdbc上面做了深層次的封裝,使用spring的注入功能,可以把DataSour

dom4j解析xml 檔案 操作

程式碼例項 package cn.test.dom4jtest; import java.io.FileOutputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHel

Spring+Data+JPA持久的使用及注意事項(三)——Failed to load ApplicationContext無法載入配置檔案

Failed to load ApplicationContext這個問題是有很多的,我的檢查過程是這樣:1,檢查web.xml中對於spring的listener的配置是否有問題,因為我這是一鍵生成的,所以主要是看路徑問題,也就是location有沒有配對    <!