monalisa-orm

ORM软件
授权协议 LGPL
开发语言 Java
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 国产
投 递 者 姜弘化
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

monalisa-orm 的主要特点: 

  • 一行代码使用数据库
  • SQL代码自动生成DTOs
  • 支持书写多行语法
  • 支持对象存储
  • 支持分表分库
  • 支持HTTP访问数据库
  • 动态加载SQL代码

更多用法参考https://github.com/11039850/monalisa-orm/wiki

一行代码引入数据库:

@DB(url="jdbc:mysql://127.0.0.1:3306/test" ,username="root", password="root")

 

SQL代码自动生成DTOs:

/**
 * 数据访问类
 */
public class UserBlogDao {
	final static long $VERSION$= 18L; //!!! 版本号, 每次保存为自动 +1
	
	//@Select 注解指示该方法需自动生成结果类
	//默认类名: Result + 方法名, 默认包名:数据访问类的包名+"."+数据访问类的名称(小写)
	//可选参数:name 指定生成结果类的名称
	@Select(name="test.result.UserBlogs") 
	
	//!!! 保存后会自动修改该函数的返回值为: List -> List
	//第一次编写时,由于结果类还不存在, 为了保证能够编译正常,
	//函数的返回值 和 查询结果要用 泛值 替代, 保存后,插件会自动修改.
	//函数的返回值 和 查询结果 泛值的对应关系分三类如下:
	//1. List查询
	//public DataTable   method_name(...){... return Query.getList();   } 或
	//public List        method_name(...){... return Query.getList();   }    
	//
	//2. Page查询
	//public Page   method_name(...){... return Query.Page();      }
	//
	//3. 单条记录
	//public Object method_name(...){... return Query.getResult(); }
	//
	public List  selectUserBlogs(int user_id){ 
		Query q=TestDB.DB.createQuery();
		           
		q.add(""/**~{
				SELECT a.id,a.name,b.title, b.content,b.create_time
					FROM user a, blog b   
					WHERE a.id=b.user_id AND a.id=?
		}*/, user_id);
		 
		//!!! 保存后会自动修改 查询结果为: getList() -> getList
		return q.getList(); 
	} 
	
	
	@Select //自动产生结果类: test.dao.userblogdao.ResultSelectUserBlogsOne
	public Object  selectUserBlogsOne(int user_id){ 
		Query q=TestDB.DB.createQuery();
		           
		q.add(""/**~{
				SELECT a.id,a.name,b.title, b.content,b.create_time
					FROM user a, blog b   
					WHERE a.id=b.user_id AND a.id=?
		}*/, user_id);
		 
		return q.getResult();
	} 
	
}

一些基本的数据库操作:

//insert
new User().setName("zzg.zhou").setStatus(1).save();


//parse data from type: Map, json/xml string, JsonObject(Gson)
//, HttpServletRequest, JavaBean
new User().parse("{'name':'oschina','status':0}").save();
new User().parse(" china011 ").save();


//select
User.SELECT().selectByPrimaryKey(1);


//SQL: SELECT * FROM `user` WHERE `name` = 'zzg.zhou'
User.SELECT().selectOne("name=?", "zzg.zhou");


//SQL: SELECT `name`, `status` FROM `user`
User.SELECT().include("name","status").select();
 
Page page=User.WHERE().name.like("zzg%").status.in(1,2,3)
               .SELECT().selectPage(10,0);
System.out.println(page.getTotalRow());


//SQL: SELECT * FROM `user` WHERE `name` like 'zzg%' AND `status` IN(0, 1)
for(User x:User.WHERE().name.like("zzg%").status.in(0, 1).SELECT().select()){
 System.out.println(x);
}
 
//SQL: SELECT * FROM `user` WHERE (`name` like 'zzg%' AND `status` >= 0) 
//                             OR (`name` = 'zzg' AND `status` > 1) 
//                          ORDER BY `status` ASC 
for(User x:User.WHERE()
 .name.like("zzg%").status.ge(0)
 .OR()
 .name.eq("zzg").status.gt(1)
 .status.asc()
 .SELECT().select()){ //SELECT / delete / update
 System.out.println(x);
}


 
//general query
TestDB.DB.select("SELECT * FROM user WHERE name like ?","zzg%");
TestDB.DB.createQuery().add("SELECT * FROM user WHERE name like ?","zzg%")
  .getList(User.class);
 
Query q=new Query(TestDB.DB);
DataTable rs=q.add("SELECT * FROM user WHERE name like ?","zzg%")
 .add(" AND status ").in(1,2,3)
 .getList();
for(User x:rs.as(User.class)){
 System.out.println(x);
}

//DataTable query
//SQL: SELECT name, count(*) as cnt FROM _THIS_TABLE 
//           WHERE status>=0 GROUP BY name ORDER BY name ASC
DataTable newTable=
      rs.select("name, count(*) as cnt","status>=0","name ASC","GROUP BY name");
 

