java轻量级orm_FastORM_Java

基于jdbctemplate和transitiontemplate封装的适用于springboot的轻量级orm框架(mysql数据库)

maven引用:

com.gitee.grassprogramming

fastorm

0.0.2

使用示例:

声明实体类

@TableName(value = "Frame_Config")

public class Frame_Config extends BaseEntity{

@Key

public String ConfigGuid;

public String ConfigName;

public String ConfigValue;

public String ConfiIntro;

public Date AddDate;

public String ConfigGroupGuid;

@Ignore

public String ExstraStaus;

public String getConfigGuid() {

return ConfigGuid;

}

public void setConfigGuid(String configGuid) {

ConfigGuid = configGuid;

}

public String getConfigName() {

return ConfigName;

}

public void setConfigName(String configName) {

ConfigName = configName;

}

public String getConfigValue() {

return ConfigValue;

}

public void setConfigValue(String configValue) {

ConfigValue = configValue;

}

public String getConfiIntro() {

return ConfiIntro;

}

public void setConfiIntro(String confiIntro) {

ConfiIntro = confiIntro;

}

public Date getAddDate() {

return AddDate;

}

public void setAddDate(Date addDate) {

AddDate = addDate;

}

public String getConfigGroupGuid() {

return ConfigGroupGuid;

}

public void setConfigGroupGuid(String configGroupGuid) {

ConfigGroupGuid = configGroupGuid;

}

public String getExstraStaus() {

return ExstraStaus;

}

public void setExstraStaus(String exstraStaus) {

ExstraStaus = exstraStaus;

}

}

注:

1.TableName注解中的值就是表名,如果实体类没有TablName注解,默认类名为表名

2.Key注解表明实体类的主键,数据库映射实体必须包含主键

3.Ignore注解表明实体类中不需要映射的字段,例如程序中使用的额外状态位等

初始化缓存

DBUtil.init(TestORM.class);

注:fastorm会调用init方法将扫描继承自BaseEntity(数据库实体映射类),BaseExtendEntity(与数据库实体类有交集的类,如dto等)这两个类的子类,进行内存缓存,优化反射效率,该方法请在应用启动时调用,例如:

@SpringBootApplication

public class Application {

public static void main(String[] args) throws Exception{

SpringApplication.run(Application.class, args);

DBUtil.init(Application.class);

}

}

测试查找单个对象

Frame_Config frame_config = dbUtil.findOne("8c0648f4-c3eb-4447-a0ff-8a63c41ece3b", Frame_Config.class);

测试单个操作指定的库

DriverManagerDataSource source = dbUtil.getDataSource("jdbc:mysql://127.0.0.1:3306/orm?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true","root","11111","com.mysql.jdbc.Driver");

Frame_User frame_user = dbUtil.findOne("3333", Frame_User.class,source);

测试修改

frame_config.ConfigValue="222";

dbUtil.update(frame_config);

注:这里的修改是实体类全字段更新

测试修改,传入dto类型的部分包含实体类的参数对象

Frame_ConfigDto dto = new Frame_ConfigDto();

dto.setConfigGuid("8c0648f4-c3eb-4447-a0ff-8a63c41ece3b");

dto.setConfigName("SystemName");

dto.setConfigValue("12ssaa");

dto.setIndex(110);

dto.setKeyWord("test123");

dbUtil.update(dto,Frame_Config.class);

注:实体类扩展类实现更新,扩展类一定要继承自BaseExtendEntity,其中需要包含和数据库实体映射类同名主键字段,会更新扩展类中与实体类中同名字段的值

测试SQL日志追踪

dbUtil.OpenTrace();;

frame_config = dbUtil.findOne("8c0648f4-c3eb-4447-a0ff-8a63c41ece3b", Frame_Config.class);

System.out.println(frame_config.ConfigName);

dbUtil.CloseTrace();

注:支持打开sql跟踪,默认为关闭后,打开后全局sql都会打印在控制台,需要手动关闭

测试查找列表

List list = dbUtil.findList("*","",null,"",Frame_Config.class);

list = dbUtil.findList("ConfigName","ConfigGuid=?",new Object[]{"8c0648f4-c3eb-4447-a0ff-8a63c41ece3b"},"AddDate desc",Frame_Config.class);

测试分页查找

list = dbUtil.findPage("*","",null,"AddDate desc",1,1,Frame_Config.class);

测试多表联查

List> viewlist = dbUtil.findView("frame_user a left join frame_userextend b on a.userguid=b.userguid","b.Email","a.userguid=?",new Object[]{"e7c8f780-ae53-4cd0-b0a7-0a857132f7fe"},"a.userguid desc");

List> viewpagelist = dbUtil.findView("frame_user a left join frame_userextend b on a.userguid=b.userguid","b.Email","a.userguid=?",new Object[]{"e7c8f780-ae53-4cd0-b0a7-0a857132f7fe"},"a.userguid desc",1,1);

测试获取数量

int count = dbUtil.getCount(frame_config.getClass());

测试执行SQL语句

dbUtil.executeSQL("update frame_userextend set Email=? where userguid=?",new Object[]{"aaaaaaaa","d33ea591-93d4-4f74-bc9e-392db05995c0"});

