乐优商城第一天(Springboot)

传智博客的的新项目乐优商城,很幸运可以学新项目,哈哈哈

第一天遇到两个坑,花费了我好几个小时,值得写一波

第一个坑

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun May 20 17:19:12 CST 2018
There was an unexpected error (type=Internal Server Error, status=500).
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'note' in 'field list' ### The error may exist in com/leyou/mapper/UserMapper.java (best guess) ### The error may involve com.leyou.mapper.UserMapper.selectByPrimaryKey-Inline ### The error occurred while setting parameters ### SQL: SELECT id,user_name,password,name,age,sex,birthday,created,updated,note FROM tb_user WHERE id = ? ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'note' in 'field list' ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'note' in 'field list'


报这个错误的原因是pojo类比它对应的表中多一个字段,把哪个多余的字段删除即可。

通用mapper应该是通过pojo类生成具体的sql语句的,如果pojo类中多一个字段,那么查询的时候,这个字段就会存在于sql语句中,这样就导致了这个错误。

解决方法:删掉pojo类中多余的字段

第二个坑:

Caused by: java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.Driver

原因:springboot自带版本管理,我只需要引入相关依赖,而不用引入具体版本,没想到mysql的驱动没有加载进来,这个是万万没想到的,配置文件配置的时候也出错


这里driver是红色的,证明没有加载进来,坑啊,mysql驱动是5.1.45这个版本,我把本地库里的删了,又重新加载了一下就好了,都是泪,花费了好几个小时研究这个问题,各种清空没下载完成的都没用,没想到是下载好的完整的jar包出了问题。

解决方案:在maven的本地仓库中找到mysql驱动对应 的版本,去依赖库中删除,重新下载就好了。


进入正题,springboot入门

1.入门项目

  • 导入springboot的父启动器,起着依赖管理的作用
  • <!--springboot的父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>

  • 入门项目是一个web项目,导入web的启动器,另外jdk的版本设置为1.8
  • <!--web项目,导入mvc启动器-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
    <!--java的版本-->
    <properties>
        <java.version>1.8</java.version>
    </properties>

  • springboot启动是通过main方法的,需要一个main方法
  • @SpringBootApplication
    public class Application {
    
        public static void main(String[] args){
            SpringApplication.run(Application.class,args);
        }
    }

  • 再写一个Controller,启动main方法就可以访问资源
  • @RestController
    public class HelloController {
    
        @GetMapping("hello")
        public String hello(){
            return "hello springboot";
        }
    }
    
    其中RestController规定了返回值必须是json,相当于@ResponseBody和@controller的结合

       GetMapping相当于

  • @RequestMapping(method = RequestMethod.GET)

2.入门案例运行原理

主要原因是3个注解


@SpringBootConfiguration声明类是一个配置类

@EnableAutoConfiguration自动配置,根据依赖去猜测该配置什么

@ComponentScan注解的自动扫描,相当于之前的<context:component-scan>,如果不左任何配置的话,默认扫描的包是出现@SpringbootApplication注解的后面的包,所以一般启动类放在所有类的前面。

3.springboot是如何消灭xml的

java注解的方式

@configuration = xml文件

@Bean = <Bean>

@value = <property 属性注入> 只能注入基本的类型,不能注入复杂的类型

@PropertySource =


springboot的方式

先用一个类A来取出配置文件中的数据

@ConfigurationProperties 这个注解定义的类来封装application.properties中的数据

在配置类中通过注解引入类A

@Configuration

@EnableConfigurationProperties

在配置类中引入类A的对象有三种方式

  • 方法参数中注入
  • 构造方法注入
  • Autowired注入

通过@Bean进行属性的注入,


如果这个配置只在一处使用,那么就没必要写一个配置类,我们直接把外部配置引入到配置类中

 

4.springboot如何添加拦截器

springboot中使用拦截器,

  • 自定义一个拦截器,
  • 一个类通过实现WebMvcConfigurer并添加@Configuration,
  • 在这个类中重写   addInterceptors方法,这里还有一点巧妙的是通过@Bean的方式,将日志引入
    @Bean
    public LoginInterceptor loginInterceptor(){
        return new LoginInterceptor();
    }
    
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
    }

回顾:springmvc实现拦截器的方式

首先自定义一个拦截器

然后在配置文件有两种方式配置

<!-- 配置自定义的拦截器 -->

<mvc:interceptors>

<!-- 方式1:直接在这里配置<bean> 对所有的Controller都拦截 -->

<bean class="cn.itcast.pojo.MyInterceptor1"/>

<!-- 方式2:通过mvc:interceptor来配置,同时可以指定要拦截的路径: -->

<mvc:interceptor>

<!-- 指定要拦截的路径,这里可以写固定路径,也可以使用Ant风格通配符,/**代表就是任意层数任意路径了 -->

<mvc:mapping path="/**"/>

<bean class="cn.itcast.pojo.MyInterceptor2"/>

</mvc:interceptor>

</mvc:interceptors>

5.与mybaits整合,实现增删改查

1.引入jdbc技术的启动器

2.引入mysql的依赖,告诉springboot用的是mysql的驱动

6.Thymeleaf

一个html,既可以让前端看到静态效果,也可以让后端调试出动态效果。

使用时,需要引入启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>


其他:

1.springboot使用日志的级别

# 设置com.leyou包的日志级别为debug
logging.level.com.leyou=debug

2.jdk8新特性,接口方法的默认实现,好处是,这样减去用一个A类空实现这个接口中的方法,然后B类再继承A类这样的事情



报错:java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()


应该导下面这个包,否则会报错


@乐优商城








猜你喜欢

转载自blog.csdn.net/qpc672456416/article/details/80383852