持久化接口demo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

184 lines
5.9 KiB

package com.tptj.demo.hg.db.access.provider;
import com.fanruan.api.log.LogKit;
import com.fr.db.fun.impl.AbstractDBAccessProvider;
import com.fr.decision.base.util.UUIDUtil;
import com.fr.intelli.record.Focus;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.StringUtils;
import com.fr.stable.db.accessor.DBAccessor;
import com.fr.stable.db.action.DBAction;
import com.fr.stable.db.dao.DAOContext;
import com.fr.stable.db.dao.DAOProvider;
import java.util.ArrayList;
import java.util.List;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021-04-25
**/
@EnableMetrics
public class DemoDbController extends AbstractDBAccessProvider {
private static DBAccessor accessor;
public static DBAccessor getAccessor() {
return accessor;
}
@Override
public DAOProvider[] registerDAO() {
return new DAOProvider[]{
DemoDao.DAO,
LinkDao.DAO
};
}
@Override
public void onDBAvailable(DBAccessor accessor) {
DemoDbController.accessor = accessor;
}
/**
* 业务对象——增
* @param bean
*/
public static void add( final DataBean bean ){
try{
accessor.runDMLAction(new DBAction<Boolean>() {
@Override
public Boolean run(DAOContext context) throws Exception {
context.getDAO(DemoDao.class).add( loadDemoEntity(bean,true) );
context.getDAO(LinkDao.class).add( loadLinkEntities(bean,true) );
return true;
}
});
}catch(Throwable e){
LogKit.error(e,"Add DataBean Error:{}",e.getMessage());
}
}
/**
* 业务对象——删
* @param id
*/
public static DataBean delete( final String id ){
try{
DemoEntity entity = accessor.runQueryAction((context)->
context.getDAO(DemoDao.class).getById(id)
);
if( null == entity ){
return null;
}
return accessor.runDMLAction(new DBAction<DataBean>() {
@Override
public DataBean run(DAOContext context) throws Exception {
context.getDAO(DemoDao.class).remove( id );
List<LinkEntity> list = context.getDAO(LinkDao.class).removeByKey(entity.getKey());
return toDataBean(entity,list);
}
});
}catch(Throwable e){
LogKit.error(e,"Delete DataBean[{}] Error:{}",id,e.getMessage());
}
return null;
}
/**
* 业务对象——改
* @param bean
*/
public static void update( DataBean bean ){
try{
accessor.runDMLAction(new DBAction<Boolean>() {
@Override
public Boolean run(DAOContext context) throws Exception {
context.getDAO(DemoDao.class).update( loadDemoEntity(bean,false) );
context.getDAO(LinkDao.class).addOrUpdate( loadLinkEntities(bean,false) );
return true;
}
});
}catch(Throwable e){
LogKit.error(e,"Update DataBean Error:{}",e.getMessage());
}
}
/**
* 业务对象——查
* @param key
* @return
*/
@Focus(id = "com.tptj.demo.hg.decision.db.access.provider.v10",text = "DBAccessProvider")
public static List<DataBean> like(String key ){
try{
return accessor.runQueryAction(new DBAction<List<DataBean>>() {
@Override
public List<DataBean> run(DAOContext context) throws Exception {
List<DataBean> result = new ArrayList<DataBean>();
List<DemoEntity> list = context.getDAO(DemoDao.class).likeByKey(key);
for( DemoEntity item : list ){
List<LinkEntity> links = context.getDAO(LinkDao.class).getByKey(item.getKey());
result.add( toDataBean(item,links) );
}
return result;
}
});
}catch(Throwable e){
LogKit.error(e,"Get DataBeans{} Error:{}",key,e.getMessage());
}
return new ArrayList<DataBean>();
}
private static DemoEntity loadDemoEntity( DataBean bean, boolean isAdd ){
DemoEntity entity = new DemoEntity();
if(isAdd || StringUtils.isEmpty( bean.getId() ) ){
bean.setId(UUIDUtil.generate());
}
entity.setId( bean.getId() );
entity.setKey( bean.getKey() );
entity.setBean( bean.getBean() );
return entity;
}
private static DataBean toDataBean( DemoEntity entity,List<LinkEntity> list ){
DataBean bean = new DataBean();
bean.setId( entity.getId() );
bean.setKey( entity.getKey() );
bean.setBean( entity.getBean() );
bean.setAttr3( toAttrBeans(list) );
return bean;
}
private static List<DemoBean> toAttrBeans( List<LinkEntity> links ){
List<DemoBean> list = new ArrayList<DemoBean>();
for( LinkEntity item : links ){
DemoBean bean = new DemoBean();
bean.setAttr1(item.getId());
bean.setAttr2(item.getAttr3());
list.add( bean );
}
return list;
}
private static List<LinkEntity> loadLinkEntities( DataBean bean, boolean isAdd ){
List<LinkEntity> list = new ArrayList<LinkEntity>();
List<DemoBean> attr3 = bean.getAttr3();
for( DemoBean item : attr3 ){
if(isAdd || StringUtils.isEmpty( item.getAttr1() ) ){
item.setAttr1(UUIDUtil.generate());
}
list.add( new LinkEntity()
.id( item.getAttr1() )
.key( bean.getKey() )
.attr3( item.getAttr2() )
);
}
return list;
}
}