测试直接获取单个字段数据

String loginid = dbUtil.executeSQLToString("select loginid from frame_user where userguid=?",new Object[]{"e7c8f780-ae53-4cd0-b0a7-0a857132f7fe"});

测试增加对象

frame_config.setConfigGuid(UUID.randomUUID().toString());

frame_config.setConfigName("test1111111");

frame_config.setConfigValue("2222222");

frame_config.setConfiIntro("hahahahhah");

frame_config.setAddDate(new Date());

dbUtil.insert(frame_config);

测试删除对象

dbUtil.delete(frame_config);

测试事物

DriverManagerDataSource transitionDataSource = dbUtil.getDataSource();

dbUtil.executeTransition(transitionDataSource, new TransitionAction() {

@Override

public void doTransitionOption(DriverManagerDataSource dataSource){

try {

Frame_Config frame_config = new Frame_Config();

frame_config.setConfigGuid(UUID.randomUUID().toString());

frame_config.setConfigName("test1111111");

frame_config.setConfigValue("2222222");

frame_config.setConfiIntro("hahahahhah");

frame_config.setAddDate(new Date());

dbUtil.insert(frame_config,dataSource);

throw new RuntimeException();

}

catch (Exception e){

e.printStackTrace();

throw new RuntimeException();

}

}

});

注:事物的执行方法中参数TransitionAction的重载方法中,放入所有需要进行事物整合的操作,其中的操作需要datasource是同一个,可以使用工具提供的getDataSource方法,每个方法都提供了指定datasource的重载函数

批量插入

List batchlist = new ArrayList<>();

for (int i=0;i<10;i++){

Frame_Config f = new Frame_Config();

f.setConfigGuid(UUID.randomUUID().toString());

f.setConfigName("test1111111");

f.setConfigValue("2222222");

f.setConfiIntro("hahahahhah");

f.setAddDate(new Date());

batchlist.add(f);

}

dbUtil.insertBatch(batchlist);

注:批量插入使用事物实现,和事物不要混用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jdao是一个轻量级orm工具包,通过简单配置或者连接数据库提供表名它便可以自动生成与数据库表一一对应的dao类,生成的dao类提供了与SQL无关的增删改查的功能。在复杂的查询SQL中,我建议编程人员自己编写高效的SQL,再通过jdao查询后返回封装好的QureyDao类,很方便的获取数据。在jdao底层,目前有spring的jdbcTemplate实现与我自己封装的jdaoHandlerImpl实现。jdao有支持事务,支持批量插入数据等特性。同时jdao底层数据库操作提供接口,编程人员可以自己实现。       如果你觉得hibernate,ibatis等orm框架过于笨重,不烦试下jdao,它可以在团队开发中规范团队持久层代码,较少开发量,特别在单表操作上基本是对象操作,对于复杂SQL查询也有较好的封装。一、使用DAO方式操作数据:查询SQL: select value,rowname from hstest where id between 2 and 10;jdao对象操作如下:Hstest t = new Hstest();t.where(Hstest.ID.BETWEEN(2, 10));t.query(Hstest.VALUE, Hstest.ROWNAME);插入SQL:  insert into hstest (id,rowname,value) values(1,"donnie","wuxiaodong")jdao对象操作如下:Hstest t = new Hstest();t.setId(1);t.setRowname("donnie");t.setValue("wuxiaodong");t.save();批量插入SQL:  insert into hstest (id,rowname,value) values(1,"donnie1","wuxiaodong1"),(2,"donnie2","wuxiaodong2"),(3,"donnie3","wuxiaodong3")jdao对象操作如下:Hstest t = new Hstest();t.setId(1);t.setRowname("donnie1");t.setValue("wuxiaodong1");t.addBatch();t.setId(2);t.setRowname("donnie2");t.setValue("wuxiaodong2");t.addBatch();t.setId(3);t.setRowname("donnie3");t.setValue("wuxiaodong3");t.addBatch();t.batchForSave();更新SQL:  update hstest set rowname="wuxiaodong",value="wuxiaodong" where id=10jdao对象操作如下:Hstest t = new Hstest();t.setRowname("wuxiaodong");t.setValue("wuxiaodong");t.where(Hstest.ID.EQ(10));t.update();删除SQL:  delete from hstest where id=2jdao对象操作如下:Hstest t = new Hstest();t.where(Hstest.ID.EQ(2));t.delete();二、使用QueryDao查询数据,建议用于复杂SQL查询,单表增删改查建议还是使用DAO对象操作。QueryDao qd = new QueryDao(JdaoHandlerFactory.getDBHandler4c3p0(), "select id,rowname from hstest limit ?,?", 0, 10);//获取数据方式一while (qd.hasNext()) {    QueryDao q = qd.next();    //获取字段方式一    System.out.println(q.fieldValue(1) "   " q.fieldValue(2));    //获取字段方式二    System.out.println(q.fieldValue("id") "   " q.fieldValue("rowname"));}//获取数据方式二for(QueryDao q:qd.queryDaoList()){    System.out.println(q.fieldValue(1) "   " q.fieldValue(2));} 标签:orm  jdao
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值