私はMySQLでJDBIを使用しており、このメソッドがあるGenericDaoインターフェースを持っています
public void insert(T entity);
SQLObjects の代わりに流暢なクエリを使用して、JDBI でこのメソッドを実装するにはどうすればよいですか?
これのどちらかを使用することは可能ですか?
handle.insert
また
handle.createQuery
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();
}
多分それは誰かに解決策を提供するでしょう。
GetHandle インターフェイスを実装することでハンドルを取得できます。
public abstract class GenericDao<T> implements GetHandle {
public void insert(T entity) {
getHandle().insert("some sql");
};
}