阅读更多

16顶
46踩

企业架构

原创新闻 SimpleJDBC 1.0发布

2011-03-09 09:36 by 见习记者 asklxf 评论(72) 有23780人浏览
DAO

SimpleJDBC是一个用于简化JDBC代码的简单框架,需Spring集成。SimpleJDBC让你用简单的SQL语句完成增删改查,同时支持强类型和Java泛型,仅需注入一个Db实例。例如:

 

 

// query:
List<User> users = db.query("select * from User");
User user = db.getById(User.class, 12345);
int count = db.queryForInt("select count(id) from User where age>?", 20);

// insert
User user = new User(12345, "Michael");
db.insert(user);

// update
user.setName("Bob");
user.setAge(29);
db.updateProperties(user, "name", "age");

// delete
User user = new User(12345);
db.delete(user);
 

 

 

设计思想

  1. 契约优于配置,表名和类名一致,字段名和属性名一致;
  2. 不需编写DAO,为一两行SQL编写一个DAO方法不值;
  3. 简单的SQL语句,而不是经过ORM改造的HQL;
  4. 没有Attach/Detach状态,均为原始Bean无CGLIB代理;
  5. 没有一级/二级Cache,Cache应当用memcached,用不上memcached则说明压力小到根本无需Cache;
  6. 外键也映射到简单字段,而非对象,不支持一对多或多对一的级联查询,永远不用担心查出额外对象;
  7. 泛型和强类型支持,有SQL语句,但无JDBC代码;
  8. 不支持join等复杂查询,必须增加表的冗余以便使用简单查询。

哪些项目无法使用SimpleJdbc

  1. 没有用MySQL做为数据库;
  2. 没有用Spring;
  3. 使用了EAR而不是WAR;
  4. 必须使用Join等复杂查询;
  5. 在遗留数据库上开发。

以上说明该项目不Simple,因此无法使用SimpleJdbc。

 

 

Maven用户可直接添加依赖:

 

<dependency>
    <groupId>org.expressme</groupId>
    <artifactId>SimpleJdbc</artifactId>
    <version>1.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
 

其他用户可从http://code.google.com/p/simplejdbc/下载Jar及源码。

16
46
评论 共 72 条 请登录后发表评论
72 楼 weidewei 2011-03-25 14:25
    
71 楼 transist 2011-03-16 11:49
支持共享精神
70 楼 tterry 2011-03-15 14:52
用了  的确可以从h3中解放
    不过,不支持复杂查询,这个很不厚道,希望作者斟酌。
        最后喷子er们请关上你们高贵的喷子   
69 楼 suyulin6688 2011-03-14 18:45
这么多人“鄙视”这个 SimpleJdbc ...

我昨晚仔细看了 SimpleJdbc 的代码,发现写得很轻巧,不错。

1. SimpleJdbc 的 分页查询,用到 limit,所以目前只支持 mysql,
2. SimpleJdbc 的 查询,目前只支持单表查询,不支持Join等复杂查询。

基于以上 2 点,SimpleJdbc 的 查询,确实比较“鸡肋”。
---------------------------------------------------
但是,用 SimpleJdbc 来做 insert, update, delete 还是不错的(没有只支持mysql的限制),
可以省略对应的 sql 语句,例如:

1. insert into t_table(id, name, age) values(?,?,?)
2. update t_table set name=? where id=?
3. delete from t_table where id=?

---------------------------------------------------
特别是 更新部分属性,很方便:
// update 部分属性
user.setName("Bob");  
user.setAge(29);  
db.updateProperties(user, "name", "age");  

---------------------------------------------------
SimpleJdbc 的  java实体命名(类名, 属性名)  和   DB命名(表名, 字段名) 的  “默认匹配规则”  是 用 忽略大小写的相等 来匹配,
当然,也可以通过 以下 2 个注解来覆盖“默认匹配规则”:

@Table(name="tbl_tom_cat")
@Column(name="cat_name2")

