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类的的使用的更多相关文章

  1. Laravel5.2中Eloquent与DB类的区别是什么?

    要了解这些先看看关于数据库组件的那些事儿(就是 Eloquent ORM) 数据库组件大概分了三层: 数据库连接层 查询构造层 应用层 来看一下每一层有哪些东西,分别对应文档的哪一部分: 数据库连接层 ...

  2. 封装自己的DB类(PHP)

    封装一个DB类,用来专门操作数据库,以后凡是对数据库的操作,都由DB类的对象来实现.这样有了自己的DB类,写项目时简单的sql语句就不用每次写了,直接调用就行,很方便! 1.封装一个DB类.一个类文件 ...

  3. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

  4. 封装DB类

    封装DB类     一般一个类单独书写在一个Php文件中,为了见名知意,会对文件名有一个规范:类名.class.php 第1步:     创建DB类 第2 步:     属性设计 第3步:     初 ...

  5. TP5 模型类和Db类的使用区别

    原文:http://www.upwqy.com/details/3.html 总结 在控制器中  模型操作  get() 和 all()  只能单独使用来查询数据   想要链式操作查询数据 需要使用f ...

  6. PHP——laravel之DB类->查询

    DB类之查询: 满足条件的全部获取:DB::table("表名")->where("name",">","1" ...

  7. JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了。

    JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了.因为tomc ...

  8. nodejs mongodb 数据库封装DB类 -转

    使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关于mongoose的安装就是 npm install -g mongoose 这个DB类的数据库配置是 ...

  9. python---Django中模型类中Meta元对象了解

    Django中模型类中Meta元对象了解 1.使用python manage.py shell 进入编辑命令行模式,可以直接进入项目(为我们配置好了环境) python manage.py shell ...

随机推荐

  1. Vue学习之路---No.7(分享心得,欢迎批评指正)

    老规矩,先回顾一下上回的重点: 1.对于input框,若为单选框,如果没有对其设置value,那么其checked的值将在true Or false之间切换:如果设置了value,那么将会切换valu ...

  2. uploadify上传图片的类型错误的解决办法

    大家在做开发的过程中,相信很多人都会使用到uploadify插件来上传图片,但是这个插件也有不完美的地方. 我曾多次遇到过这样一个问题:上传的图片类型明明是没有问题的,但是在上传的时候总是会报错:图片 ...

  3. C++—动态内存管理之深入探究new和delete

    C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap).程序用堆来存储动态分配的对象,即,那些程序运行时分配的对象.动态对象 ...

  4. 解决Highcharts 5.0.7,IE8下bar类型图表无法显示的问题

    引用如上, 当图标类型为bar时,IE8无法直接显示, 官网也一样, 但通过切换图例可以显示, 所以加入以下代码解决此问题 未经允许,严禁转载!!!

  5. [原]C#与非托管——初体验

    P/Invokes初看起来非常简单,利用DllImport进行extern函数的声明,程序就可以在调用extern函数的时候自动查询调用到对应的非托管函数,有些类似Java的native函数,但更为简 ...

  6. 老李分享: 并行计算基础&编程模型与工具 2

    2.并行编程模型和工具 – MPI – MPI(Message Passing Interface)是一种消息传递编程模型,服务于进程通信.它不特指某一个对它的实现,而是一种标准和规范的代表,它是一种 ...

  7. AVL树的旋转操作详解

    [0]README 0.0) 本文部分idea 转自:http://blog.csdn.net/collonn/article/details/20128205 0.1) 本文仅针对性地分析AVL树的 ...

  8. 《Python基础教程》第2章读书笔记(1)

    # -*- coding:utf-8 -*- #最基本的数据结构:序列,索引从0开始 #python包括6种内建的序列 #最常用的序列包括:列表,元祖 #列表 edward = ['Edward Gu ...

  9. List去除重复的元素

         有两种方法,一种是去重不带顺序的,一种是去重带顺序的. /* * 方法1: 无顺序 * Hastset根据hashcode判断是否重复,数据不会重复 */ public static Lis ...

  10. z-index用法总结

    一.定义: z-index 只适用于元素有定位的情况,表示层级 数值越大 层级越高 展示的位置越靠前. 二.用法: 1.同级关系: z-index值较大的元素将叠加在z-index值较小的元素之上 ( ...