もう一つの繰り返しホイール、O/R Mappingキットkamike.dbをGithubに公開
他のパッケージへの参照が多く削除されました.これで最小のバージョンになるはずです.
索性opensource,LGPLプロトコル、皆さんの試用を歓迎します.これの最大の利点は、フレームワークではなくツールなので、標準的なJDBCやpreparedstatementと組み合わせるとスムーズで、jdbcの書き方の作業量を大幅に削減できます.
しかし、個人的には、書き込み用ormは、適切なときにバインドデータのDTOのコードを少し読むことをお勧めします.だから、GenericSelectクラスとGenericUpdateのrawSql関数を提供しています.whereのsqlを自分でつづるのに便利です.複雑なselectクエリーに遭遇しました.みんなは期待しないでください.実はhibernateもnutzDAOも期待できません.
このキットは、読み書き分離の思想を徹底しており、読み取りが実現すればGenericReaderを継承し、書き込みが実現すればGenericWriterを継承する必要がある.
そして暇な卵が痛くて、自動的にテーブルやデータベースを作成しました.具体的なコードはGenericCreatorを参照してください.
しかし、中に依存しているguavaは、これはテストに使われています.実際に使うと削除できます.
ところで、非同期のguavaのAsyncEventBus+Executorsで新FixedThreadPool()+CountDownLatch()はマルチスレッドのテストを行い、非常に効率的で、強くお勧めします.
githubアドレス:
https://github.com/hubinix/com.kamike.db
さっき更新したばかりで、いくつかのバグを修正しました.
依存パッケージ:
以下に具体的な実装を貼る:githubのcomにコードがある.kami.consoleバッグの下
最も面倒なSelect操作については、以下を参照してください.
BaseReaderを継承したオブジェクトを新規作成し、自分のDAOでfind(TestTable)の実装を参照する方法を具体的に説明します.このfind(TestTable)は単なる例であり、実際の意味はありません.ここではfindByXXXのメソッドを任意に追加することもできます.
次に、ソリッドオブジェクト定義を行います.
次に、GenericSelectに必要ないくつかのオブジェクトnewを実装する方法について、GenericSelectを再ロードします.万悪のJava半吊り型.
そして呼び出しです.
索性opensource,LGPLプロトコル、皆さんの試用を歓迎します.これの最大の利点は、フレームワークではなくツールなので、標準的なJDBCやpreparedstatementと組み合わせるとスムーズで、jdbcの書き方の作業量を大幅に削減できます.
しかし、個人的には、書き込み用ormは、適切なときにバインドデータのDTOのコードを少し読むことをお勧めします.だから、GenericSelectクラスとGenericUpdateのrawSql関数を提供しています.whereのsqlを自分でつづるのに便利です.複雑なselectクエリーに遭遇しました.みんなは期待しないでください.実はhibernateもnutzDAOも期待できません.
このキットは、読み書き分離の思想を徹底しており、読み取りが実現すればGenericReaderを継承し、書き込みが実現すればGenericWriterを継承する必要がある.
そして暇な卵が痛くて、自動的にテーブルやデータベースを作成しました.具体的なコードはGenericCreatorを参照してください.
しかし、中に依存しているguavaは、これはテストに使われています.実際に使うと削除できます.
ところで、非同期のguavaのAsyncEventBus+Executorsで新FixedThreadPool()+CountDownLatch()はマルチスレッドのテストを行い、非常に効率的で、強くお勧めします.
githubアドレス:
https://github.com/hubinix/com.kamike.db
さっき更新したばかりで、いくつかのバグを修正しました.
依存パッケージ:
c3p0-0.9.2.1
cos-26Dec2008
guava-15.0
mchange-commons-java-0.2.3.4
mysql-connector-java-5.1.18-bin
以下に具体的な実装を貼る:githubのcomにコードがある.kami.consoleバッグの下
最も面倒なSelect操作については、以下を参照してください.
BaseReaderを継承したオブジェクトを新規作成し、自分のDAOでfind(TestTable)の実装を参照する方法を具体的に説明します.このfind(TestTable)は単なる例であり、実際の意味はありません.ここではfindByXXXのメソッドを任意に追加することもできます.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.kami.console;
import com.kamike.db.SysDbInst;
import com.kamike.db.generic.BaseReader;
import com.kamike.db.generic.GenericSelect;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author THiNk
*/
public class TestTableReader extends BaseReader<TestTable> {
public TestTableReader(String dbName) {
super(dbName);
}
@Override
public GenericSelect<TestTable> createSelect() {
return new TestTableSelect();
}
@Override
public GenericSelect<TestTable> createSelect(TestTable t) {
return new TestTableSelect(t);
}
public long count(T t) {
GenericSelect<TestTable> select = createSelect();
ResultSet rs = null;
PreparedStatement ps = null;
Connection conn = null;
long ret = 0;
try {
conn = SysDbInst.getInstance().getDatabase().getSingleConnection();
ps = conn.prepareStatement(select.countSQL(select.rawSql(dbName)+ "where t.count=? "), ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ps.setLong(1, t.getCount());// , , 。
rs = ps.executeQuery();
ret = select.count(rs);
} catch (Exception e) {
ret =0;
System.out.println(this.getClass().getName() + e.toString());
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException ex) {
Logger.getLogger(BaseReader.class.getName()).log(Level.SEVERE, null, ex);
}
}
return ret;
}
@Override
public ArrayList<TestTable> find(TestTable t) {
GenericSelect<TestTable> select = createSelect();
ResultSet rs = null;
PreparedStatement ps = null;
Connection conn = null;
ArrayList<TestTable> ret = null;
try {
conn = SysDbInst.getInstance().getDatabase().getSingleConnection();
ps = conn.prepareStatement(select.rawSql(dbName) + "where t.count=? ", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ps.setLong(1, t.getCount());// , , 。
rs = ps.executeQuery();
ret = select.fetch(rs);
} catch (Exception e) {
ret = new ArrayList<>();
System.out.println(this.getClass().getName() + e.toString());
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException ex) {
Logger.getLogger(BaseReader.class.getName()).log(Level.SEVERE, null, ex);
}
}
return ret;
}
}
次に、ソリッドオブジェクト定義を行います.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.kami.console;
import com.kamike.db.generic.FieldLength;
import com.kamike.db.generic.FieldName;
import com.kamike.db.generic.Id;
import com.kamike.db.generic.TableName;
import java.util.Date;
/**
*
* @author THiNk
*/
@TableName("test_table")
public class TestTable {
@Id
@FieldName("id")
@FieldLength(64)
private String id;
@FieldName("count")
private long count;
@FieldName("name")
@FieldLength(255)
private String name;
@FieldName("ready")
private boolean ready;
@FieldName("create_date")
private Date createDate;
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the count
*/
public long getCount() {
return count;
}
/**
* @param count the count to set
*/
public void setCount(long count) {
this.count = count;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the ready
*/
public boolean isReady() {
return ready;
}
/**
* @param ready the ready to set
*/
public void setReady(boolean ready) {
this.ready = ready;
}
/**
* @return the createDate
*/
public Date getCreateDate() {
return createDate;
}
/**
* @param createDate the createDate to set
*/
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}
次に、GenericSelectに必要ないくつかのオブジェクトnewを実装する方法について、GenericSelectを再ロードします.万悪のJava半吊り型.
/*
* new。。 , ,
*/
package com.kami.console;
import com.kamike.db.generic.GenericSelect;
/**
*
* @author THiNk
*/
public class TestTableSelect extends GenericSelect<TestTable> {
public TestTableSelect(TestTable t) {
super(t);
}
public TestTableSelect() {
super();
}
@Override
public TestTable create() {
return new TestTable();
}
}
そして呼び出しです.
//
TestTableReader tts=new TestTableReader("kamike");
TestTable template=new TestTable();
template.setCount(500);
ArrayList<TestTable> testList=tts.find(template);