Skip to content

weizhonzhen/org.FastData.Spring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

org.FastData.Spring

java orm(db first,code frist) for sqlserver mysql etl.

in Application add Annotation

 //service aop
 @FastServiceAop(aopType = emr.doctor.Handler.FastServiceAop.class)  

 @FastData(key = "test",cachePackageName = "com.example.Entity" ,
  codeFirstPackageName="com.example.Entity", servicePackageName = "com.example.Service",aopType=FastDataAop.class)
 key is database key 
 codeFirstPackageName is code first model
 cachePackageName is cache model
 servicePackageName is interface Service

aop

//fastdata aop
public class FastDataAop implements IFastDataAop {
    @Override
    public void before(BeforeContext beforeContext) {
        System.out.println("before:" + beforeContext.getSql());
    }

    @Override
    public void after(AfterContext afterContext) {
        System.out.println("after:" + afterContext.getSql());
    }

    @Override
    public void mapBefore(MapBeforeContext mapBeforeContext) {
        System.out.println("mapBefore:" + mapBeforeContext.getMapName());
    }

    @Override
    public void mapAfter(MapAfterContext mapAfterContext) {
        System.out.println("mapAfter:" + mapAfterContext.getMapName());
    }

    @Override
    public void exception(ExceptionContext exceptionContext) {
        System.out.println("exception:" + exceptionContext.getName());

    }
}

//service aop
public class FastServiceAop implements IFastServiceAop {
    @Override
    public void before(BeforeContext beforeContext) {     
        beforeContext.setReturn(true);
        beforeContext.setResult("test");
    }

    @Override
    public void after(AfterContext afterContext) {
        afterContext.setResult("test");
    }

    @Override
    public void exception(ExceptionContext exceptionContext) {
        afterContext.setResult("test");
    }
}

//service aop
public interface IUserService {}
public class UserService implements IUserService{}

IUserService userService = (IUserService)new FastServiceProxy().invoke(UserService.class);

Annotation

public interface TestService {
    @FastRead(sql = "select * from base_user where id=?id and orgid=?orgid",dbKey = "test")
    Map<String,Object> map(String id,String orgid);
    //Map<String,Object> map(base_user model);
    //Map<String,Object> map(Map<String,Object> map);

    @FastRead(sql = "select * from base_user where id=?id and orgid=?orgid",dbKey = "test")
    TestTable model(String id,String orgid);
    // or TestTable map(base_user model);
    // or TestTable map(Map<String,Object> map);

    @FastRead(sql = "select * from base_user where id=?id and orgid=?orgid",dbKey = "test")
    List<Map<String,Object>> listMap(StringidGH,String orgid);
    // or List<Map<String,Object>> listMap(base_user model);
    // or List<Map<String,Object>> listMap(Map<String,Object> map);

    @FastRead(sql = "select * from base_user where id=?id and orgid=?orgid",dbKey = "test")
    List<TestTable> listModel(String id,String orgid);
    // or List<TestTable> listModel(base_user model);
    // or List<TestTable> listModel(Map<String,Object> map);

    @FastWrite(sql = "update base_user set name=?name where id=?id",dbKey = "test")
    WriteReturn update(String name,String id);
    // or WriteReturn update(base_user model);
    // or WriteReturn update(Map<String,Object> map);
    
    @FastRead(sql = "select * from base_user where id=?id and orgid=?orgid",dbKey = "test",isPage = true,pageType = TestTable.class)
    PageResultImpl page1(PageModel pageModel, Map<String,Object> map);
    
    @FastRead(sql = "select * from base_user where id=?id and orgid=?orgid",dbKey = "test",isPage = true)
    PageResult page2(PageModel pageModel, Map<String,Object> map);
    
    FastXml(dbKey = "test", xml = {"<select>select a.DNAME, a.GH, a.DID from TestResult a where rownum &lt;= 15",
                            "<dynamic prepend=' '>",
                                "<isNotNullOrEmpty prepend=' and ' property='userName'>userName=?userName'</isNotNullOrEmpty>",
                                "<isNotNullOrEmpty prepend=' and ' property='userId'>userId=?userId</isNotNullOrEmpty>",
                            "</dynamic>",
                            "order by a.REGISTDATE</select>"},isPage =true)
    PageResult read_MapPage(PageModel page ,Map<String, Object> item);
        
    @FastXml(dbKey = "test", xml = {"<select>select a.DNAME, a.GH, a.DID from TestResult a where rownum &lt;= 15",
                            "<dynamic prepend=' '>",
                                "<isNotNullOrEmpty prepend=' and ' property='userName'>userName=?userName'</isNotNullOrEmpty>",
                                "<isNotNullOrEmpty prepend=' and ' property='userId'>userId=?userId</isNotNullOrEmpty>",
                            "</dynamic>",
                            "order by a.REGISTDATE</select>"})
    List<TestResult> read_Map(Map<String, Object> item);
}

@Resource
TestService test;
//or
var test = (TestService) iFastRepository.resolve(TestService.class, AppSeting.Key);


var param =new HashMap<String,Object>();
param.put("gh","admin");
param.put("kid",101);

var page=new PageModel();
page.setPageSize(10);

var model = test.model("admin", "101");
var map = test.map("amdin", "101");
var listMap = test.listMap("admin", "101");
var listModel = test.listModel("admin", "101");
var update = test.update("管理员", "admin", "101");
var page1 = (PageResultImpl<TestTable>)test.page1(page,param);
var page2 = test.page2(page,param);

