天天看點

bboss持久層ormaping機制詳解

bboss持久層針對db操作即提供了原始sql語句的支援,又提供了簡單而高效的ormapping機制,本文詳細介紹之

1.可變參數的原生sql API

删除

SQLExecutor.delete("delete from LISTBEAN");

SQLExecutor.delete("delete from LISTBEAN where id=?",1);

插入

sql ="insert into LISTBEAN(ID,FIELDNAME,FIELDLABLE,FIELDTYPE) " +

"values(?,?,?,?)";

SQLExecutor.insertWithDBName("bspf", sql,DBUtil.getNextPrimaryKey("bspf", "ListBean"),"insertOpreation","ttyee","int");

查詢

sql = "select * from LISTBEAN where fieldName=?";

List<ListBean> beans = SQLExecutor.queryListWithDBName(ListBean.class,"bspf",sql,"testttt");

更新

sql = "update LISTBEAN set FIELDNAME=? where ID=?";

SQLExecutor.update(sql, "mytest",100);

2.or mapping機制

bboss 針對增删改查都提供了or mapping機制,增加、修改、删除的or mapping機制基本一緻,主要是在sql語句中使用的模闆變量名稱和bean屬性保持一緻即可。

ListBean lb = new ListBean();

lb.setFieldLable("tttt");

lb.setFieldName("testttt");

lb.setFieldType("int");

lb.setIsprimaryKey(false);

lb.setRequired(true);

lb.setSortorder("ppp");

lb.setFieldLength(20);

lb.setIsvalidated(6);

//用List存放Bean,在某特定的連接配接池中進行crud操作

List<ListBean> beans = new ArrayList<ListBean>();

beans.add(lb);

lb = new ListBean();

lb.setFieldLable("sss");

lb.setFieldName("ss");

lb.setFieldName("ss556");

插入:

String sql = "insert into LISTBEAN(ID,FIELDNAME,FIELDLABLE,FIELDTYPE,SORTORDER,ISPRIMARYKEY,REQUIRED,FIELDLENGTH,ISVALIDATED) " +

"values(#[id],#[fieldName],#[fieldLable],#[fieldType],#[sortorder]," +

"#[isprimaryKey],#[required],#[fieldLength],#[isvalidated])";

SQLExecutor.insertBeans("bspf",sql,beans);

修改:

sql ="update LISTBEAN set FIELDNAME=#[fieldName] where ID=#[id]";

SQLExecutor.updateBeans(sql,beans);

删除:

sql = "delete from LISTBEAN where ID=#[id]";

SQLExecutor.deleteBeans(sql, beans);

上面的都是集合批處理操作,單個對象操作,隻需要将原來的接口中的s去掉,然後sql是一樣的,最後使用單個bean對象:

SQLExecutor.insertBean("bspf",sql,bean);

SQLExecutor.updateBean(sql,bean);

SQLExecutor.deleteBean(sql, bean);

查詢的or mapping機制是自動将select中的查詢字段名稱與bean的屬性進行映射,不需要顯示指定:

sql ="select * from LISTBEAN where FIELDNAME=#[fieldName]";

beans = (List<ListBean>) SQLExecutor.queryListBean(ListBean.class, sql, conditionbean);

po對象ListBean中的屬性與select *中得到的column名稱會自動進行映射,自動映射規則如下:

規則一 @Column注解指定column和bean field進行映射,優先級最高,例如:

@Column(name="tableColumnName")

private String fieldType;

bboss在映射時首先檢查字段有沒有被Column注解映射,如果沒有繼續後續的兩個規則。

規則二 檢查bean屬性名稱和select table column列名稱是否一樣,如果一樣則進行值設定,否則繼續最後一個規則,例如:

bean屬性名稱為field_name

private String field_name;

select table column名稱也為field_name,則自動比對并設定值。

規則三 檢查規範化的bean屬性名稱和select table column列轉換為規範化的java名稱是否一樣,如果一樣則進行值設定,select table column列轉換為規範化的java屬性名稱的規則為:field_name_xxx被轉換後的java field name為fieldNameXxx。舉例如下:

private String fieldName;

表的字段名稱為field_name,則二者自動比對并設定值。

上面就是bboss持久層所提供的or mapping和原生sql的簡單介紹。

如果覺得上述or mapping機制無法完全滿足你的要求,那麼bboss持久層還提供了更加靈活高效的行處理器機制,行處理器的使用請參考文檔:

bboss持久層行處理器使用介紹