{ "Repository": { "scope": "java", "prefix": "repository", "body": [ "package ${1:base package}.${2:context}.domain.model.${3:aggregateroot};", "", "import java.util.List;", "", "import xyz.zhouxy.plusone.domain.IRepository;", "", "public interface ${4:AggregateRoot}Repository extends IRepository<${4:AggregateRoot}, ${5:ID}> {", "", " List<${4:AggregateRoot}> findAll();", "}", ] }, "RepositoryImplTemplate": { "scope": "java", "prefix": "repoImplTemplate", "body": [ "@Repository", "public class ${1:Entity}RepositoryImpl extends JdbcRepositorySupport<${1:Entity}, Long> implements ${1:Entity}Repository {", "", "\t// private final ${1:Entity}RoleRefDAO ${3:entity}RoleDAO;", "", "\tpublic ${1:Entity}RepositoryImpl(@Nonnull NamedParameterJdbcTemplate namedParameterJdbcTemplate) {", "\t\tsuper(namedParameterJdbcTemplate);", "\t\t// this.${3:entity}RoleDAO = new ${1:Entity}RoleRefDAO(namedParameterJdbcTemplate);", "\t}", "", "\t/**", "\t * @DefinedIn {@link JdbcRepositorySupport}", "\t */", "\t@Override", "\tprotected final void doDelete(@Nonnull ${1:Entity} entity) {", "\t\tint i = update(\"\"\"", "\t\t\t\tUPDATE ${2:table_name} SET deleted = id, \"version\" = \"version\" + 1", "\t\t\t\tWHERE id = :id AND deleted = 0 AND \"version\" = :version", "\t\t\t\t\"\"\",", "\t\t\t\tnew MapSqlParameterSource()", "\t\t\t\t\t\t.addValue(\"id\", entity.getId().orElseThrow())", "\t\t\t\t\t\t.addValue(\"version\", entity.getVersion()));", "\t\tassertUpdateOneRow(i);", "\t}", "", "\t/**", "\t * @DefinedIn {@link JdbcRepositorySupport}", "\t */", "\t@Override", "\tprotected final Optional<${1:Entity}> doFindById(@Nonnull Long id) {", "\t\treturn queryForObject(\"\"\"", "\t\t\t\tSELECT", "\t\t\t\t\tid, ..., \"version\"", "\t\t\t\tFROM ${2:table_name}", "\t\t\t\tWHERE id = :id AND deleted = 0", "\t\t\t\t\"\"\",", "\t\t\t\t\"id\", id);", "\t}", "", "\t/**", "\t * @DefinedIn {@link IRepository}", "\t */", "\t@Override", "\tpublic boolean exists(Long id) {", "\t\treturn queryForBool(\"SELECT EXISTS (SELECT 1 FROM ${2:table_name} WHERE id = :id AND deleted = 0 LIMIT 1)\",", "\t\t\t\t\"id\", id);", "\t}", "", "\t/**", "\t * @DefinedIn {@link JdbcRepositorySupport}", "\t */", "\t@Override", "\tprotected final ${1:Entity} doInsert(@Nonnull ${1:Entity} entity) {", "\t\tlong id = IdUtil.getSnowflakeNextId();", "\t\tint i = update(\"\"\"", "\t\t\t\tINSERT INTO ${2:table_name}", "\t\t\t\t\t(id, ... created_by, create_time)", "\t\t\t\tVALUES", "\t\t\t\t\t(:id, ..., :createdBy, :createTime)", "\t\t\t\t\"\"\",", "\t\t\t\tgenerateParamSource(id, entity));", "\t\tassertUpdateOneRow(i);", "\t\t// this.${3:entity}RoleDAO.insert${1:Entity}RoleRefs(id, entity.getRoleIds());", "\t\treturn find(id).orElseThrow();", "\t}", "", "\t/**", "\t * @DefinedIn {@link JdbcRepositorySupport}", "\t */", "\t@Override", "\tprotected final ${1:Entity} doUpdate(@Nonnull ${1:Entity} entity) {", "\t\tint i = update(\"\"\"", "\t\t\t\tUPDATE ${2:table_name}", "\t\t\t\tSET ...", "\t\t\t\t\t\"updated_by\" = :updatedBy,", "\t\t\t\t\t\"update_time\" = :updateTime,", "\t\t\t\t\t\"version\" = \"version\" + 1", "\t\t\t\tWHERE id = :id AND deleted = 0 AND \"version\" = :version", "\t\t\t\t\"\"\",", "\t\t\t\tgenerateParamSource(entity));", "\t\tassertUpdateOneRow(i);", "\t\t// this.${3:entity}RoleDAO.save${1:Entity}RoleRefs(entity);", "\t\treturn find(entity.getId().orElseThrow()).orElseThrow();", "\t}", "", "\t/**", "\t * @DefinedIn {@link JdbcEntityDaoSupport}", "\t */", "\t@Override", "\tprotected final ${1:Entity} mapRow(ResultSet rs) throws SQLException {", "\t\tlong id = rs.getLong(\"id\");", "", "\t\treturn new ${1:Entity}(", "\t\t\t\tid,", "\t\t\t\t...", "\t\t\t\trs.getLong(\"created_by\"),", "\t\t\t\trs.getLong(\"updated_by\"),", "\t\t\t\trs.getLong(\"version\"));", "\t}", "", "\t/**", "\t * @DefinedIn {@link JdbcRepositorySupport}", "\t */", "\t@Override", "\tprotected final SqlParameterSource generateParamSource(Long id, @Nonnull ${1:Entity} entity) {", "\t\tLocalDateTime now = LocalDateTime.now();", "\t\t", "\t\treturn new MapSqlParameterSource()", "\t\t\t\t.addValue(\"id\", id)", "\t\t\t\t...", "\t\t\t\t.addValue(\"createdBy\", entity.getCreatedBy())", "\t\t\t\t.addValue(\"createTime\", now)", "\t\t\t\t.addValue(\"updatedBy\", entity.getUpdatedBy())", "\t\t\t\t.addValue(\"updateTime\", now)", "\t\t\t\t.addValue(\"version\", entity.getVersion());", "\t}", "", "}", "", ] } }