beetlsql的基礎概念

beetlSql是一個orm框架。

據官方文檔所述:比hibernete和mybatis綜合素質要強的太多。

它的核心是SQLManager

代碼如下所示:

public static void main(String[] args) {
		String driver = "com.mysql.jdbc.Driver";
		String url ="jdbc:mysql://localhost:3306/test1";
		String userName="root";
		String password = "123456";
		DBStyle dbStyle = new MySqlStyle();
		SQLLoader sqlLoader = new ClasspathLoader();
		
		ConnectionSource ds = ConnectionSourceHelper.getSimple(driver, url, userName, password);
		NameConversion nc = new UnderlinedNameConversion();
		Interceptor[] inters =new Interceptor[]{new DebugInterceptor()};
		SQLManager sqlManager = new SQLManager(dbStyle, sqlLoader, ds, nc, inters);
		List<User> list = sqlManager.all(User.class);
		System.out.println(list);
		
		
}

解釋:

DBStyle:方言。不同的數據庫總有些不同的sql,作者做了很多的方言處理。這裏新建的是mysql

SQLLoader :sql模板加載器。hibernate是完全沒有sql。mybatis是全部都是sql。而beetlsql對於一些簡單的單表查詢已經有現成的封裝方法,可以直接使用。但項目中總會有些特殊的sql,這時候sql就要寫到sql模板裏面去。

ConnectionSource:這個不必說,數據源

NameConversion:表名和類名的映射關係,以及列名和屬性名的映射關係。

官方包裏給出了三個實現:

  • DefaultNameConversion 數據庫名和java屬性名保持一致,如數據庫表User,對應Java類也是User,數據庫列是sysytemId,則java屬性也是systemId,反之亦然
  • UnderlinedNameConversion 將數據庫下劃線去掉,首字母大寫,如數據庫是SYS_USER(oralce數據庫的表和屬性總是大寫的), 則會改成SysUser
  • JPA2NameConversion 支持JPA方式的映射,適合不能用確定的映射關係(2.7.4以前採用JPANameConversion過於簡單,已經不用了)

Interceptor是攔截器,在執行sql前和sql後執行。它不能針對特殊的sql進行攔截,而是所有的sql都要攔截。本例添加了一個DebugInterceptor,當有sql執行時,會在控制檯打印sql語句參數及返回值

SQLManager:核心管理器。

這裏面方法很多。

比如:public <T> List<T> all(Class<T> clazz) 

這是根據class類型返回所有的List.它是怎麼做到的呢?它拿到了class的name,然後根據NameConversion推斷出表的名字,接着就是select * from 表名了。

比如: public int insert(Class<?> clazz, Object paras) 

這是個插入方法,也是根據clazz推測出表名,然後根據paras對象的fieldName/fieldvalue轉換成

insert into 表名 (fieldName1,fieldName2,fieldName3....) values(fieldvalue1,fieldvalue2,fieldvalue3....)

這個要注意,beetsql有兩個註解:

@AutoID:代表着自增id,標在pojo的id上

@AssignID:代表着非自增id,標在pojo的id上

在插入表有自增id的情況下,應該使用這個:

insert(Class<?> clazz, Object paras, KeyHolder holder),這個KeyHolder還會返回自增id.

比如:public int updateById(Object obj)

這個是修改方法,根據object的class推測出表名,並且根據類裏帶@AutoID或者@AssignID的那個屬性當作id去修改。如果屬性爲null,也會修改爲null.如下sql語句:

update xxx set aaa= 1 ,bbb =2,ccc = null where id  =2

比如: public int updateTemplateById(Object obj)

這個和上個差不多,只是爲null的屬性不參與更新。

SqlManager有很多很多的方法供使用,但這些都是單表操作,滿足不了日益增長的需要。對於特殊的sql語句,我們在下一章介紹。

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