---------------------------------------------------
我昨晚修改了几处 SimpleJdbc 的代码,
让它支持 “下划线间隔的匹配规则”,例如:cityName 匹配 city_name
并且可以配置是否启用“下划线间隔的匹配规则”来作为“默认匹配规则”

  <!-- the only singleton instance of Db, that's all -->
  <bean id="db" class="org.expressme.simplejdbc.Db">
        <!-- which package your entity classes located -->
        <property name="packageName" value="com.suyulin.jdbc.entity" />
        <!-- whether use underscore match rule between JAVA and DB, example: cityName - city_name -->
        <property name="underscoreFlag" value="true" />
        <!-- inject the jdbcTemplate bean -->
        <property name="jdbcTemplate" ref="jdbcTemplate" />
  </bean>


个人觉得“下划线间隔的匹配规则”比较“大众化”一些,
例如下面2个类都使用了“下划线间隔的匹配规则”:

1. Spring 中 BeanPropertyRowMapper 类
2. Hibernate 中 ImprovedNamingStrategy 类
---------------------------------------------------

至于查询,我只用到 SimpleJdbc 的 getById:
User user = db.getById(User.class, 12345);


个人觉得 Spring 的 JdbcTemplate 查询 , 已经很方便了,

因为:
Spring JdbcTemplate 2.5+ 提供了BeanPropertyRowMapper ,不需要自己写RowMapper,
(另外,spring JdbcTemplate 3.0 开始支持泛型)
68 楼 yin_bp 2011-03-11 22:59
javaeye从来没有什么新闻的热度有这么高啊
67 楼 yin_bp 2011-03-11 22:58
杯具了,这篇新闻成了大家茶饭之余的笑谈了,权当娱乐。
66 楼 moss 2011-03-11 22:43
想法非常不错,俺目前正在构思做一个简单的simplejdbc来适应复杂的数据库操作业务需求
65 楼 80245089 2011-03-11 16:52
现在业务这么复杂,不是简单的增删改一张表这么简单呵
64 楼 fight_bird 2011-03-11 16:04
这种东西还是属于玩具级的,忠言逆耳!
63 楼 netfishx 2011-03-11 10:52
只想说一句:je的头条是不是太无聊了
62 楼 veenter 2011-03-11 10:21
根据这几点

没有用MySQL做为数据库;
没有用Spring;
使用了EAR而不是WAR;
必须使用Join等复杂查询;
在遗留数据库上开发。


说明这是一个玩具
61 楼 key232323 2011-03-10 21:39
groovy的Sql

加上一些groovy本身的动态性,

在db层,不管是OO式的(没那么强大,尤其是多表),还是sql式的(默认用Map返回记录),都是很方便的

可以说在应用层面上,groovy的db层在开发效率、灵活上首屈一指(比起基于java的一些框架)——唯一要做的,就是写一个java-groovy的桥接
60 楼 xzj127 2011-03-10 20:00

        还能在哪些项目上面用?能告诉我吗?
59 楼 onlyonce 2011-03-10 14:05
哪些项目无法使用SimpleJdbc

   1. 没有用MySQL做为数据库;

以上说明该项目不Simple,因此无法使用SimpleJdbc。


我觉得真的有病!!!

虽然说 MySQL 是很多人在用,但我用别的就不 Simple 啦,用 Access 的话,是 Simple 还是算不 Simple 啊? 这都上头条,哎……
58 楼 mccxj 2011-03-10 13:19
反编译看了一下~
内部使用spring的RowMapper和jdbctemplate
只能单表,因为用一个正则表达式来找到表名~~从而对应到bean上去
只能mysql是因为自带分页处理,使用了mysql的limit语法

貌似反编译回来的api和例子中的不一样呀~眼花?
57 楼 aochant 2011-03-10 12:51
十分同意,楼主不要拿web来说事,对于web来说这些限制和所谓的优点也够无厘头的

wendal 写道
我无语了,看到很多人K你,本来不想继续打击你的

哪些项目无法使用SimpleJdbc

   1. 没有用MySQL做为数据库;-->天啊,你封装了什么,要这种限制?
   2. 没有用Spring;         -->有JDBCTemplate,还用你这个干啥呢? 再封装一次?
   3. 使用了EAR而不是WAR;   -->你的代码这么特别???
   4. 必须使用Join等复杂查询;-->晕死,你只做过HelloWorld>?
   5. 在遗留数据库上开发。   -->更加无语, 我完全无法理解

设计思想

   1. 契约优于配置,表名和类名一致,字段名和属性名一致;
---> 直接可以无视你了
   2. 不需编写DAO,为一两行SQL编写一个DAO方法不值;
---> JDBCTemplate也不需要
   3. 简单的SQL语句,而不是经过ORM改造的HQL;
---> JDBCTemplate不就是这样的?
   4. 没有Attach/Detach状态,均为原始Bean无CGLIB代理;
---> 没人强迫你要cache啊
   5. 没有一级/二级Cache,Cache应当用memcached,用不上memcached则说明压力小到根本无需Cache;
---> 我见识了,直接上memcached??
   6. 外键也映射到简单字段,而非对象,不支持一对多或多对一的级联查询,永远不用担心查出额外对象;
--->  优点?缺点?!
   7. 泛型和强类型支持,有SQL语句,但无JDBC代码;
---> 这个功能,简单一个封装, 好多项目都有这样的代码啦
   8. 不支持join等复杂查询,必须增加表的冗余以便使用简单查询。
---> 你开发过商业项目??

结论:
    1. Helloworld 级别
    2. 作者没毕业? 或者这是毕业论文
    3. 封装了JDBCTemplate,但连JDBCTemplate都不如!
    4. 作者被Hibernate折磨,回归SQL的途中

56 楼 aochant 2011-03-10 12:48
代码简洁是很重要,但绝对不是比什么都重要。
它只少得能用吧!!!!

看看你那些限制,和所谓的优点  真够无厘头的。



55 楼 solomon 2011-03-10 11:33
早就有类似的轮子了,比这个完善多了。

 speedframework
54 楼 asklxf 2011-03-10 11:11
suyulin6688 写道
用 这个 SimpleJDBC 来 做 insert, update, delete 貌似不错。

如果使用JdbcTemplate,则可以使用这个BeanPropertyRowMapper作为 实体类 和数据库的映射。

String sql = "select id, insert_time, last_update_time, author, name, page, price from book";
List<Book> bookList = simpleJdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));


SimpleJdbc不想让你写new BeanPropertyRowMapper<Book>(Book.class),自动从SQL语句判断,并在内部帮你实现了:

List<Book> bookList = db.query(sql);

SimpleJdbc只有Db接口,其他什么都没有
53 楼 suyulin6688 2011-03-10 11:06
用 这个 SimpleJDBC 来 做 insert, update, delete 貌似不错。

至于用得最多的 select, 还是 Spring JdbcTemplate 3.0 比较爽:
===========================================================================

spring JdbcTemplate 2.5+ 提供了BeanPropertyRowMapper ,不需要自己写RowMapper,
(另外,spring JdbcTemplate 3.0 开始支持泛型)
使用条件:实体类 和数据库表的字段完全对应(字段名字一样, or “驼峰式”与“下划线间隔式”对应),
------ 如果不对应,用字段别名搞定,例如: select fname as first_name from customer ------
如果使用JdbcTemplate,则可以使用这个BeanPropertyRowMapper作为 实体类 和数据库的映射。

String sql = "select id, insert_time, last_update_time, author, name, page, price from book";
List<Book> bookList = simpleJdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));

补充:使用BeanPropertyRowMapper时,实体类 的属性最好不要用原始类型(例如int), 而应该用包装类(例如Integer), 以便应对数据库中可能出现的  null 值

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 最新版Borland Together Designer(UML建模工具)

    Together是一种建模工具 用Together只要精通uml,只需要少量的java知识就搞定业务需要,于是下来用用看,看了自代的一个例子,里面的uml只能看懂少部份,不过功能确实强大,自动生成java代码并运行。

  • Borland Together 用户指南

    Together是基于Eclipse的一款不可多得的开发工具

  • 学习使用Borland Together心得体会(三)

    使用Borland Together Edition for Jbuilder         最近学习使用了Together Edition for Jbuilder,发现Together和Jbuilder结合起来开发程序的速度和品质无与伦比,以前发表的两篇文章都是介绍Together ControlCenter的,这个工具与现在要介绍的工具比较起来则更加的侧重于设计,分析。程序员使

  • 《Borland Together特点与优势》

    Borland®1Borland® Together®技术特性与优势1)支持所有主要的UML™ 图形充分利用Unified Modeling Language™ (统一建模语言 —UML)搭建正确的架构,以便满足你的业务目标。每一个软件项目都需要一个蓝图,以保持整个小组向相同的方向前进并构建正确的软件。通过集成UML 能力的方式,Together 扩展了开发框架,简化了构建软件的复杂过程。Toge

  • 利用together学习《java与模式》

    together是模式中推荐使用的工具,通过网上搜索发现要使用还是能做到的。以下怎样安装为转载: Together for Eclipse2008学习-安装 博客分类: Java 这一段是从网上转载过来的,转载地址是http://www.knowsky.com/363032.html 我安装的时候,不是参考这份资料 但在搜索教程的时候,查到了这份资料,觉得不错 ...

  • 介绍Together

    介绍Together     最开始接触Together时,它是个能自动生成代码的建模工具。Borland公司收购Together之后,在建模方面增加了许多功能,同时增加了其它一些功能,如代码审计、度量等。OK,这么好的工具,我们就来了解一下吧。 一、功能特点    Together的功能大致有(摘自Together文档):    1、支持所有主要的UML图形    充分利用UML搭建正确的架构,

  • 学习使用Borland Together心得体会(一) (转)

    学习使用Borland Together心得体会(一) (转)[@more@]众所周知,大名鼎鼎的Borland公司最近收购了一家名为TogetherSoft的公司,之后Borland迅速的推出了名为Borland ALM So...

  • 学习使用Borland Together心得体会(二)

     一、使用Together绘制UML视图并产生代码框架!1、首先新建一个工程,如TEST.TPR2、每个工程都有一个default视图,可以使用鼠标右键单击default视图,如图所示:3、选择新建一个Package,这样在工程Explorer中你就会看见多了一个package视图。4、在新的Package中建立新的Class视图。这样在右边的Designer中就会看见一个空的视图

  • Together与Visual.Studio.NET的结合使用(转载)

    Together与Visual.Studio.NET的结合使用作者: bnPYSse(原创) 1、Borland Together Edition for Microsoft Visual Studio .NET 的安装

  • 常用CASE工具介绍

    一,概述  今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要。企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建模。 二,软件开发CASE工具简介 (一)图稿绘制:  1,visio:这是目前国内用得最多的case工具。它提供了日常使用中的绝大多数框图的绘画功能(包括信息领域的各种原理图,设计图),同时提供了

  • borland together 2008 sp1 (part01)

    大名鼎鼎的UML建模工具,Borland的together 2008 sp1的安装文件(只是安装文件,不提供破解),原安装文件为533MB,由于附件体积的限制只能拆成23多份。 上传太累了,文件好多,干脆把链接给出来吧 http://downloadcenter.borland.com/12346/433/3049433/Together2008SP1WW_TR.exe?ftpRequestID=860391003&server=downloadcenter.borland.com&authparam=1254665716_2f4c17a019cf4d0b303f5086de6b19ce&ext=.exe 或者 ftp://ftpc.borland.com/12346/433/3049433/Together2008SP1WW_TR.exe

  • Borland Together Designer 2005 Crack

    Borland Together Designer 2005 Crack

  • 用borland together反向工程生成sequence图的方法

    用borland together反向工程生成sequence图的方法

  • Borland Together

    1、用了Together,还会想用Rose吗? 2、Together文章征集系列活动如果大家有更好的Borland Together方面的资料不妨也贴上来。在此说声谢谢了。 转载于:https://www.cnblogs.com/cjsh/archive/2004/06/08/14171.html...

  • 【收藏】c++编程常用工具集

    给c++程序员的一份礼物-常用工具集 给c++程序员的一份礼物-常用工具集 ■...开发环境  ---->Turbo c  DOS时代c语言开发的经典工具,目前适合两类人使用:c语言beginner(尤其是学生一族),具有怀旧情节的专业人士:)  ---->Visual C++ 6.0/7.0  稳定而强大的IDE开发环境,具有丰富的调试功能,定制宏的功能也是其一大

Global site tag (gtag.js) - Google Analytics