我使用JDBI與MySQL和我有一個接口GenericDao在那裏我已經這個方法你如何用JDBI做一個通用插入?
public void insert(T entity);
如何使用流利的查詢,而不是SQLObjects實現此方法與JDBI?
是否可以使用這兩種方法之一?
handle.insert
或
handle.createQuery
我使用JDBI與MySQL和我有一個接口GenericDao在那裏我已經這個方法你如何用JDBI做一個通用插入?
public void insert(T entity);
如何使用流利的查詢,而不是SQLObjects實現此方法與JDBI?
是否可以使用這兩種方法之一?
handle.insert
或
handle.createQuery
您可以通過實現GetHandle接口得到處理。
public abstract class GenericDao<T> implements GetHandle {
public void insert(T entity) {
getHandle().insert("some sql");
};
}
我發現SQLObjects當我用SQLObjects風格的工作很好,我:
public interface GenericDao<T> {
List<T> findAll();
long insert(T t);
long update(T t);
long delete(long id);
T findNameById(long id);
}
然後我用一個抽象類將所有SQL
@RegisterMapper(VesselJDBIMapper.class)
public abstract class VesselJDBI implements Transactional<VesselJDBI>, GenericDao<Vessel> {
@SqlUpdate("UPDATE vessel SET vessel_name = :vesselName, version = version +1 WHERE vessel_id = :id" +
" AND version = :version")
public abstract long update(@BindBean Vessel vessel);
@SqlUpdate("DELETE FROM vessel WHERE vessel_id = :id")
public abstract long delete(@Bind("id") long id);
@SqlQuery("SELECT vessel_id, vessel_name, version FROM vessel WHERE vessel_id = :id")
public abstract Vessel findNameById(@Bind("id") long id);
@SqlUpdate("INSERT INTO vessel (vessel_name, version) VALUES (:vesselName, :version)")
@GetGeneratedKeys
public abstract long insert(@BindBean Vessel vessel);
@SqlQuery("SELECT vessel_id, vessel_name, version FROM vessel ORDER BY vessel_id")
public abstract List<Vessel> findAll();
}
也許這會爲某人提供解決方案。
+ 1作爲'@ BindBean',這是最通用的綁定程序。爲了完整起見,您可以將您的Vessel類的片段放在一起,以顯示SQL佔位符如何綁定到字段。 – 2015-06-23 16:06:15
這隻會是上面例子中一個普通的java對象。在我的本地代碼庫中,我使用了一個更詳盡的示例,它使用Lombok http://projectlombok.org/來保存編寫代碼。如果您想了解更多信息,請發佈新問題,並給我發一條信息或與我聯繫(請查看我的個人資料)。我不想在此帖子中添加與該問題無關的內容。 – ahus1 2015-06-23 16:32:20
如何映射屬性?因爲該實體的通用。 – dkulkarni 2015-03-26 14:57:19
你可以讓所有的實體擴展/實現一些通用的抽象類或者可以給出屬性的接口。但是如果你想做所有這些事情,你可以去找一些ORM。 – Manikandan 2015-03-27 03:55:35
是的,我選擇使用ORM – dkulkarni 2015-03-27 13:18:45