SimpleJdbc: 用于简化数据库操作的Java库
来源:互联网 发布:佳为软件称软件 编辑:程序博客网 时间:2024/05/29 17:23
转载地址:http://www.liaoxuefeng.com/article/001373892027458cb0198ae4f83452e8889be0cd552900a000
我不喜欢Hibernate之类的ORM,因为它会自动给你把一对多和多对一的级联记录给查出来,一级缓存没啥用,二级缓存用处不大。取出的对象还是经过CGLIB代理的,Attach/Detach的状态尤其令人讨厌。对企业应用可能ORM还适合,但Web应用就应该简洁明了,一切以简单、性能和扩展为目标。
JDBC速度最快,但代码量大。Spring的JdbcTemplate做了很好的封装,但仍旧需要RowMapper。SimpleJdbc是对Spring JdbcTemplate的进一步封装,将所有的数据库操作API全部集中在一个Db对象中,且没有任何额外的RowMapper或DAO接口。
SimpleJdbc的灵感源于web.py的db模块。借助Python的动态类型以及关键字参数,web.py的db提供了令人赞叹的简洁的API。
Java 5及其后续版本增加的唯一“动态”特性便是可变个数的参数,SimpleJdbc充分利用该特性来简化API。不幸的是,随着SUN被Oracle收购以及Oracle确认Java将继续沿企业路线发展,Java将越来越不适合web开发。
SimpleJdbc一个查询的典型用法如下:
// 按ID查询:User user = db.getById(User.class, 12300);if (user==null) throw new RuntimeException("user is not exist");// 查询单个对象:User user = db.queryForObject("select * from User where name=? and passwd=?", "Michael", "passwd");if (user==null) throw new RuntimeException("invalid name or password");// 查询多个对象:List<user>users = db.queryForList("select * from User where id>?", 56700);// 分页查询多个对象:int firstResult = 0;int maxResults = 5;List<user>users = db.queryForList("select * from User where id>?", firstResult, maxResults, 56700);// 查询int或long类型:int i_count = db.queryForInt("select count(id) from User where id>?", 5000);long l_count = db.queryForLong("select count(id) from User where id>?", 5000);
返回结果是强类型的JavaBean或泛型的List,完全不用强制转型,也没有任何RowMapper的定义,一切按照表名-类名,字段名-属性名的默认规则完成。
SimpleJdbc针对update操作提供了有用的updateEntity和updateProperties操作:
// 更新实体Bean除@Id外的所有属性,但不包括@Column(updatable=false):User user = ...db.updateEntity(user);// 更新实体Bean的部分属性:User user = ...user.setName("Bob");user.setPasswd("new-passwd");db.updateProperties(user, "name", "passwd");
在很多情况下,更新某几个属性比更新所有属性要更快,尤其是排除那些BLOB字段的属性更新时。
SimpleJdbc希望能在Controller或Action中直接完成各种数据库操作,编写DAO没有特别意义,Web应用程序的很多逻辑很简单,就是对应SQL操作。
在1.0版本中,SimpleJdbc的queryForList只支持对单表进行简单查询,不支持多表及join查询,这些复杂查询通常都是性能杀手,并且阻碍数据库的水平扩展。通过增加冗余字段和冗余表,消除join查询是提高性能的有效手段。
另一个限制是针对queryForLimitedList方法,目前分页逻辑仅针对MySQL数据库。如果你使用其他数据库,请自行修改源码。
可以从http://code.google.com/p/simplejdbc/下载源码和二进制包。
Maven用户无需下载,请直接添加依赖:
<dependency> <groupid>org.expressme</groupid> <artifactid>SimpleJdbc</artifactid> <version>1.0</version> <type>jar</type> <scope>compile</scope></dependency>
- SimpleJdbc: 用于简化数据库操作的Java库
- SimpleJdbc: 用于简化数据库操作的Java库
- 通过使用SimpleJdbc类简化JDBC操作
- 利用Java存储过程简化数据库操作
- 利用Java存储过程简化数据库操作
- 利用Java存储过程简化数据库操作
- 利用Java存储过程简化数据库操作
- 利用Java存储过程简化数据库操作
- 利用Java存储过程简化数据库操作
- 利用Java存储过程简化数据库操作
- 用于操作数据库的通用模块
- 用于操作mysql数据库的c++类
- 用于操作mysql数据库的c++类
- 一个数据库类用于java中操作sql2005数据库
- Java--JavaWeb使用commons-dbutils简化数据库操作
- 利用dbutils简化数据库操作
- Active Record简化数据库操作
- 在ASP中简化数据库操作的思路和实现
- 软件测试6--软件测试与软件质量
- 019.数组的复制
- UFT(Unified Function Testing)自动化测试工具简介
- 1019. 数字黑洞 (20)
- 微信开发之带参二维码的使用
- SimpleJdbc: 用于简化数据库操作的Java库
- 操作系统哲学家就餐问题——定义一个互斥信号量mutex
- 华为之系统架构师作用的浅谈
- androidStudio 多渠道打包
- ArcGIS API for Silverlight动态标绘的实现
- 进程间通信简介(三)——命名管道
- 【利用Python给MySQL解压包快速瘦身】
- 用生命去守护
- 关于地址总线,字长,内存容量,寻址范围的计算