VueBlog

摘要:
1.在数据库中创建表时:时间戳有两个属性:CURRENT_timestamp和ONUPDATECURRENT_ timestamp:1.CURRENT_timestamp当要插入数据库时,如果一个时间戳字段属性设置为CURRENT_IMESTAMP,则无论此字段中的设置值如何,都将插入当前系统时间。2.更新当前_

1、数据库建表时:

timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下:

1.CURRENT_TIMESTAMP 

当要向数据库执行insert操作时,如果有个timestamp字段属性设为 

CURRENT_TIMESTAMP,则无论这个字段有木有set值都插入当前系统时间 

2.ON UPDATE CURRENT_TIMESTAMP

当执行update操作是,并且字段有ON UPDATE CURRENT_TIMESTAMP属性。则字段无论值有没有变化,他的值也会跟着更新为当前UPDATE操作时的时间。

2、springboot的@Configuration

作用:替代以前的applicationContext.xml文件,完成spring容器的初始化。

例子1@Configuration+@ComponentScan

作用:功能类似于在applicationContext.xml文件中配置组件扫描器。在定义各级bean时,使用@Controoler,@Service,@Component等注释,就可以自动完成spring容器对Bean的装载。

复制代码
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/*
配置器
 */
@Configuration
@ComponentScan("com.yrc.test4")
public class MyConfig {
}

例子2::@Configuration+@Bean

作用::功能类似于在applicationContext.xml文件手动注册Bean。此时在各级Bean中需要添加setter方法,

复制代码
@Configuration
public class MyConfig {
    @Bean
    public FunctionService functionService() {
        return new FunctionService();
    }

    @Bean
    public UseFunctionService useFunctionService(FunctionService functionService) {
        UseFunctionService useFunctionService = new UseFunctionService();
        useFunctionService.setFunctionService(functionService);
        return useFunctionService;
    }
}
复制代码

 例子3:@Configuration+@ComponentScan+@EnableAspectJAutoProxy

作用:实现AOP配置,@EnableAspectJAutoProxy开启自动代理

@Configuration
@ComponentScan("com.yrc.test6")
@EnableAspectJAutoProxy
public class MyConfig {
}

springboot推荐使用用java代码的形式申明注册bean。 
@Configuration注解可以用java代码的形式实现spring中xml配置文件配置的效果。

@Configuration
public class TestMybaitsConf {
 
    @Bean
    public DataSource dataSource() {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        try {
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql://192.168.100.25:6660/TXSMS?useUnicode=true&characterEncoding=utf-8");
            dataSource.setUser("root");
            dataSource.setPassword("123456");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return dataSource;
    }
 
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactory factory = null;
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        bean.setConfigLocation(resolver.getResource("classpath:mybatis.xml"));
        try {
            factory = bean.getObject();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return factory;
    }
 
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
 
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

也可以使用xml注册bean

@Configuration
@ImportResource("classpath:spring-mybatis.xml")
public class TestMybaitsConf {
 

3、ComponentScan注解

做的事情就是告诉Spring从哪里找到bean

由你来定义哪些包需要被扫描。一旦你指定了,Spring将会将在被指定的包及其下级包(sub packages)中寻找bean

下面分别介绍在Spring Boot项目和非Spring Boot项目(如简单的JSP/Servlet或者Spring MVC应用)中如何定义Component Scan

Spring Boot项目
总结:

  1. 如果你的其他包都在使用了@SpringBootApplication注解的main
    app所在的包及其下级包,则你什么都不用做,SpringBoot会自动帮你把其他包都扫描了
  2. 如果你有一些bean所在的包,不在main
    app的包及其下级包,那么你需要手动加上@ComponentScan注解并指定那个bean所在的包

举个例子,看下面定义的类

package com.demo.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        ApplicationContext applicationContext = 
                SpringApplication.run(SpringbootApplication .class, args);

        for (String name : applicationContext.getBeanDefinitionNames()) {
            System.out.println(name);
        }
    }
}

类 SpringbootApplication 在com.demo.springboot包下,这个类使用了@SpringBootApplication注解,该注解定义了Spring将自动扫描包com.demo.springboot及其子包下的bean

如果你项目中所有的类都定义在com.demo.springboot包及其子包下,那你不需要做任何事

但假如你一个类定义在包com.demo.somethingelse下,则你需要将这个新包也纳入扫描的范围,有两个方案可以达到这个目的。

方案1
定义@CoponentScan(“com.demo”)

这么做扫描的范围扩大到整个父包com.demo

@ComponentScan(“com.demo”)
@SpringBootApplication
public class SpringbootApplication {

方案2

定义分别扫描两个包
@ComponentScan({“com.demo.springboot”,”com.demo.somethingelse”})

@ComponentScan({"com.demo.springboot","com.demo.somethingelse"})
@SpringBootApplication
public class SpringbootApplication {

特别注意一下:如果使用了方案2,如果仅仅只写@ComponentScan({"com.demo.somethingelse"})将导致com.demo.springboot包下的类无法被扫描到(框架原始的默认扫描效果无效了)

4、@MapperScan()

在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper注解,将mapper注入到Spring,但是如果每一个mapper都添加@mapper注解会很麻烦,这时可以使用@MapperScan注解来扫描包。

经测试发现,@MapperScan注解只会扫描包中的接口,不会扫描类,所以可以在包中写Provider类。

@MapperScan("com.demo.mapper"):扫描指定包中的接口

@MapperScan("com.demo..mapper"):一个代表任意字符串,但只代表一级包,比如可以扫到com.demo.aaa.mapper,不能扫到com.demo.aaa.bbb.mapper

@MapperScan("com.demo.*.mapper"):两个代表任意个包,比如可以扫到com.demo.aaa.mapper,也可以扫到com.demo.aaa.bbb.mapper

在SpringBoot中,除了使用@ConfigurationProperties注入属性的值,还可以使用Spring的底层注解@Value注入属性的值。

@Component

public class Person {

