db.record 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
db.record 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
db.record 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
db.record 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
db.record 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

通过 record(map)的方式操作表数据,似orm非orm,半对像操作。

本类库基于jfinal V1.9改造,写一些简单的功能的时候特别适合使用,比如要转结数据,比如初始数据,相比orm不需要搞一堆对像,相比存sql不需要搞一些insert update。

通过sql语句查询某几个表的数据返回 record,直接将该对像(不是写sql)保存或者更新到一个新表中。这种方式特别省事

apache dbutils对数据库的支持已足够好,但还是略显烦杂,当然也可以基于dbutils实现 jfinal的操作方式

相比 Spring jdbcTemplate 那肯定是少了N多依赖

相比 jdbc操作那肯定方便很多

使用

添加依赖

<dependency>
	<groupId>com.liucf</groupId>
	<artifactId>db.record</artifactId>
	<version>0.0.4</version>
</dependency>

示例

1.初始化Db

//初始化数据连接
Db.init("jdbc:mysql://host:port/test?characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&serverTimezone=GMT%2B8","root", "xxx");
//打印sql日志
Db.use().setShowSql(true);

2.查询数据

//简单查询
List<Record> baskets = Db.find("select * from base_basket");
for (Record record : baskets) {
	System.out.println(record.getStr("id"));
	System.out.println(record.toJson());
}

//根据id查询
Record record = Db.findById("base_basket", "001")

//查询首条数据
Db.findFirst("select * from base_basket where id = ?", "001")

//分页查询 count参数决定是否统计总行数
Page<Record> p = Db.paginate(1, 2, "select * from base_basket where id>?", false, "1000");
p.getList();
p.getPageNumber();
p.getPageSize();
p.getTotalPage();
p.getTotalRow();

3.新增

Record r = new Record();
r.set("id", "ddddd");
Db.save("base_basket", r);

4.更新

Record r = new Record();
r.set("id", "ddddd");
Db.update("base_basket", r);
//主键名称非id
//Db.update("base_basket", "id", r);

4.删除

Db.deleteById("base_basket", "001");
//Db.update("delete from base_basket");

5.事务

Db.tx(new TransactionWrap() {
		@Override
		public boolean run() throws SQLException {
			try {
				Record r = new Record();
				r.set("id", "ddddd");
				Db.save("base_basket", r);
				
				r.set("id", "ddddd");
				r.set("remarks", "remarks");
				Db.update("base_basket", "id", r);
			} catch (Exception e) {
				return false;
			}
			return true;
		}
	});

6.多数据源

Db.init("jdbc:mysql://host:port/test?characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&serverTimezone=GMT%2B8","root", "xxx");
Db.initAlias("toDb","jdbc:mysql://xxx:3306/test?characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&serverTimezone=GMT%2B8","user","password")

//使用 Db.use 切换数据源
Db.use().find();//默认数据源
Db.use("toDb").find();//指定数据源
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
发表于服务端专区
2019/05/29 10:14

Jfinal 数据操作模块 db.record v 0.0.4 发布

更新内容 添加: public static void initAlias(String configName,String jdbcURL, String jdbcUser, String jdbcPassword) {     init(configName,"com.mysql.cj.jdbc.Driver",jdbcURL,jdbcUser,jdbcPassword,null,null,false);   }      public static void initAlias(String configName,String jdbcDriver, Str...

8
9
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2015/12/24 15:14

DB+Record(Jfinal)

基础知识

0
0
发表了博客
2016/12/15 12:16

关于用Db+Record从页面上接受参数的问题。

记录这个问题,为了避免以后我忘记了找不到答案,感谢我的师哥,严格来说是他解决了这个问题。我只是个传播答案的人。jfinal的帖子太少了,以至于遇到问题而收不到能解决问题的帖子。 当初我是看天篷小猪的jfinal视频入门的,如果是新手建议可以去看看他的视频,他在视频里面说到了,Db+Record模式,很强大,有了这个模式...

0
0
发表于服务端专区
2012/03/19 15:38

JFinal独创Db + Record模式示例

JFinal配备的ActiveRecord插件,除了实现了类似Rails ActiveRecrod的功能之外,还独创了Db + Record模式,此模式下,开发者可以连Model都不需要写就可以轻松操作数据库。 以下是示例代码: // 创建name属性为James,age属性为25的record对象并添加到数据库 Record user = new Record().set("name", "James").set("age", 2...

46
29
发表于数据库专区
2014/10/17 17:29

Resolution to the record count increasing of the file exported from DB when ‘0A’ is included in it

Resolution to the record count increasing of the file exported from DB when ‘0A’ is included in it DB Query Analyzer 3.02 is up for presented after Chinese Spring Festival. I have been doing software test on it for about a month. DB Query Analyzer 3.02 mainly has two new functions below: 3.02 v...

0
0
发表了博客
2019/07/30 19:16

Record

Recursive sequence矩阵快速幂 #include <bits/stdc++.h> #include<stdint.h> #define int long long #define scan(n) scanf("%lld", &(n)) #define scann(n, m) scanf("%lld%lld", &(n), &(m)) #define scannn(a, b, c) scanf("%lld%lld%lld", &(a), &(b), &(c)) #define pb push_back #define fo(i, a, b) for (int i ...

0
0
发表了博客
2014/05/13 10:49

记录-record

元组(tuple)类似c/c++的结构体,但是还不够灵活。例如和业务相关的一个由5个元素组成的元组,由于业务变更,需要增加一个字段,于是你不得不跑遍所有的代码并修改所有涉及这些元组的地方。如果修改的地方很多,非常容易犯错误

1
0
发表了博客
2016/06/20 09:39

CONTAINING_RECORD

CONTAINING_RECORD 这样的一个宏,我看了它的定义,如下: #define CONTAINING_RECORD(address, type, field) ((type *)( (PCHAR)(address) - (ULONG_PTR)(&((type*)0)->field))) class A { char c; int a; short b; } int a = 100; int *pInt = &a; 比如,我调用了 CONTAINING_RECORD(pInt,A,a); 完全展开来后如下: (A*...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
5 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部