5.12 Oracle支持

Oracle数据库具有一定的特殊性,JFinal针对这些特殊性进行了一些额外的支持以方便广大的Oracle使用者。以下是一个完整的Oracle配置示例:

  1. public class DemoConfig extends JFinalConfig {
  2. public void configPlugin(Plugins me) {
  3. DruidPlugin dp = new DruidPlugin(……);
  4. me.add(dp);
  5. //配置Oracle驱动
  6. dp.setDriverClass("oracle.jdbc.driver.OracleDriver");
  7.  
  8. ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
  9. me.add(arp);
  10. // 配置Oracle方言
  11. arp.setDialect(new OracleDialect());
  12. // 配置属性名(字段名)大小写不敏感容器工厂
  13. arp.setContainerFactory(new CaseInsensitiveContainerFactory());
  14. arp.addMapping("user", "user_id", User.class);
  15. }
  16. }

由于Oracle数据库会自动将属性名(字段名)转换成大写,所以需要手动指定主键名为大写,如:arp.addMaping(“user”, “ID”, User.class)。如果想让ActiveRecord对属性名(字段名)的大小写不敏感可以通过设置CaseInsensitiveContainerFactory来达到,有了这个设置,则arp.addMaping(“user”, “ID”, User.class)不再需要了。

另外,Oracle并未直接支持自增主键,JFinal为此提供了便捷的解决方案。要让Oracle支持自动主键主要分为两步:一是创建序列,二是在model中使用这个序列,具体办法如下:

1:通过如下办法创建序列,本例中序列名为:MY_SEQ

  1. CREATE SEQUENCE MY_SEQ
  2. INCREMENT BY 1
  3. MINVALUE 1
  4. MAXVALUE 9999999999999999
  5. START WITH 1
  6. CACHE 20;

2:在YourModel.set(…)中使用上面创建的序列

  1. // 创建User并使用序列
  2. User user = new User().set("id", "MY_SEQ.nextval").set("age", 18);
  3. user.save();
  4. // 获取id值
  5. Integer id = user.get("id");

序列的使用很简单,只需要 yourModel.set(主键名, 序列名 + “.nextval”)就可以了。特别注意这里的 “.nextval” 后缀一定要是小写,OracleDialect对该值的大小写敏感。

注意:Oracle下分页排序Sql语句必须满足2个条件:

  • Sql语句中必须有排序条件;

  • 排序条件如果没有唯一性,那么必须在后边跟上一个唯一性的条件,比如主键

相关博文:http://database.51cto.com/art/201010/231533.htm

相关反馈:http://www.jfinal.com/feedback/64#replyContent

< 5.11 复合主键

5.13 SQL 管理与动态生成 >