    @Value("${person.last-name}")

    private String lastName;

    private Integer age;

    private Boolean boss;

    private Date birth;

}

这个两个注解都能注入属性的值,那么这两个注解的区别是什么?

@ConfigurationProperties能够批量注入配置文件的属性。

@Value只能一个个指定。

@ConfigurationProperties支持松散绑定。

@ConfigurationProperties(prefix = "person"),只需要指定一个前缀,就能绑定有这个前缀的所有属性值。

@Value支持SpringEl的语法。@ConfigurationProperties不支持SpringEl的语法。

@ConfigurationProperties还支持JSR303进行配置文件值及校验。

@Slf4j的使用

https://www.cnblogs.com/sxdcgaq8080/p/11288213.html

@RestControllerAdvice

https://www.jianshu.com/p/47aeeba6414c

@ResponseStatus

自定义返回状态码

https://www.cnblogs.com/fnlingnzb-learner/p/10685651.html

跨域问题

https://blog.csdn.net/dreamcatcher1314/article/details/78652884

解决方案

https://blog.csdn.net/zhaokejin521/article/details/81007884

@DateTimeFormat与@JsonFormat 日期转换

 https://www.cnblogs.com/mracale/p/9828346.html

5、mybatis-plus入门:
6、lombok基本使用:
7、springboot异常关闭退出:
使用任务管理器停止进程。
8、shiro与jwt使用:
 

免责声明:文章转载自《VueBlog》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Delphi repeat Until 运用JetBrains系列破解方法(以idea为主)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Unsatisfied dependency expressed through method 'shirFilter' parameter 0 异常排查

最近在sprootboot的项目中将使用mybatisplus框架中的代码生成模块中,执行完代码生成程序以后,运行程序后报一下错误:org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'shirFilter' defi...

Spring整合Hessian访问远程服务

声明:该文章转载自Spring整合Hessian访问远程服务,本人搬过来只是为了记录下学习Hessian的过程,忘此博主理解,在此感谢,等本人有能力了再学一些原创的东东,本人实践了下,hessianServer项目不是web project,由于较菜,花了一个下午才把java project转换成为web project。 项目下载: hessianSer...

SpringBoot+Mybatis---这一篇就够了!

typora-copy-images-to: SpringBoot+Mybatisimages SpringBoot整合MyBatis ------ 既然你都开始整合Mybatis了,我相信基本的SpringBoot项目创建你自己肯定是可以搞定的,所以我在这里就不多赘述了,话不多B,让我们直奔主题 MyBatis---半自动ORM框架 现如今,常见的持久...

SpringBoot整合Mybatis-Plus报错org.apache.ibatis.binding.BindingException

SpringBoot整合Mybatis-Plus报错org.apache.ibatis.binding.BindingException Mapper接口,被Spring注入后,却无法正常的使用mapper.xml的sql;你的接口已经成功的被扫描到,但是当Spring尝试注入一个代理(MyBatista实现)的实现类后,却无法正常使用。这里的可能发生的情...

多数据源切换-Druid

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qq_37279783/article/details/82013702 这是实际应用场景中的多数据源切换案例 逻辑思路如下: 1.系统初始化,加载所有数据库中配置的数据源,加载进去spring容器...

Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存

转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6956206.html  前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(七)——MyBatis延迟加载 1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据库压力,提高数据库性能。 mybatis提供一级缓存和二级缓存。 一级缓存...