//update
User user=User.SELECT().selectOne("name=?", "zzg.zhou");
user.setStatus(3).update();


User updateTo=new User().setName("tsc9526");
User.WHERE().name.like("zzg%").update(updateTo);




//transaction
Tx.execute(new Tx.Atom() {
 public int execute() {
 new User().setName("name001").setStatus(1).save();
 new User().setName("name002").setStatus(2).save();
 //... other database operation
 return 0;
 }
});
 
//Dynamic model: Record
Record r=new Record("user").use(TestDB.DB);
r.set("name", "jjyy").set("status",1)
 .save();
 
//SQL: SELECT * FROM `user` WHERE (`name` like 'jjyy%' AND `status` >= 0)
//                             OR (`name` = 'zzg' AND `status` > 1) 
//                          ORDER BY `status` ASC 
for(Record x:r.WHERE()
 .field("name").like("jjyy%").field("status").ge(0)
 .OR()
 .field("name").eq("zzg").field("status").gt(1)
 .field("status").asc()
 .SELECT().select()){
 System.out.println(x);
} 
 
//SQL: DELETE FROM `user` WHERE `name` like 'jjyy%' AND `status` >= 0
r.WHERE()
 .field("name").like("jjyy%").field("status").ge(0)
 .delete();
  


//delete
user.delete();


//SQL: DELETE FROM `user` WHERE `name`='china01'
User.WHERE().name.eq("china01").delete();


//User.DELETE().deleteAll();  

支持Java多行字符串编辑:(插件下载

Java多行字符串编辑插件

更多用法参考https://github.com/11039850/monalisa-orm/wiki

  • eclipse处理多行文本拼接的问题,使用monalisa插件,安装方法:eclipse菜单栏点击HELP->Install New Software; 在出现的界面中的Work With中填入https://github.com/11039850/monalisa-orm/raw/master/plugins/update-site后点击后面的add按钮。然后选中加载出来的项执行安装就行。

 相关资料
  • 研发岗 截止时间是今天11:25 我以为是11:25才开始的 差点就错过了还好提前几分钟进去了 两个小时题量还可以 十八道选择题 四道填空 俩代码(一个编程一个sql 后面四道问答题分值标了0不是很懂要不要做 代码题三十分没写出来感觉不是很难但是每次写代码都会紧张脑子不太灵光 JAVA和sql的内容占比比较大 #帆软软件# #帆软软件笔试#

  • Linux 中没有 注册表 这个概念。安装软件,理论上讲,只要拷贝所有相关文件,并运行它的主程序就可以了。 按照传统,一个软件通常分别拷贝到同级目录下的 bin、etc、lib、share等文件夹。 bin 可执行文件,程序的可执行文件通常在这个目录下。在环境变量中设定搜索路径,就可以直接执行,而不需要定位其路径。 etc 配置文件,大部分系统程序的配置文件保存于 /etc 目录,便于集中修改。

  • 自我介绍 css中flex居中 js原型链 react fiber架构 react受控组件与非受控组件 通过usestate来存储prop数据,当prop获取新数据时,state中数据会不会发生变化(不会) react生命周期hooks react为什么要用hooks组件来逐渐取代类式组件 react事件模型 vue2、3的区别 vue mixin 展示项目 设计一个弹窗组件需要注意哪些东西 反问

  • Tazpkg - 软件包管理器 Slitaz提供一个小型软件包管理器,它能轻易在系统里安装许多软件。Tazpkg是一个由SHell脚本写的轻量级的软件包管理器,能安 装.tazpkg文件。它能在Busybox、ash shell和bash中正常运行。Tazpkg可以让你列出软件包列表、安装软件包、删除软件包、下载软件包、解压软件包、打包软件包、查找软件包或者取 得有关可用软件包或所有已安装软件包的

  • 简介 I2C 总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号线,一根是双向数据线 SDA,另一根是双向时钟线 SCL。 I2C 总线可以通过芯片上板载的 I2C 外设实现,也可以通过 GPIO 引脚模拟 I2C 总线协议来实现。 硬件 I2C 对应芯片上的 I2C 外设,由相应的 I2C 控制器和驱动电路组成,其所使用的引脚也是专用的。软件

  • 先40分钟笔试有两道算法题一道是判断素数,另一道是在不改变列表中元素的相对位置的前提下对列表元素进行去重,还有个数据库题。 面试: 1、自我介绍 2、问项目,项目是咋搭建的? 3、项目中数据库的设计?怎么实现收藏的功能(关于项目的)?项目中的主要文件?vue和html、css、js的关系? 4、了解什么是Lambda函数? 5、python使用的库? 6、深拷贝和浅拷贝? 7、请求头部信息? 8、