`

SimpleJdbc: 用于简化数据库操作的Java库

 
阅读更多

http://www.liaoxuefeng.com/archives/180

SimpleJdbc: 用于简化数据库操作的Java库

我不喜欢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一个查询的典型用法如下:

01.// 按ID查询:
02.User user = db.getById(User.class12300);
03.if (user==null)
04.throw new RuntimeException("user is not exist");
05. 
06.// 查询单个对象:
07.User user = db.queryForObject("select * from User where name=? and passwd=?","Michael""passwd");
08.if (user==null)
09.throw new RuntimeException("invalid name or password");
10. 
11.// 查询多个对象:
12.List<user> users = db.queryForList("select * from User where id>?"56700);
13. 
14.// 分页查询多个对象:
15.int firstResult = 0;
16.int maxResults = 5;
17.List<user> users = db.queryForList("select * from User where id>?", firstResult, maxResults, 56700);
18. 
19.// 查询int或long类型:
20.int i_count = db.queryForInt("select count(id) from User where id>?"5000);
21.long l_count = db.queryForLong("select count(id) from User where id>?"5000);
22.</user></user>

返回结果是强类型的JavaBean或泛型的List,完全不用强制转型,也没有任何RowMapper的定义,一切按照表名-类名,字段名-属性名的默认规则完成。

SimpleJdbc针对update操作提供了有用的updateEntity和updateProperties操作:

01.// 更新实体Bean除@Id外的所有属性,但不包括@Column(updatable=false):
02.User user = ...
03.db.updateEntity(user);
04. 
05.// 更新实体Bean的部分属性:
06.User user = ...
07.user.setName("Bob");
08.user.setPasswd("new-passwd");
09.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用户无需下载,请直接添加依赖:

1.<dependency>
2.<groupid>org.expressme</groupid>
3.<artifactid>SimpleJdbc</artifactid>
4.<version>1.0</version>
5.<type>jar</type>
6.<scope>compile</scope>
7.</dependency>

 

分享到:
评论

相关推荐

    java-SimpleJDBC:简单的JDBC

    Java-SimpleJDBC是一个针对Java开发者的开源项目,旨在简化Java数据库操作,通过提供简洁的API来处理JDBC(Java Database Connectivity)相关的任务。在Java编程中,JDBC是连接和操作关系型数据库的标准接口,它允许...

    galimatias-0.0.4.zip

    对于Amazon SimpleDB这样轻量级、无模式的云数据库服务,其提供的SimpleJDBC驱动程序为开发者提供了便捷的Java接口,使得与SimpleDB的交互变得更加直观和高效。本文将围绕开源项目"SimpleJDBC"展开,通过分析其zip...

    SimpleJDBC Development with Spring 2_5 and MySQL Presentation.pdf

    **SimpleJDBC** 是Spring Framework中的一部分,它提供了一种简化Java数据库连接(JDBC)操作的方法,使得开发者能够更加高效地处理数据库相关的任务,如执行查询、更新数据等。通过使用SimpleJDBC,开发者可以避免...

    java-microorm

    Java Micro-ORM(微型对象关系映射)是Java开发中的一种轻量级ORM框架,它旨在简化数据库操作,减轻开发者的工作负担。与传统的ORM框架如Hibernate或MyBatis相比,Micro-ORM通常更小巧、简单,易于理解和使用,适合...

    Apress.Spring.Persistence – A.Running.Start.Feb.2009.pdf

    - **整合JDBC**:详细说明了如何将JDBC集成到Spring中,利用Spring的特性简化数据库操作。 - **数据源整合**:讨论了如何在Spring中配置和使用数据源,确保高效稳定的数据库连接。 - **ApplicationContext创建**:...

    [Spring技术内幕:深入解析Spring架构与设计原理(第2版)].计文柯.扫描版

    - **JDBC**:通过Spring的JdbcTemplate或SimpleJdbc*系列类简化JDBC操作。 - **ORM**:整合Hibernate、MyBatis等ORM框架,提供面向对象的数据库操作方式。 - **JPA**:Java Persistence API,提供了一种基于Java的...

    Spring5中文文档

    测试章节提供了单元测试和集成测试的示例和最佳实践,包括JDBC测试和使用SimpleJdbc类简化JDBC操作的方法。这部分也涵盖了Spring框架下的测试策略,包括DAO和JDBC测试支持。 数据访问章节涵盖了使用Spring JDBC框架...

    spring-framework-5.0 中文文档PDF

    DAO支持和JDBC测试支持章节可能讲述了如何在Spring中使用DAO模式,并且使用JDBC进行数据访问,包括Spring JDBC框架的介绍、控制数据库连接、JDBC批量操作和利用SimpleJdbc类简化JDBC操作。 ORM和数据访问章节介绍了...

    Spring中文帮助文档

    11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource...

    Spring API

    11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource...

Global site tag (gtag.js) - Google Analytics