Crud controller 通用办法层面思考
- 在这篇文章之前, 我提出了一个 crud 的模板工程. 次要目标是去掉 数据库和 redis 这两层的通用代码. 在去掉这一层之后想尝试去掉 controller 类. 对这个想法进行了实现
- 我的项目地址: https://github.com/huifer/cru...
- 分支: dev
配置
依赖配置
本例为 mybatis 操作
0.0.5-Releases-hot-fix
dev 开发分支版本. 后续会批改
<dependency> <groupId>com.github.huifer</groupId> <artifactId>for-controller</artifactId> <version>0.0.5-Releases-hot-fix</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.github.huifer</groupId> <artifactId>for-mybatis</artifactId> <version>0.0.5-Releases-hot-fix</version> </dependency>
实体类配置
@CrudController(uri = "/project/int", idType = Integer.class)public class ProjectInt extends AbsEntity implements Serializable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}@CrudController(uri = "/project/str", idType = String.class)public class ProjectStr extends AbsEntity implements Serializable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
mapper
@Mapperpublic interface ProjectIntMapper extends A<Integer, ProjectInt> { @Override @Insert("INSERT INTO `project_int`(`name`) VALUES (#{name} ) ") int insertSelective(ProjectInt record); @Override @Select("select * from project_int where id = #{id,javaType=INTEGER} ") ProjectInt selectByPrimaryKey(@Param("id") Integer integer); @Override @Delete("DELETE FROM `dest`.`project_int` WHERE `id` = #{integer} ") int deleteByPrimaryKey(Integer integer); @Override @Update("UPDATE `dest`.`project_int` SET `name` = #{name} WHERE `id`= #{id} ") int updateByPrimaryKeySelective(ProjectInt record);}@Mapperpublic interface ProjectStrMapper extends A<String, ProjectStr> { @Override @Insert("INSERT INTO `dest`.`project_str`(`name`) VALUES (#{name} ) ") int insertSelective(ProjectStr record); @Override @Select("select * from project_str where id = #{integer} ") ProjectStr selectByPrimaryKey(String integer); @Override @Delete("DELETE FROM `dest`.`project_str` WHERE `id` = #{integer} ") int deleteByPrimaryKey(String integer); @Override @Update("UPDATE `dest`.`project_str` SET `name` = #{name} WHERE `id`= #{id} ") int updateByPrimaryKeySelective(ProjectStr record);}
Spring Boot 配置
@Configurationpublic class ForControllerConfig { @Bean FilterRegistrationBean myFilterRegistration() { FilterRegistrationBean frb = new FilterRegistrationBean(); frb.setFilter(new MyFilter()); frb.setUrlPatterns(Arrays.asList("/*")); return frb; } @Bean ServletRegistrationBean myServletRegistration() { ServletRegistrationBean srb = new ServletRegistrationBean(); srb.setServlet(new OcaServlet()); srb.setUrlMappings(Arrays.asList("/rest/*")); return srb; } @Bean ServletListenerRegistrationBean<ServletContextListener> myServletListener() { ServletListenerRegistrationBean<ServletContextListener> srb = new ServletListenerRegistrationBean<>(); srb.setListener(new MyServletListener()); return srb; }}public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String url = request instanceof HttpServletRequest ? ((HttpServletRequest) request).getRequestURL().toString() : "N/A"; System.out.println("from filter, processing url: " + url); chain.doFilter(request, response); } @Override public void destroy() { }}public class MyServletListener implements ServletContextListener { @Override public void contextInitialized (ServletContextEvent sce) { System.out.println("from ServletContextListener: " + " context initialized"); } @Override public void contextDestroyed (ServletContextEvent sce) { }}
- 启动类
@SpringBootApplication@EnableCrudController(scanPackages = {"com.github.huifer.ctr"})@EnableCrudTemplate(daoType= DaoType.MYBATIS)public class ForControllerApp { public static void main(String[] args) { SpringApplication.run(ForControllerApp.class, args); }}
测试方法
localhost:9123/rest/project/int/add{ "name": "312"}
localhost:9123/rest/project/int/byId{ "id": "37"}
localhost:9123/rest/project/int/editor{ "id": "37", "name":"asdasd"}
localhost:9123/rest/project/int/del{ "id": "37"}