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
@Mapper
public 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);
}
@Mapper
public 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 配置
@Configuration
public 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"}