var pageMap1 = test.read_MapPage(page,model); 
var pageMap2 = test.read_Map(model);

code first model package Entity;

import Column;
import Table;

@Table(comments = "测试")
@FieldNameConstants
@Data
public class TestTable {
    @Column(isKey = true,dataType = "NVARCHAR2",length = 15,isNull = true,comments = "id")
    private  String Id;
    @Column(dataType = "NUMBER",isNull = true,comments = "value")
    private  Number value;
    
    @NavigateType(type = TestTable_List.class,isAdd = true,isDelete = true,isUpdate = true) //add,update by PrimaryKey,delete by PrimaryKey
    private TestTable_List list;
}

@Data
public class TestTable_List
{
   @Navigate(Name = TestTable.Fields.Id)
   private  String Id;
   private  Number value;
}

//@NavigateType  @Navigate  导航属性
   var model = new TestTable();
   model.setId("1");
   var list = (TestTable)ifast.queryKey(model,TestTable.class,"db");
   ifast.add(model,"db");//add table TestTable and TestTable_List
   ifast.updateKey(model,"db"); //update by key  table TestTable and TestTable_List
   ifast.deleteKey(model,"db"); //delete by key table TestTable and TestTable_List

in resources add db.json in db.json

 {      
 "dataConfig": [
    {
      "providerName": "oracle.jdbc.OracleDriver",
      "dbType": "Oracle",
      "user": "user",
      "passWord": "pwd",
      "connStr": "jdbc:oracle:thin:@127.0.0.1/data",
      "isOutSql": true,
      "isOutError": true,
      "key": "test",
      "designModel": "CodeFirst",
      "poolSize":50
    }
  ]
}

in resources add map.json

"SqlMap" :{"Path": [ "map/admin/Api.xml", "map/admin/Area.xml"]}

in resources add map/admin/Api.xml map/admin/Area.xml

 <?xml version="1.0" encoding="utf-8" ?>
         <sqlMap>
           <select id="GetUser" log="true" db="test">
             select a.* from base_user a
             <dynamic prepend=" where 1=1">
               <isPropertyAvailable prepend=" and " property="userId">a.userId=?userId</isPropertyAvailable>                  
               <isNotNullOrEmpty prepend=" and " property="isAdmin">a.isAdmin=?isAdmin</isNotNullOrEmpty>
               <if condition="areaId>8" prepend=" and " property="areaId">a.areaId=?areaId</if>            
               <choose property="userNo">
                  <condition prepend=" and " property="userNo>5">a.userNo=?userNo and a.userNo=5</condition>                    
                  <condition prepend=" and " property="userNo>6">a.userNo=?userNo and a.userNo=6</condition>
                  <other prepend=" and ">a.userNo=?userNo and a.userNo=7</other>
               </choose>     
             </dynamic>
           </select>
           
           <update id="test.Update">
                 update base_user set
             <dynamic ltrim="," prepend =" ">
                 <isNotNullOrEmpty prepend=" " property="Name">,name=?Name</isNotNullOrEmpty>
                 <isNotNullOrEmpty prepend=" " property="Age">,age=?Age</isNotNullOrEmpty>
                 <isNotNullOrEmpty prepend=" " property="Id" required="true">where id=?id</isNotNullOrEmpty>
             </dynamic>
         </update>
       </sqlMap>
 
in Interceptor
@Resource	
private org.FastData.Spring.Handler.FastApiInterceptor fastApiInterceptor;

registry.addInterceptor(this.fastApiInterceptor) is dyn http api 
 
http://127.0.0.1:8080/GetUser?userId=1

in Controller

 @Resource
   IFastRepository iFast;

//database write sql param must ?name,dtabase read sql param only ?
 try (var db = new DataContext("db")) {
   var query = new HashMap<String, Object>();
   query.put("Id", "00010162");
   query.put("Name", "中1国");
   var data1 = ifast.queryMap("TestTable.info", query, db);
   var data2 = ifast.queryMap("table.info", query, TestTable.class, db);

   var pmodel = new PageModel();
   var pageList1 = ifast.pageMap(pmodel, "TestTable.info", query, db);
   var pageList2 = ifast.pageMap(pmodel, "TestTable.info", query, TestTable.class, db);

  var count = ifast.read(BASE_USER.class)).eq(BASE_USER::getORGID,1224).orderBy(BASE_USER::getORGID,true).toCount("db");
  var item = ifast.read(BASE_USER.class)).eq(BASE_USER::getORGID,1224).orderBy(BASE_USER::getORGID,true).toItem("db");
  var list = ifast.read(BASE_USER.class)).eq(BASE_USER::getORGID,1224).orderBy(BASE_USER::getORGID,true).toList("db");
  var page = ifast.read(BASE_USER.class)).eq(BASE_USER::getORGID,1224).orderBy(BASE_USER::getORGID,true).toPage(pmodel,"db");   
  var update = ifast.write(BASE_USER.class)).eq(BASE_USER::getORGID,1224).set(BASE_USER::getORGID,111).toUpdate("db");
  var delete = ifast.write(BASE_USER.class)).eq(BASE_USER::getORGID,1224).toDelete("db");

   var field = new ArrayList<String>();
   field.add("Value");
   var update = ifast.updateKey(model, field, db);
   var del = ifast.deleteKey(model, db);
   
   db.beginTrans();
   db.submitTrans();
   db.rollbackTrans();
 }

About

orm(db first,code frist) for sqlserver mysql etl.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages