﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-风故故，也依依</title><link>http://www.blogjava.net/jadmin/</link><description>Stand still in the wind.</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 18:37:24 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 18:37:24 GMT</pubDate><ttl>60</ttl><item><title>关于Jorm的主键ID生成</title><link>http://www.blogjava.net/jadmin/archive/2011/10/10/360387.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Mon, 10 Oct 2011 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/10/10/360387.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/360387.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/10/10/360387.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/360387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/360387.html</trackback:ping><description><![CDATA[<p><font size="4"><strong>&gt; 引言</strong><br /> &nbsp; 在Jorm中，主键的生成策略主要有AUTO、UUID、GUID、FOREIGN、SEQUENCE、INCREMENT、IDENTITY、ASSIGNED，下面分别来讲述这几种策略的应用场景</font></p> <p><font size="4"><strong>&gt; GenerationType.AUTO</strong><br /> &nbsp; Jorm的默认主键策略，自动增长型，自增步长为1，适用数据类型int,long,如：<br /> &nbsp; private int id // 默认策略就是AUTO，故可以不写主键策略<br /> &nbsp; 或<br /> &nbsp; @Id(GenerationType.AUTO) // 默认策略可以省去不写的哦~<br /> &nbsp; private int id</font></p> <p><font size="4"><strong>&gt; GenerationType.INCREMENT</strong><br /> &nbsp; 顾名思义，增长型，适用数据类型int,long。自增步长为1<br /> &nbsp; 1&gt; 使用默认自增步长1，如：<br /> &nbsp;&nbsp;&nbsp;&nbsp; @Id(GenerationType.INCREMENT)<br /> &nbsp;&nbsp;&nbsp;&nbsp; @Column("item_id")<br /> &nbsp;&nbsp;&nbsp;&nbsp; private long id;<br /> &nbsp; 2&gt; 使用自定义步长，如：<br /> &nbsp;&nbsp;&nbsp;&nbsp; @Id(value = GenerationType.INCREMENT, incrementBy=3) // 这里自增步长为3，注意写法<br /> &nbsp;&nbsp;&nbsp;&nbsp; private int id;</font></p> <p><font size="4"><strong>&gt; GenerationType.IDENTITY</strong><br /> &nbsp; 对于那些实现了自动增长的数据库，可以使用IDENTITY，如MySQL,SQL Server,PostreSQL,前提是<br /> &nbsp; MySQL数据库中建表语句定义了主键为：id(你的主键列名) int NOT NULL AUTO_INCREMENT 或<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> <font size="4">id(你的主键列名) bigint NOT NULL AUTO_INCREMENT<br /> &nbsp; SQL Server数据库中建表语句定义了主键为：id int identity(xx, xx) 如此类似<br /> &nbsp; PostreSQL数据库中建表语句定义了主键为：id bigserial&nbsp; 或&nbsp; id serial<br /> &nbsp; 使用例子<br /> &nbsp; @Id(GenerationType.IDENTITY)<br /> &nbsp; @Column("id")<br /> &nbsp; private long sid;</font></p> <p><font size="4"><strong>&gt; GenerationType.UUID</strong><br /> &nbsp; 与数据库无关的策略，适用数据类型：字符串类型，适用所有数据库，长度须大于或等于32<br /> &nbsp; @Id(GenerationType.UUID)<br /> &nbsp; private String id;</font></p> <p><font size="4"><strong>&gt; GenerationType.GUID</strong><br /> &nbsp; 与UUID有点类似，不过这个id值是又数据库来生成的，适用于数据库MySQL、PostgreSQL、SQL Server、Oracle等<br /> &nbsp; @Id(GenerationType.GUID)<br /> &nbsp; private String id;</font></p> <p><font size="4"><strong>&gt; GenerationType.FOREIGN</strong><br /> &nbsp; 适用于一对一关系中引用了另一个对象的主键作为自己的主键的情形，如：<br /> &nbsp; @Id(GenerationType.FOREIGN)<br /> &nbsp; @Column("identity_number")<br /> &nbsp; private String identity;</font></p> <p><font size="4"><strong>&gt; GenerationType.SEQUENCE</strong><br /> &nbsp; 这个不用多说，应用于Oracle、H2、PostgreSQL等有sequence序列功能的数据库</font></p> <p><font size="4"><strong>&gt; GenerationType.ASSIGNED</strong><br /> &nbsp; 用户自定义生成，需要由程序员手工给主键主动赋值</font></p> <p>&nbsp;</p><p><div><p><span style="font-size: 16px;">项目地址:</span><a href="http://javaclub.sourceforge.net/jorm.html"><span style="font-size: 16px;">http://javaclub.sourceforge.net/jorm.html</span></a><br /><span style="font-size: 16px;">下载地址:</span><a href="http://sourceforge.net/projects/javaclub/files/jorm/"><span style="font-size: 16px;">http://sourceforge.net/projects/javaclub/files/jorm/</span></a></p></div><br /></p><img src ="http://www.blogjava.net/jadmin/aggbug/360387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-10-10 15:17 <a href="http://www.blogjava.net/jadmin/archive/2011/10/10/360387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Jorm进行批量操作</title><link>http://www.blogjava.net/jadmin/archive/2011/10/09/360310.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Sun, 09 Oct 2011 12:09:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/10/09/360310.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/360310.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/10/09/360310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/360310.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/360310.html</trackback:ping><description><![CDATA[<p><font size="4">直接上代码吧：</font></p> <p><font size="4"><strong>&gt; Demo one<br /></strong>public void batch_op_one() {</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; session = Jorm.getSession();<br /> &nbsp;&nbsp;&nbsp; JdbcBatcher batcher = session.createBatcher();<br /> &nbsp;&nbsp;&nbsp; batcher.addBatch("delete from t_id_auto");<br /> &nbsp;&nbsp;&nbsp; batcher.addBatch("delete from t_incre");<br /> &nbsp;&nbsp;&nbsp; batcher.addBatch("delete from t_user");<br /> &nbsp;&nbsp;&nbsp; batcher.execute();<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; session.beginTransaction();<br /> &nbsp;&nbsp;&nbsp; long start;<br /> &nbsp;&nbsp;&nbsp; try {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start = System.currentTimeMillis();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sql = "INSERT INTO t_user(sex,age,career,name,id) VALUES(?,?,?,?,?)";<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 100000; i++) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; batcher.addBatch(sql, new Object[] {"男", Numbers.random(98), Strings.random(10), Strings.fixed(6), (i+1) });}<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sqlx = "INSERT INTO t_id_auto(name, id) VALUES(?, ?)";<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 100000; i++) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; batcher.addBatch(sqlx, new Object[] {Strings.fixed(6), (i+1)});<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i &gt; 200) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Integer.parseInt("kkk");<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; batcher.execute();&nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(System.currentTimeMillis() - start);<br /> &nbsp;&nbsp;&nbsp; } catch (Exception e) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.rollback();<br /> &nbsp;&nbsp;&nbsp; } finally {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.endTransaction();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();<br /> &nbsp;&nbsp;&nbsp; }<br /> }</font></p> <p><font size="4"><strong>&gt; Demo two<br /></strong>public void batch_op_two() {</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; session = Jorm.getSession();<br /> &nbsp;&nbsp;&nbsp; session.beginTransaction();<br /> &nbsp;&nbsp;&nbsp; session.clean(User.class);<br /> &nbsp;&nbsp;&nbsp; JdbcBatcher batcher = session.createBatcher();<br /> &nbsp;&nbsp;&nbsp; batcher.setBatchSize(500);// 指定每批处理的记录数<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; User u;<br /> &nbsp;&nbsp;&nbsp; int times = 20 * 100;<br /> &nbsp;&nbsp;&nbsp; long start = System.currentTimeMillis();<br /> &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; times; i++) {<br /> &nbsp;&nbsp;&nbsp; &nbsp;String sex = (i % 2 == 0 ? "男" : "女");<br /> &nbsp;&nbsp;&nbsp; &nbsp;u = new User(Strings.fixed(6), sex, Numbers.random(100), Strings.random(16));<br /> &nbsp;&nbsp;&nbsp; &nbsp;batcher.save(u);<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; batcher.execute();<br /> &nbsp;&nbsp;&nbsp; session.endTransaction();<br /> &nbsp;&nbsp;&nbsp; long cost = (System.currentTimeMillis() - start);<br /> &nbsp;&nbsp;&nbsp; System.out.println("Total：" + cost);<br /> &nbsp;&nbsp;&nbsp; System.out.println("Each：" + (float) cost / times);<br /> &nbsp;&nbsp;&nbsp; session.close();<br /> }</font></p> <p><font size="4">项目地址：</font><a href="http://javaclub.sourceforge.net/jorm.html"><font size="4">http://javaclub.sourceforge.net/jorm.html</font></a><br /> <font size="4">下载地址:</font> <a href="http://sourceforge.net/projects/javaclub/files/jorm/"><font size="4">http://sourceforge.net/projects/javaclub/files/jorm/</font></a></p><img src ="http://www.blogjava.net/jadmin/aggbug/360310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-10-09 20:09 <a href="http://www.blogjava.net/jadmin/archive/2011/10/09/360310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关系型数据库对对象继承关系的解决方案</title><link>http://www.blogjava.net/jadmin/archive/2011/09/27/360421.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Tue, 27 Sep 2011 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/09/27/360421.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/360421.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/09/27/360421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/360421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/360421.html</trackback:ping><description><![CDATA[<div><span style="font-size: 16px;">关系数据库不支持继承，我们可以做如下的映射，这些映射都是牺牲关系模式的范式基础的</span></div> <div><span style="font-size: 16px;"> </span></div> <div><span style="font-size: 16px;">1，  用一个表包含所有继承层次的所有字段，然后标识列来标示是哪个类。这种映射方法最简单，但是是违反规范化的，而且有些字段要强制为NULL值，无法保证关系数据模型的数据完整性，这种映射方式性能最高，最简单。</span></div> <div><span style="font-size: 16px;"> </span></div> <div><span style="font-size: 16px;">2，  每个具体类一张表（意思就是父类不需要表），所有父属性在具体类表中重复，这种映射如果要查询父类要全部扫描子类表，而且一旦父类变化，这些字表要全部变化。</span></div> <div><span style="font-size: 16px;"> </span></div> <div><span style="font-size: 16px;">3，  每个类一张表，表里只包含所属类的属性，然后子类和父类共享外键，这种映射避免了第2种的可怕的修改，但是查询的时候要执行连接。</span></div><img src ="http://www.blogjava.net/jadmin/aggbug/360421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-09-27 09:38 <a href="http://www.blogjava.net/jadmin/archive/2011/09/27/360421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高并发数据库自增主键分析</title><link>http://www.blogjava.net/jadmin/archive/2011/09/25/360422.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Sun, 25 Sep 2011 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/09/25/360422.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/360422.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/09/25/360422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/360422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/360422.html</trackback:ping><description><![CDATA[<p><span style="font-size: 16px;">      在一般情况下，在新增领域对象后，都需要获取对应的主键值。使用应用层来维护主键，在一定程度上有利于程序性能的优化和应用移植性的提高。在采用数据库自增主键的方案里，如果JDBC驱动不能绑定新增记录对应的主键，就需要手工执行查询语句以获取对应的主键值，对于高并发的系统，这很容易返回错误的主键。通过带缓存的DataFieldMaxValueIncrementer，可以一次获取批量的主键值，供多次插入领域对象时使用，它的执行性能是很高的。</span><br/><br/><span style="font-size: 16px;">      我们经常使用数据的自增字段作为表主键，也即主键值不在应用层产生，而是在新增记录时，由数据库产生。这样，应用层在保存对象前并不知道对象主键值，而必须在保存数据后才能从数据库中返回主键值。在很多情况下，我们需要获取新对象持久化后的主键值。在Hibernate等ORM框架，新对象持久化后，Hibernate会自动将主键值绑定到对象上，给程序的开发带来了很多方便。 </span><br/><br/><span style="font-size: 16px;">      在JDBC 3.0规范中，当新增记录时，允许将数据库自动产生的主键值绑定到Statement或PreparedStatement中。</span></p> <p><span style="font-size: 16px;">      使用Statement时，可以通过以下方法绑定主键值：</span><span> int executeUpdate(String sql, int autoGeneratedKeys)</span><span style="font-size: 16px;"> </span></p> <p><span style="font-size: 16px;">      也可以通过Connection创建绑定自增值的PreparedStatement： PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) </span><br/><br/><span style="font-size: 16px;">      当autoGeneratedKeys参数设置为Statement.RETURN_GENERATED_KEYS值时即可绑定数据库产生的主键值，设置为Statement.NO_GENERATED_KEYS时，不绑定主键值。下面的代码演示了Statement绑定并获取数据库产生的主键值的过程：</span></p> <div> <p><span style="background-color: #ffff00;"><span style="font-size: 16px; background-color: #ffff00;">      Statement stmt = conn.createStatement();</span><br/><span style="font-size: 16px; background-color: #ffff00;">      String sql = "INSERT INTO t_topic(topic_title,user_id) VALUES(‘测试主题’,’123’)";</span><br/><span style="font-size: 16px; background-color: #ffff00;">      stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS); // ①指定绑定表自增主键值</span><br/><span style="font-size: 16px; background-color: #ffff00;">      ResultSet rs = stmt.getGeneratedKeys();</span><br/><span style="font-size: 16px; background-color: #ffff00;">      if( rs.next() ) {</span><br/><span style="font-size: 16px; background-color: #ffff00;">           intkey = rs.getInt(); // ②获取对应的表自增主键值</span><br/><span style="font-size: 16px; background-color: #ffff00;">      }</span><br/></span><br/><span style="font-size: 16px;">      Spring利用这一技术，提供了一个可以返回新增记录对应主键值的方法： int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder) ，其中第二个参数类型org.springframework.jdbc.support.KeyHolder，它是一个回调接口，Spring使用它保存新增记录对应的主键，该接口的接口方法描述如下： </span></p> <p><span style="font-size: 16px;">      Number getKey() throws InvalidDataAccessApiUsageException;</span></p> <p><span style="font-size: 16px;">      当仅插入一行数据，主键不是复合键且是数字类型时，通过该方法可以直接返回新的主键值。如果是复合主键，或者有多个主键返回时，该方法抛出 InvalidDataAccessApiUsageException。该方法是最常用的方法，因为一般情况下，我们一次仅插入一条数据并且主键字段类型为数字类型； </span></p> <p><span style="font-size: 16px;">      如果是复合主键，则列名和列值构成Map中的一个Entry。如果返回的是多个主键，则抛出InvalidDataAccessApiUsageException异常； </span></p> <p><span style="font-size: 16px;">      Map getKeys() throws InvalidDataAccessApiUsageException;</span><br/><br/><span style="font-size: 16px;">      如果返回多个主键，即PreparedStatement新增了多条记录，则每一个主键对应一个Map，多个Map构成一个List。</span></p> <p><span style="font-size: 16px;">      List getKeyList()： </span><br/><br/><span style="font-size: 16px;">      Spring为KeyHolder接口指代了一个通用的实现类GeneratedKeyHolder，该类返回新增记录时的自增长主键值。假设我们希望在新增论坛板块对象后，希望将主键值加载到对象中，则可以按以下代码进行调整：</span></p> </div> <div> <p><span style="background-color: #ffff00;"><span style="font-size: 16px; background-color: #ffff00;">      public voidaddForum(final Forum forum) {</span><br/><span style="font-size: 16px; background-color: #ffff00;">            final String sql = "INSERT INTO t_forum(forum_name,forum_desc) VALUES(?,?)";</span><br/><span style="font-size: 16px; background-color: #ffff00;">            KeyHolder keyHolder = newGeneratedKeyHolder(); // ①创建一个主键执有者</span><br/><span style="font-size: 16px; background-color: #ffff00;">            getJdbcTemplate().update(newPreparedStatementCreator() {</span><br/><span style="font-size: 16px; background-color: #ffff00;">                  public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {</span><br/><span style="font-size: 16px; background-color: #ffff00;">                        PreparedStatement ps = conn.prepareStatement(sql);</span><br/><span style="font-size: 16px; background-color: #ffff00;">                        ps.setString(1, forum.getForumName());</span><br/><span style="font-size: 16px; background-color: #ffff00;">                        ps.setString(2, forum.getForumDesc());</span><br/><span style="font-size: 16px; background-color: #ffff00;">                        returnps;</span><br/><span style="font-size: 16px; background-color: #ffff00;">                  }</span><br/><span style="font-size: 16px; background-color: #ffff00;">            }, keyHolder);</span><br/><span style="font-size: 16px; background-color: #ffff00;">            forum.setForumId(keyHolder.getKey().intValue()); // ②从主键执有者中获取主键</span><br/><span style="font-size: 16px; background-color: #ffff00;">      }</span></span></p> </div> <p><span style="font-size: 16px;">      这样，在调用addForum(Forum forum)新增forum领域对象后，forum将拥有对应的主键值，方便后继的使用。在JDBC 3.0之前的版本中，PreparedStatement不能绑定主键，如果采用表自增键（如MySQL的auto increment或SQLServer的identity）将给获取正确的主键值带来挑战——因为你必须在插入数据后，马上执行另一条获取新增主键的查询语句。下面给出了不同数据库获取最新自增主键值的查询语句： </span></p> <img src ="http://www.blogjava.net/jadmin/aggbug/360422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-09-25 14:27 <a href="http://www.blogjava.net/jadmin/archive/2011/09/25/360422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 中的 IdentifierGenerator</title><link>http://www.blogjava.net/jadmin/archive/2011/09/25/360423.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Sun, 25 Sep 2011 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/09/25/360423.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/360423.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/09/25/360423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/360423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/360423.html</trackback:ping><description><![CDATA[<p><span style="font-size: 16px;">1) Assigned</span><br/><span style="font-size: 16px;">主键由外部程序负责生成，无需Hibernate参与。</span></p> <p><br/><span style="font-size: 16px;">2) hilo</span><br/><span style="font-size: 16px;">通过hi/lo 算法实现的主键生成机制，需要额外的数据库表保存主键生成历史状态。</span></p> <p><br/><span style="font-size: 16px;">3) seqhilo</span><br/><span style="font-size: 16px;">与hilo 类似，通过hi/lo 算法实现的主键生成机制，只是主键历史状态保存在Sequence中，适用于支持Sequence的数据库，如Oracle。</span></p> <p><br/><span style="font-size: 16px;">4) increment</span><br/><span style="font-size: 16px;">主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量，以保存着当前的最大值，之后每次需要生成主键的时候将此值加1作为主键。 这种方式可能产生的问题是：如果当前有多个实例访问同一个数据库，那么由于各个实例各自维护主键状态，不同实例可能生成同样的主键，从而造成主键重复异常。因此，如果同一数据库有多个实例访问，此方式必须避免使用。</span></p> <p><br/><span style="font-size: 16px;">5) identity</span><br/><span style="font-size: 16px;">采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。</span></p> <p><br/><span style="font-size: 16px;">6) sequence</span><br/><span style="font-size: 16px;">采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。</span></p> <p><br/><span style="font-size: 16px;">7) native</span><br/><span style="font-size: 16px;">由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。</span></p> <p><br/><span style="font-size: 16px;">8) uuid.hex</span><br/><span style="font-size: 16px;">由Hibernate基于128 位唯一值产生算法生成16 进制数值（编码后以长度32 的字符串表示）作为主键。</span></p> <p><br/><span style="font-size: 16px;">9) uuid.string</span><br/><span style="font-size: 16px;">与uuid.hex 类似，只是生成的主键未进行编码（长度16）。在某些数据库中可能出现问题（如PostgreSQL）。</span></p> <p><br/><span style="font-size: 16px;">10) foreign</span><br/><span style="font-size: 16px;">使用外部表的字段作为主键。一般而言，利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。</span><br/><span style="font-size: 16px;">另外由于常用的数据库，如Oracle、DB2、SQLServer、MySql 等，都提供了易用的主键生成机制（Auto-Increase 字段或者Sequence）。我们可以在数据库提供的主键生成机制上，采用generator-class=native的主键生成方式。不过值得注意的是，一些数据库提供的主键生成机制在效率上未必最佳，</span></p> <p><br/><span style="font-size: 16px;">大量并发insert数据时可能会引起表之间的互锁。数据库提供的主键生成机制，往往是通过在一个内部表中保存当前主键状态（如对于自增型主键而言，此内部表中就维护着当前的最大值和递增量）， 之后每次插入数据会读取这个最大值，然后加上递增量作为新记录的主键，之后再把这个新的最大值更新回内部表中，这样，一次Insert操作可能导致数据库内部多次表读写操作，同时伴随的还有数据的加锁解锁操作，这对性能产生了较大影响。 因此，对于并发Insert要求较高的系统，推荐采用uuid.hex 作为主键生成机制。</span></p> <p><br/><span style="font-size: 16px;">如果需要采用定制的主键生成算法，则在此处配置主键生成器，主键生成器须实现</span>org.hibernate<span style="font-size: 16px;">.id.IdentifierGenerator 接口</span></p> <p><span style="font-size: 16px;"> </span></p> <p><span style="font-size: 16px;">关键词： Hibernate  主键   主键生成方式  IdentifierGenerator</span></p> <p><span style="font-size: 16px;"> </span></p><img src ="http://www.blogjava.net/jadmin/aggbug/360423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-09-25 13:47 <a href="http://www.blogjava.net/jadmin/archive/2011/09/25/360423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Jorm处理Oracle存储过程返回多个游标</title><link>http://www.blogjava.net/jadmin/archive/2011/09/23/359360.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Fri, 23 Sep 2011 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/09/23/359360.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/359360.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/09/23/359360.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/359360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/359360.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/jadmin/archive/2011/09/23/359360.html'>阅读全文</a><img src ="http://www.blogjava.net/jadmin/aggbug/359360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-09-23 16:17 <a href="http://www.blogjava.net/jadmin/archive/2011/09/23/359360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC ORM Framework 1.0.6 发布</title><link>http://www.blogjava.net/jadmin/archive/2011/09/23/359330.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Fri, 23 Sep 2011 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/09/23/359330.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/359330.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/09/23/359330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/359330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/359330.html</trackback:ping><description><![CDATA[<br /><div><a href="http://www.oschina.net/news/21642/jdbc-orm-framework-1-0-6">http://www.oschina.net/news/21642/jdbc-orm-framework-1-0-6</a></div><br /><div> <p>主要更新：<br /> ----------------------------------------<br /> &nbsp;* [35] fix: oracle下一个分页取limit数错误的bug.<br /> &nbsp;* [34] fix: oracle下检测是否支持Savepoints时，一个未捕获的异常.<br /> &nbsp;* [33] add: 对bonecp的支持<br /> &nbsp;* [32] add: 对proxool的支持<br /> &nbsp;* [31] add: 对commons-dbcp的支持<br /> &nbsp;* [30] fix: classpath没有config.properties文件会报错</p><p><br /></p></div><img src ="http://www.blogjava.net/jadmin/aggbug/359330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-09-23 10:53 <a href="http://www.blogjava.net/jadmin/archive/2011/09/23/359330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Jorm处理特殊字段</title><link>http://www.blogjava.net/jadmin/archive/2011/09/22/359285.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Thu, 22 Sep 2011 12:16:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/09/22/359285.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/359285.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/09/22/359285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/359285.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/359285.html</trackback:ping><description><![CDATA[<div><strong>&gt; 引言</strong><br />有时候我们有这样的需求，对象有一个属性可能有多个值，需要在数据库中作为一个字段存储</div><br /><div>还是以User为例，career存储多个职业</div><br /><div><strong>&gt; 建表</strong></div><div>以MySQL为例，执行下面的sql建立数据表<br />CREATE TABLE `t_user` (&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `id` int(11) NOT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `name` varchar(50) DEFAULT NULL,&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `sex` char(4) DEFAULT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `age` int(11) DEFAULT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `career` varchar(100) DEFAULT NULL, &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (`id`)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />) ENGINE=InnoDB DEFAULT CHARSET=utf8;</div><br /><div><strong>&gt; 代码</strong></div><div>实体类 User.java<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">@Entity(table&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">t_user</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />@PK(value&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">id</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> User&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;Serializable&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;desc&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">4750351638245912867L</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;id;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;name;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;sex;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;Integer&nbsp;age;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Basic(processor</span><span style="color: #000000; ">=</span><span style="color: #000000; ">DefinedFieldProcessor.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String[]&nbsp;career;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@NoColumn<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;kvalue;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;JawaUser()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;JawaUser(String&nbsp;name,&nbsp;String&nbsp;sex,&nbsp;Integer&nbsp;age,&nbsp;String[]&nbsp;career)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.name&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.sex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sex;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.age&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;age;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.career&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;career;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;getId()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;id;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setId(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;id)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.id&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;id;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;getName()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setName(String&nbsp;name)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.name&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;getSex()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;sex;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setSex(String&nbsp;sex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.sex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sex;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Integer&nbsp;getAge()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;age;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setAge(Integer&nbsp;age)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.age&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;age;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String[]&nbsp;getCareer()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;career;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setCareer(String[]&nbsp;career)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.career&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;career;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;getKvalue()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;kvalue;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setKvalue(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;kvalue)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.kvalue&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;kvalue;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;toString()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">User&nbsp;[age=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;career=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;Arrays.toString(career)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;id=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;id&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;kvalue=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;kvalue&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;name=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;sex=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sex&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">]</span><span style="color: #000000; ">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div><div>属性字段处理类 DefinedFieldProcessor.java</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; "><div>import java.lang.reflect.Field;<br />import java.sql.ResultSet;<br />import java.sql.SQLException;<br /><br />import org.javaclub.jorm.Session;<br />import org.javaclub.jorm.common.CommonUtil;<br />import org.javaclub.jorm.common.Reflections;<br />import org.javaclub.jorm.jdbc.process.FieldProcessor;</div><br />public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;DefinedFieldProcessor&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;FieldProcessor&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Object&nbsp;insert(Session&nbsp;session,&nbsp;Object&nbsp;entity,&nbsp;Field&nbsp;field)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;crs&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(String[])&nbsp;Reflections.getFieldValue(entity,&nbsp;field);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">CommonUtil.isEmpty(crs))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sbf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;StringBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;crs.length;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(i&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbf.append(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbf.append(crs[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;sbf.toString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">""</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;load(Session&nbsp;session,&nbsp;Object&nbsp;entity,&nbsp;Field&nbsp;field,&nbsp;ResultSet&nbsp;rs,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;idx)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;SQLException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;rs.getString(idx);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;crs&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;str.split(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reflections.setFieldValue(entity,&nbsp;field,&nbsp;crs);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</span></div><br /><div><strong>&gt; 测试</strong></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; "><div><div>import org.javaclub.jorm.Jorm;<br />import org.javaclub.jorm.Session;<br />import org.javaclub.jorm.common.Numbers;<br />import org.javaclub.jorm.common.Strings;<br />import org.junit.AfterClass;<br />import org.junit.BeforeClass;<br />import org.junit.Test;</div></div><br />public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;FieldProcessorTest&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;Session&nbsp;session;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@BeforeClass<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setUpBeforeClass()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Jorm.getSession();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@AfterClass<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;destroy()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jorm.free();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;test_save()&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.clean(User.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User&nbsp;u;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">男</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">女</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;cr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(i&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;String[]&nbsp;{Strings.fixed(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">),&nbsp;Strings.random(</span><span style="color: #000000; ">5</span><span style="color: #000000; ">),&nbsp;Strings.fixed(</span><span style="color: #000000; ">6</span><span style="color: #000000; ">)};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(i&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;String[]&nbsp;{Strings.fixed(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">),&nbsp;Strings.random(</span><span style="color: #000000; ">5</span><span style="color: #000000; ">)};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;String[]&nbsp;{Strings.fixed(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> User(Strings.fixed(</span><span style="color: #000000; ">6</span><span style="color: #000000; ">),&nbsp;sex,&nbsp;Numbers.random(</span><span style="color: #000000; ">100</span><span style="color: #000000; ">),&nbsp;cr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(u);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;session.read(User.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;i&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(u);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div><img src ="http://www.blogjava.net/jadmin/aggbug/359285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-09-22 20:16 <a href="http://www.blogjava.net/jadmin/archive/2011/09/22/359285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Jorm简单的增删查改数据库</title><link>http://www.blogjava.net/jadmin/archive/2011/09/21/359182.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Wed, 21 Sep 2011 10:42:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/09/21/359182.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/359182.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/09/21/359182.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/359182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/359182.html</trackback:ping><description><![CDATA[<div><div id="blog_text"><p><strong><span style="font-size:16px">&gt; 准备</span></strong><br /><span style="font-size:16px">以MySQL为例，执行下面的sql建立数据表</span><br /><span style="font-size:16px">CREATE TABLE `t_user` (&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `id` int(11) NOT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `name` varchar(50) DEFAULT NULL,&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `sex` char(4) DEFAULT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `age` int(11) DEFAULT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `career` varchar(100) DEFAULT NULL, &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (`id`)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">) ENGINE=InnoDB DEFAULT CHARSET=utf8;</span><br /><br /><strong><span style="font-size:16px">&gt; 引入jar或maven依赖，需要jar包</span></strong><br /><span style="font-size:16px">gerald-jorm-1.0.5.jar 最新版本下载：</span><a target="_blank" href="http://sourceforge.net/projects/javaclub/files"><span style="font-size:16px">http://sourceforge.net/projects/javaclub/files</span></a><br /><span style="font-size:16px">commons-logging-1.1.1.jar</span><br /><span style="font-size:16px">log4j-1.2.14.jar</span><br /><span style="font-size:16px">mysql-connector-java-5.1.6.jar</span><br /><span style="font-size:16px">javassist-3.11.0.GA.jar 或 cglib-nodep-2.2.2.jar (根据实际情况选择性加入)</span><br /><br /><br /><strong><span style="font-size:16px">&gt; 配置文件</span></strong><br /><span style="font-size:16px">在你的java工程的classpath下建立config.properties和jdbc.cfg.xml文件</span><br /><span style="font-size:16px">config.properties内容：</span><br /><span style="font-size:16px"># 下面路径可以根据实际情况指定，为相对classpath的路径地址</span><br /><span style="font-size:16px">jdbc.config.path=jdbc.cfg.xml</span><br /><br /><span style="font-size:16px">jdbc.cfg.xml内容：</span><br /><span style="font-size:16px">&lt;?xml version='1.0' encoding="UTF-8"?&gt;</span><br /><span style="font-size:16px">&lt;jdbc-configuration&gt;</span><br /><br /><span style="font-size:16px">&nbsp; &lt;constant name="show_sql" value="true" /&gt;</span><br /><span style="font-size:16px">&nbsp; &lt;constant name="jdbc.batch_size" value="600" /&gt;</span><br /><span style="font-size:16px">&nbsp; &lt;constant name="bytecode.provider" value="cglib" /&gt;</span><br />&nbsp;<br /><span style="font-size:16px">&nbsp; &lt;connections default="simple"&gt;</span><br />&nbsp;<br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp; &lt;connection name="simple"&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.implementation"&gt;org.javaclub.jorm.jdbc.connection.impl.SimpleConnection&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.dialect"&gt;MySQLDialect&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.driver"&gt;com.mysql.jdbc.Driver&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;property  name="connection.jdbcurl"&gt;jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;amp;characterEncoding=UTF-8&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.database"&gt;test&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.username"&gt;root&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.password"&gt;root&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp; &lt;/connection&gt;</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp; &lt;connection name="c3p0"&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.implementation"&gt;org.javaclub.jorm.jdbc.connection.impl.PooledConnection&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.dialect"&gt;MySQLDialect&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.driver"&gt;com.mysql.jdbc.Driver&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;property  name="connection.jdbcurl"&gt;jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;amp;characterEncoding=UTF-8&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.database"&gt;test&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.username"&gt;root&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.password"&gt;root&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.pool.min"&gt;1&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.pool.max"&gt;8&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.test.sql"&gt;select 1&lt;/property&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp; &lt;/connection&gt;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp; &lt;/connections&gt;</span><br /><br /><span style="font-size:16px">&lt;/jdbc-configuration&gt;</span><br /><br /><br /><strong><span style="font-size:16px">&gt; 实体类User.java</span></strong><br /><span style="font-size:16px">@PK(value = "id")</span><br /><span style="font-size:16px">@Entity(table="t_user")</span><br /><span style="font-size:16px">public class User {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Id</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private int id;</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private String name;</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private String sex;</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private Integer age;</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private String career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@NoColumn</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private int kvalue;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public User() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;super();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public User(String name, String sex, Integer age, String career) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;super();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.name = name;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sex = sex;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.age = age;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.career = career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public User(Integer id, String name, String sex, Integer age, String career) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;super();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.id = id;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.name = name;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sex = sex;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.age = age;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.career = career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public int getId() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return id;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setId(int id) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.id = id;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public String getName() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return name;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setName(String name) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.name = name;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public String getSex() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return sex;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setSex(String sex) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sex = sex;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public Integer getAge() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return age;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setAge(Integer age) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.age = age;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public String getCareer() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setCareer(String career) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.career = career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public int getKvalue() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return kvalue;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setKvalue(int kvalue) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.kvalue = kvalue;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public String toString() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;StringBuffer sb = new StringBuffer();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;sb.append("[" + id + ", " + name + ", " + sex + ", " + age + ", " + career + "]");</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return sb.toString();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">}</span><br /><br /><span style="font-size:16px">这里</span><span style="font-size: 16px; background-color: #ffff00;">数据库字段和java实体类User的属性在命名上是一致的</span><span style="font-size:16px">，如果不一致，比如如果表创建sql为：</span><br /><span style="font-size:16px">CREATE TABLE `t_user` (&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `user_id` int(11) NOT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `user_name` varchar(50) DEFAULT NULL,&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `sex` char(4) DEFAULT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `col_age` int(11) DEFAULT NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `career_job` varchar(100) DEFAULT NULL, &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (`id`)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">) ENGINE=InnoDB DEFAULT CHARSET=utf8;</span><br /><br /><span style="font-size:16px">那么对应的实体User应该写成：</span><br /><span style="font-size:16px">@PK(value = "id")</span><br /><span style="font-size:16px">@Entity(table="t_user")</span><br /><span style="font-size:16px">public class User {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Id</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Column("user_id")</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private int id;</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Column("user_name")</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private String name;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;// 与数据库字段命名一致，可以不指定@Column</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private String sex;</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp; @Column("col_age")</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private Integer age;</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp; @Column("career_job")</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private String career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@NoColumn</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;private int kvalue;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public User() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;super();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public User(String name, String sex, Integer age, String career) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;super();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.name = name;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sex = sex;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.age = age;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.career = career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public User(Integer id, String name, String sex, Integer age, String career) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;super();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.id = id;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.name = name;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sex = sex;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.age = age;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.career = career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public int getId() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return id;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setId(int id) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.id = id;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public String getName() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return name;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setName(String name) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.name = name;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public String getSex() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return sex;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setSex(String sex) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sex = sex;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public Integer getAge() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return age;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setAge(Integer age) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.age = age;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public String getCareer() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setCareer(String career) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.career = career;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public int getKvalue() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return kvalue;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void setKvalue(int kvalue) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.kvalue = kvalue;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public String toString() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;StringBuffer sb = new StringBuffer();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;sb.append("[" + id + ", " + name + ", " + sex + ", " + age + ", " + career + "]");</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return sb.toString();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><br /><span style="font-size:16px">}</span><br /><br /><br /><strong><span style="font-size:16px">&gt; 对User的增删查改，UserCrudTest.java，记得引入junit-4.8.2.jar</span></strong><br /><span style="font-size:16px">public class UserCrudTest {</span><br /><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;static Session session;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@BeforeClass</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public static void before() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;session = Jorm.getSession();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@AfterClass</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public static void after() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Jorm.free();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Test</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void save_user() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;session.clean(User.class);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;User user = null;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (int i = 0; i &lt; 600; i++) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String sex = (i % 2 == 0 ? "男" : "女");</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;user = new User(Strings.fixed(5), sex, Numbers.random(98), Strings.random(8));</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;session.save(user);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Test // 批量保存</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void batch_save_user() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;session.clean(User.class);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;JdbcBatcher batcher = session.createBatcher();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;User user = null;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (int i = 0; i &lt; 600; i++) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String sex = (i % 2 == 0 ? "男" : "女");</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;user = new User(Strings.fixed(5), sex, Numbers.random(98), Strings.random(8));</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;batcher.save(user);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;batcher.execute();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Test</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void loadUser() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;User user = session.read(User.class, 1);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 这里user是一个代理对象，因为@Entity(table="t_user", lazy = true)</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(user.getCareer());// 发出查询sql</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Test</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void deletUser() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;User user = session.read(User.class, 1);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(null != user) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;session.delete(user);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;user = session.read(User.class, 1);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(user);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Test</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void test_update_proxy() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;User u;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;u = session.read(User.class, 2);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Assert.assertNotNull(u);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Assert.assertTrue(u instanceof JormProxy);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;u.setName("Gerald.Chen");</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;session.update(u);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(u.getName());</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;u = session.read(User.class, 2);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Assert.assertTrue("Gerald.Chen".equals(u.getName()));</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;@Test</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;public void queryUser() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SqlParams&lt;User&gt; params = new SqlParams&lt;User&gt;();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;params.setObjectClass(User.class);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;params.setFirstResult(8);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;params.setMaxResults(20);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;List&lt;User&gt; users = session.list(params);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(users.size());</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(users);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">}</span></p></div></div><img src ="http://www.blogjava.net/jadmin/aggbug/359182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-09-21 18:42 <a href="http://www.blogjava.net/jadmin/archive/2011/09/21/359182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发布一款精巧的Java ORM Framework</title><link>http://www.blogjava.net/jadmin/archive/2011/09/20/359087.html</link><dc:creator>jadmin</dc:creator><author>jadmin</author><pubDate>Tue, 20 Sep 2011 10:52:00 GMT</pubDate><guid>http://www.blogjava.net/jadmin/archive/2011/09/20/359087.html</guid><wfw:comment>http://www.blogjava.net/jadmin/comments/359087.html</wfw:comment><comments>http://www.blogjava.net/jadmin/archive/2011/09/20/359087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jadmin/comments/commentRss/359087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jadmin/services/trackbacks/359087.html</trackback:ping><description><![CDATA[<div><p><strong><span style="font-size:16px">&gt; 特点</span></strong><br /><span style="font-size:16px">&nbsp; 1.支持多数据源管理和配置</span><br /><span style="font-size:16px">&nbsp; 2.自动封装Entity</span><br /><span style="font-size:16px">&nbsp; 3.支持事务</span><br /><span style="font-size:16px">&nbsp; 4.支持存储过程的方便调用</span><br /><span style="font-size:16px">&nbsp; 5.支持lazy加载</span><br /><span style="font-size:16px">&nbsp; 6.支持分页查询</span><br /><span style="font-size:16px">&nbsp; 7.支持多种数据库H2,MySQL,Oracle,PostgrSQL,SQLServer</span><br /><br /><strong><span style="font-size:16px">&gt; 要求</span></strong><br /><span style="font-size:16px">&nbsp; 1.JDK 1.5 or later</span><br /><span style="font-size:16px">&nbsp; 2.如需要lazy加载，需要引入cglib或javaassit，具体可配置</span><br /><br /><strong><span style="font-size:16px">&gt; 示例</span></strong><br /><span style="font-size:16px">&nbsp; 1.添加</span><br /><span style="font-size:16px">&nbsp; Session session = Jorm.getSession();</span><br /><span style="font-size:16px">&nbsp; User u = new User("Gerald.Chen", "男", 21, "job");;</span><br /><span style="font-size:16px">&nbsp; session.save(u);</span><br /><br /><span style="font-size:16px">&nbsp; 2.删除</span><br /><span style="font-size:16px">&nbsp; session.clean(User.class);// 清空表</span><br /><span style="font-size:16px">&nbsp; session.delete(User.class, "id &gt; 100");// 指定条件删除</span><br /><br /><span style="font-size:16px">&nbsp; session.delete(user);</span><br /><br /><span style="font-size:16px">&nbsp; 3.查询</span><br /><span style="font-size:16px">&nbsp; User user = session.read(User.class, 1);// 根据主键加载</span><br /><br /><span style="font-size:16px">&nbsp; // 加载第一个</span><br /><span style="font-size:16px">&nbsp; User user = session.loadFirst(User.class, "(SELECT * FROM t_user WHERE id &gt; ?)", 88);</span><br /><br /><span style="font-size:16px">&nbsp; // 分页查询</span><br /><span style="font-size:16px">&nbsp; SqlParams&lt;User&gt; params = new SqlParams&lt;User&gt;("SELECT * FROM t_user WHERE id &gt; ?", new Object[] { 6 });</span><br /><span style="font-size:16px">&nbsp; params.setObjectClass(User.class);</span><br /><span style="font-size:16px">&nbsp; params.setFirstResult(3);</span><br /><span style="font-size:16px">&nbsp; params.setMaxResults(10);</span><br /><span style="font-size:16px">&nbsp; List&lt;User&gt; users = session.list(params);</span><br /><br /><span style="font-size:16px">&nbsp; // 查询单个属性</span><br /><span style="font-size:16px">&nbsp; String sql = "SELECT name FROM t_user WHERE id = 28";</span><br /><span style="font-size:16px">&nbsp; String name = session.queryUniqueObject(sql);</span><br /><br /><span style="font-size:16px">&nbsp; // 查询属性列表</span><br /><span style="font-size:16px">&nbsp; List&lt;String&gt; names = session.list(String.class, "SELECT name FROM t_user WHERE id &gt; ?", 200);</span><br /><span style="font-size:16px">&nbsp; List&lt;Integer&gt; ages = session.list(int.class, "SELECT age FROM t_user WHERE age &gt; 18");</span><br /><br /><span style="font-size:16px">&nbsp; 4.存储过程</span><br /><span style="font-size:16px">&nbsp; final String pro = "{? = call hello_proc(?)}";</span><br /><span style="font-size:16px">&nbsp; String r = session.call(new ProcedureCaller() {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp; public CallableStatement prepare() throws SQLException {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;CallableStatement cs = this.getSession().getConnection().prepareCall(pro);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;cs.setString(2, "World");</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;cs.registerOutParameter(1, Types.CHAR);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;return cs;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp; public String callback(CallableStatement cs) throws SQLException {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;cs.execute();</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;return cs.getString(1);</span><br /><span style="font-size:16px">&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="font-size:16px">&nbsp; });</span><br /><br /><span style="font-size:16px">&nbsp; 5.事务</span><br /><span style="font-size:16px">&nbsp; session.clean(User.class);</span><br /><span style="font-size:16px">&nbsp; User u;</span><br /><span style="font-size:16px">&nbsp; session.beginTransaction();</span><br /><span style="font-size:16px">&nbsp; try {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;for(int i = 0; i &lt; 1000; i++) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String sex = (i % 2 == 0 ? "男" : "女");</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;u = new User(Strings.fixed(6), sex, Numbers.random(100), Strings.random(16));</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;session.save(u);</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(i == 886) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; Integer.parseInt("kkk");</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;}</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;session.commit();</span><br /><span style="font-size:16px">&nbsp; } catch (Exception e) {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;session.rollback();</span><br /><span style="font-size:16px">&nbsp; } finally {</span><br /><span style="font-size:16px">&nbsp;&nbsp; &nbsp;session.endTransaction();</span><br /><span style="font-size:16px">&nbsp; }</span><br /><br /><span style="font-size:16px">这是一个完全基于JDBC的轻量java orm framework, 目标定位于使用方便,简单，后续会增加许多新的特性</span></p><p><br /></p><p>&nbsp;</p><div><span style="font-size: 16px;">项目地址：<a href="http://javaclub.sourceforge.net/jorm.html">http://javaclub.sourceforge.net/jorm.html</a><br /><br /></span></div><span style="font-size: 16px;">下载地址：<a target="_blank" href="http://sourceforge.net/projects/javaclub/files">http://sourceforge.net/projects/javaclub/files</a><br /><br /></span><p>&nbsp;</p></div><img src ="http://www.blogjava.net/jadmin/aggbug/359087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jadmin/" target="_blank">jadmin</a> 2011-09-20 18:52 <a href="http://www.blogjava.net/jadmin/archive/2011/09/20/359087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>