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持久層行處理器使用介紹。