乐优商城第一天(Springboot)

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

我们是第一期学到乐优商城的,真的好爽。当得到消息,我们第一个项目是乐优商城的时候,我都激动死了,感觉可以学到时髦的springboot和springcloud真是再好不过的事情。可是,我们班有些人竟然说自己是小白鼠,可是在我看来,这是天大的好事。幸好,最后上面计划没有改变。我还是如愿上到了乐优商城。

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

第一个坑

 

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的父启动器,起着依赖管理的作用
  • 
    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.0.RELEASE
    
  • 入门项目是一个web项目,导入web的启动器,另外jdk的版本设置为1.8
  • 
    
        
            org.springframework.boot
            spring-boot-starter-web
        
    
    
    
    
        1.8
    
  • 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的结合
  • 乐优商城第一天(Springboot)_第1张图片

       GetMapping相当于

 

  • @RequestMapping(method = RequestMethod.GET)

2.入门案例运行原理

主要原因是3个注解

乐优商城第一天(Springboot)_第2张图片

@SpringBootConfiguration声明类是一个配置类

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

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

3.springboot是如何消灭xml的

java注解的方式

@configuration = xml文件

@Bean =

@value = 只能注入基本的类型,不能注入复杂的类型

@PropertySource =

 

springboot的方式

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

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

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

@Configuration

@EnableConfigurationProperties

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

 

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

乐优商城第一天(Springboot)_第3张图片

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

乐优商城第一天(Springboot)_第4张图片

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

 乐优商城第一天(Springboot)_第5张图片

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>

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

<mvc:interceptor>

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

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

mvc:interceptor>

mvc:interceptors>

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

1.引入jdbc技术的启动器

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

 

6.Thymeleaf

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

使用时,需要引入启动器


    org.springframework.boot
    spring-boot-starter-thymeleaf

 

其他:

 

1.springboot使用日志的级别

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

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

乐优商城第一天(Springboot)_第6张图片

 

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

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

@乐优商城

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(乐优商城leyou.com)