Skip to content

weizhonzhen/org.FastData.Spring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

390 Commits
 
 
 
 
 
 
 
 

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