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 <= 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 <= 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();
}