zoukankan      html  css  js  c++  java
  • 如何使用VS Code编写Spring Boot (第二弹)

    本篇文章是续《如何使用VS Code编写Spring Boot》 之后,结合自己.net经验捣鼓的小demo,一个简单的CRUD,对于习惯了VS操作模式的.net人员非常方便,强大的智能提示,简单又干净,一起开启愉快的java编程之旅吧。

    一.环境搭建

    请移步《如何使用VS Code编写Spring Boot》 ,当页面输出Hello World 就算成功啦

    二.熟悉Spring注解,跟路由

    Spring真的是将注解用到了极致,能一个注解搞定的东西,从来不罗嗦,熟练的使用这些注解不但减轻了代码工作量,而且可读性更高,这里直接放图了,我也是用到哪些百度哪些

    路由方面直接在注解里定义就可以了,比较方便, 在.net里mvc,webapi 都可以全局配置,我想java应该也可以的,这里就不纠结了

    三.加个过滤器,方便以后记录日志,验证权限什么的

    百度了一下,这个就直接抄了,Spring已经默认给实现了过滤器,大致执行流程是  初始化->action执行前->action执行后->注销过滤器

    public class LogCostFilter implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            //初始化
        }
     
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest) servletRequest;
            String requestURI = req.getRequestURI();
            System.out.println("--------------------->过滤器开始:请求地址"+requestURI);
            if(requestURI.contains("test")){
                //重定向
                servletRequest.getRequestDispatcher("/hello").forward(servletRequest, servletResponse);
            }else{
                filterChain.doFilter(servletRequest, servletResponse);
            }
            System.out.println("--------------------->过滤器结束:请求地址"+requestURI);
        }
     
        @Override
        public void destroy() {
            //注销
        }
    
    } 

    写好过滤器后,再把过滤加载进去,这里也是直接抄,大致可以看明白触发条件,加载的过滤器名称,猜测应该可以加载多个过滤器,以后可以根据业务分开写不同的过滤器了

    @Configuration
    public class FilterConfig {
     
        @Bean
        public FilterRegistrationBean registFilter() {
            FilterRegistrationBean registration = new FilterRegistrationBean();
            registration.setFilter(new LogCostFilter());
            registration.addUrlPatterns("/*");
            registration.setName("LogCostFilter");
            registration.setOrder(1);
            return registration;
        }
     
    }

    四.整个ORM,完成简单的CURD

    现在java里最流行的orm应该是mybatis了,我也想整合这个来着,但是需要点学习成本,为了求快,先整个简单的jpa,因为这个跟EF比较相似,上手也简单,这里放我遇到的一些坑

    4.1不同包的数据类型不匹配

     

    因为java里有很多时间类型,导错了包导致

    4.2数据源类型错误

    这里引用alibaba的数据源类型

             <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.9</version>
             </dependency>
    spring.datasource.type = com.alibaba.druid.pool.DruidDataSource

     4.3扫描不到entity类

    在程序启动时,手动加上要扫描实体类的包

    @SpringBootApplication
    @EntityScan("com.example.demo.entity") //就是这句
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
    }

     4.4在花了一个下午的时间解决掉这些问题后,终于可以开心的使用jpa访问数据库了,但是奇葩的问题又来了,因为我表名是User, 操作的时候它自动给我创建了一个user表,并把数据插入了进去,懒得问人了,一群表面兄弟,直接百度

    #区分表名大小写
    spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

    五.搭建一个简单的三层

    完成了前面的步奏,可以直接在控制器里调用repository层,实现crud,但是这显然是不对的,我应该加个service层,哪怕是贫血的,这样业务可以集中处理,方便维护

    在service层直接调用repository时遇到一个问题,一直语法报错,卡了很久,原来使用自定义的方法时,必须在repository里定义接口,不能直接拿JpaRepository的接口,简单的优化了一下,结构如图

    项目已开源在github, 地址:https://github.com/wmowm/demo

  • 相关阅读:
    android逆向奇技淫巧五:x音fiddler抓包分析协议字段
    windows:3环自行加载PE文件实现进程隐藏
    android逆向奇技淫巧四:模拟器检测和反检测
    android逆向奇技淫巧三:MT管理器替代android killer修改和重新编译smail代码/frida hook 更改so层代码
    windows运算符和数据类型重载反CE查询搜索
    android逆向奇技淫巧二:uiautomatorviewer&method profiling定位x音java层的关键代码和方法
    android逆向奇技淫巧一:去掉开屏广告
    xx课堂m3u8加密视频下载
    Python接口自动化之logging日志
    Python接口自动化之pymysql数据库操作
  • 原文地址:https://www.cnblogs.com/tibos/p/11103897.html
Copyright © 2011-2022 走看看