Jfinal中Db类的的使用
Jfinal提供了两种操作数据库的组件,分别是Model类和DB类,可以极大地减少代码量,提高开发效率。
Db类提供了在Model类之外更丰富的的数据库操作能力,使用Db类以及嵌套的Record类时,无需对数据库表进行映射,Record类相当于一个通用的Model。
以下为Db+Record的常见用法:
什么时候选择用Db类?
1. 没有创建 Model,不得不使用
2. 由于Active Record 限制一个model对象对应一条记录,当需要批量操作表中的记录时需要使用Db + Record,例如,需要对 account 表中的 cash 字段统一加上 100 块钱:Db.update("update account set cash=cash+100"),这种情况下 Model 只能一条一条地处理数据,而 Db 可以利用 sql 去批量处理
3. 在某些非常需要高度灵活性、通用性的系统之下使用 Db.find(...),例如做一个报表系统,其中绝大部分业务都是跨多表的联合查询的数据展现,用 Db.find(sql) 更加方便,以及拥有更大自由度。比如:
List<A> list = A.dao.find("select A.a,B.b from A left join (select a,b from B) B on A.a = B.a")
这个时候如果需要对list中的数据进行处理,list.get(index).get("b")将会出错,因为list初始化是A类型的,而实体类A即数据库A中没有字段b。
这个时候采用Db类:
List<Record> list = Db.use(configname).find("select A.a,B.b from A left join (select a,b from B) B on A.a = B.a")
4. 在一些删除、更新语句使用的时候,比如:
a. Model类在执行删除语句的时候可以使用deleteById()方法,该方法的使用需要数据库字段具有主键(当然,好的数据库设计每张表都具有一个主键)。如果没有主键,Model方法执行删除语句就无法进行了。当然我们可能会想到利用model.dao.find(sql)方法去执行delete操作,这样是不可以的。这个时候可以使用Db类的update方法:
Db.use("User").update("delete from tablename where para = ?", para);
"User"是数据库配置configname:
public static final String CONFIG_NAME = "User";
b.批量插入、更新、删除时,可以使用Db类的batch方法:
public static int[] batch(java.lang.String sql,
java.lang.String columns,
java.util.List modelOrRecordList,
int batchSize)
- sql 参数是指 insert into 或者 update 语句,动态参数使用问号占位,例如:String sql = "insert into user(name, cash) values(?, ?)";上面这个 sql 其中要插入 name、cash 两个字段,而 values 中用了两个问号,这两个问号中的值从后续的 modelOrRecordList 中获取
- columns 是指前面 sql 中问号占位的地方的参数名称,jfinal 在填充字段值的时候会根据这个名称去 modelOrRecordList 中去取数据
- modelOrRecordList 是指 List < User > 或者 List < Record> 或者这种列表
- batchSize 是指多少条数据写一次数据库
Db.use("User").batch("delete from tablename where para = ?", new Object[][] {{para}}, 1);
Jfinal中Db类的的使用的更多相关文章
- Laravel5.2中Eloquent与DB类的区别是什么?
要了解这些先看看关于数据库组件的那些事儿(就是 Eloquent ORM) 数据库组件大概分了三层: 数据库连接层 查询构造层 应用层 来看一下每一层有哪些东西,分别对应文档的哪一部分: 数据库连接层 ...
- 封装自己的DB类(PHP)
封装一个DB类,用来专门操作数据库,以后凡是对数据库的操作,都由DB类的对象来实现.这样有了自己的DB类,写项目时简单的sql语句就不用每次写了,直接调用就行,很方便! 1.封装一个DB类.一个类文件 ...
- nodejs操作mongodb数据库封装DB类
这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...
- 封装DB类
封装DB类 一般一个类单独书写在一个Php文件中,为了见名知意,会对文件名有一个规范:类名.class.php 第1步: 创建DB类 第2 步: 属性设计 第3步: 初 ...
- TP5 模型类和Db类的使用区别
原文:http://www.upwqy.com/details/3.html 总结 在控制器中 模型操作 get() 和 all() 只能单独使用来查询数据 想要链式操作查询数据 需要使用f ...
- PHP——laravel之DB类->查询
DB类之查询: 满足条件的全部获取:DB::table("表名")->where("name",">","1" ...
- JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了。
JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了.因为tomc ...
- nodejs mongodb 数据库封装DB类 -转
使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关于mongoose的安装就是 npm install -g mongoose 这个DB类的数据库配置是 ...
- python---Django中模型类中Meta元对象了解
Django中模型类中Meta元对象了解 1.使用python manage.py shell 进入编辑命令行模式,可以直接进入项目(为我们配置好了环境) python manage.py shell ...
随机推荐
- Vue学习之路---No.7(分享心得,欢迎批评指正)
老规矩,先回顾一下上回的重点: 1.对于input框,若为单选框,如果没有对其设置value,那么其checked的值将在true Or false之间切换:如果设置了value,那么将会切换valu ...
- uploadify上传图片的类型错误的解决办法
大家在做开发的过程中,相信很多人都会使用到uploadify插件来上传图片,但是这个插件也有不完美的地方. 我曾多次遇到过这样一个问题:上传的图片类型明明是没有问题的,但是在上传的时候总是会报错:图片 ...
- C++—动态内存管理之深入探究new和delete
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap).程序用堆来存储动态分配的对象,即,那些程序运行时分配的对象.动态对象 ...
- 解决Highcharts 5.0.7,IE8下bar类型图表无法显示的问题
引用如上, 当图标类型为bar时,IE8无法直接显示, 官网也一样, 但通过切换图例可以显示, 所以加入以下代码解决此问题 未经允许,严禁转载!!!
- [原]C#与非托管——初体验
P/Invokes初看起来非常简单,利用DllImport进行extern函数的声明,程序就可以在调用extern函数的时候自动查询调用到对应的非托管函数,有些类似Java的native函数,但更为简 ...
- 老李分享: 并行计算基础&编程模型与工具 2
2.并行编程模型和工具 – MPI – MPI(Message Passing Interface)是一种消息传递编程模型,服务于进程通信.它不特指某一个对它的实现,而是一种标准和规范的代表,它是一种 ...
- AVL树的旋转操作详解
[0]README 0.0) 本文部分idea 转自:http://blog.csdn.net/collonn/article/details/20128205 0.1) 本文仅针对性地分析AVL树的 ...
- 《Python基础教程》第2章读书笔记(1)
# -*- coding:utf-8 -*- #最基本的数据结构:序列,索引从0开始 #python包括6种内建的序列 #最常用的序列包括:列表,元祖 #列表 edward = ['Edward Gu ...
- List去除重复的元素
有两种方法,一种是去重不带顺序的,一种是去重带顺序的. /* * 方法1: 无顺序 * Hastset根据hashcode判断是否重复,数据不会重复 */ public static Lis ...
- z-index用法总结
一.定义: z-index 只适用于元素有定位的情况,表示层级 数值越大 层级越高 展示的位置越靠前. 二.用法: 1.同级关系: z-index值较大的元素将叠加在z-index值较小的元素之上 ( ...