zoukankan      html  css  js  c++  java
  • 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) 更加方便,以及拥有更大自由度。比如:

    1 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类:

    1 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方法:

    1 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 是指多少条数据写一次数据库
    1 Db.use("User").batch("delete from tablename where para = ?",  new Object[][] {{para}}, 1);
  • 相关阅读:
    记录 vue 中使用 SVG 渐变填充遇到过的坑
    关于map some filter every等遍历的一些临时记忆
    Blob文件处理
    电子签名 VUE加canvas实现 移动端和PC实现
    js导出excell表
    video
    移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)
    Ubuntu16.04打开Qt显示/home/user/.config/QtProject/qtcreator/qtversion.xml : Permission denied
    哨兵2号影像数据获取以及处理流程
    Sentinel-2 哨兵二号数据下载及处理教程
  • 原文地址:https://www.cnblogs.com/Junsept/p/6802986.html
Copyright © 2011-2022 走看看