package org.nutz.dao.jdbc; import java.sql.Connection; import java.util.Map; import org.nutz.dao.Dao; import org.nutz.dao.entity.Entity; import org.nutz.dao.entity.MappingField; import org.nutz.dao.sql.DaoStatement; import org.nutz.dao.sql.Pojo; import org.nutz.dao.sql.SqlType; /** * 封装各个数据库 JDBC 驱动的不同 * <p> * 这个接口的实现类的实例会被 Nutz.Dao 长期持有,所有请保证其线程安全 * * @author zozoh(zozohtnt@gmail.com) */ public interface JdbcExpert { /** * @return 当前的配置信息 */ Map<String, Object> getConf(); /** * @return 当前数据库类型,名称参见 DB 这个枚举类型 * * @see org.nutz.dao.DB */ String getDatabaseType(); /** * 根据类型创建一个 SQL 语句的实例 * * @param type * POJO 语句的 SQL 类型 * * @return 创建本数据库特有的 POJO 语句实现类 * * @see org.nutz.dao.sql.SqlType */ Pojo createPojo(SqlType type); /** * 根据实体信息,返回某实体的建表语句 * * @param en * 实体 * @return 是否创建成功 */ boolean createEntity(Dao dao, Entity<?> en); /** * 根据实体信息,返回某实体的删表语句 * * @param en * 实体 * @return 是否删除成功 */ boolean dropEntity(Dao dao, Entity<?> en); /** * 根据字段类型为其获取一个字段适配器 * * @param ef * 实体数据库映射字段 * * @return ValueAdaptor 工厂类的实例 */ ValueAdaptor getAdaptor(MappingField ef); /** * 通过访问数据库,为实体的映射字段设置约束 * <p> * 实体类在解析的时候会用到这个函数 * * @param conn * 数据库连接 * @param en * 实体 */ void setupEntityField(Connection conn, Entity<?> en); /** * 根据 Dao 查询语句,以及其翻页信息,对其进行格式化 * * @param daoStatement * Dao 语句 */ void formatQuery(DaoStatement daoStatement); Pojo fetchPojoId(Entity<?> en ,MappingField idField); boolean isSupportAutoIncrement(); }