传智博客的的新项目乐优商城,很幸运可以学新项目,哈哈哈
第一天遇到两个坑,花费了我好几个小时,值得写一波
第一个坑:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
报这个错误的原因是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的结合
- @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
并添加 - 在这个类中重写 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>()
应该导下面这个包,否则会报错
@乐优商城