Springboot第一天

Springboot简介

  • Springboot是spring家族的一员,同时也对spring,springmvc,hibernate,struts2框架进行了整合,内置了Tomcat容器,使得Springboot使用起来更加快捷、简便、启动速度快等特点。

Springboot启动类(main(),启动方法之一)

@SpringBootApplication
@MapperScan(basePackages = "cn.itcast.mapper")
public class BootDemoApplication {
	public static void main(String[] args) {
    	SpringApplication.run(BootDemoApplication.class,args);
    	System.out.println("main method is running!");
 }
}

启动类中配置了 @SpringBootApplication注解,相当于拥有了 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解;
@SpringBootConfiguration启动了SpringBoot的启动配置;
@EnableAutoConfiguration是你引入什么依赖,Springboot就给你配置什么框架的配置;
@ComponentScan组件扫描器;自动扫描本包以及本包下面所有文件夹的注解;

案例一、Springboot之HelloWorld

@RestController
public class HelloController {
	@RequestMapping("hello")
	public String hello(){
    	System.out.println("hello method is running!");
    	return "hello,welcome SpringBoot Family!";
	}
}

案例二、Springboot引入DataSource(一)

自定义一个文件,比如: jdbc,properties
内容如下:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/yun6?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

自定义一个类,比如:JdbcConfig:

@Configuration // 这是一个配置类
@PropertySource(value = "classpath:application.properties")//加载外部文件
public class JdbcConfig {
	@Value(${jdbc.driverClassName})
	private String driverClassName;
	@Value( ${jdbc.url})
	private String url;
	@Value( ${jdbc.username})
	private String username;
	@Value( ${jdbc.password})
	private String password;
	
	@Bean
	public DataSource getDataSource(){
    	DruidDataSource dataSource = new DruidDataSource();
    	dataSource.setDriverClassName(driverClassName);
    	dataSource.setUrl(url);
    	dataSource.setUsername(username);
    	dataSource.setPassword(password);
    	return dataSource;
	}}

controller类:

@RestController
public class HelloController {
	@Autowired
	private DataSource dataSource;
	
	@RequestMapping("hello")
	public String hello(){
    	System.out.println("hello method is running!");
    	return "hello,welcome SpringBoot Family!";
	}
}

当application.properties文件与application.yml文件同时存在时,取两个文件中的并集

案例三、Springboot引入DataSource(二)

自定义一个application.properties文件;

创建一个类:比如:JdbcProperties类:

@Component //第三种方式
@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {

	private String driverClassName;

	private String url;

	private String username;

	private String password;
}

创建JdbcConfig类:

@Configuration
//@EnableConfigurationProperties(JdbcProperties.class)//第二种切换到第三种
public class JdbcConfig {
	@Autowired
	private JdbcProperties prop;
	@Bean
	public DataSource getDataSource(/*JdbcProperties prop*/){
    	DruidDataSource dataSource = new DruidDataSource();
    	dataSource.setDriverClassName(prop.getDriverClassName());
    	dataSource.setUrl(prop.getUrl());
    	dataSource.setUsername(prop.getUsername());
    	dataSource.setPassword(prop.getPassword());
    return dataSource;
}

案例四、Springboot引入DataSource(四)

@Configuration
public class JdbcConfig {
	@Autowired
	private JdbcProperties prop;
	@Bean
	@ConfigurationProperties(prefix = "jdbc")
	public DataSource getDataSource(){
    return new DruidDataSource();
}

yaml/yml文件

默认读取的文件是application.yaml
server:
port: 8088 #
servlet:
path: /
logging:
level: #设置debug的等级
cn.itcast: debug
org.springframework: debug
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/yun6?characterEncoding=utf-8
username: root
password: root
mybatis:
configuration:
map-underscore-to-camel-case: true #开启自动驼峰匹配模式
type-aliases-package: cn.itcast.pojo #pojo所在包别名,在xml中可以省略包名
mapper-locations: mapper/*.xml #mapperxml映射地址

pom文件

<!--springboot依赖版本管理器,有了它,可以帮我们自动依赖版本文件-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
</parent>

<dependencies>
    <!--依赖于web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--配置Alibaba的druid数据源-->
    <!--<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.6</version>
    </dependency>-->
    <!--配置lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <!--连接池-->
    <!--<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>-->

    <!--数据库驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!--mybatis-->
    <!--<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>-->
    <!--引用通用mapper之后,不需要mybatis和连接池-->
    <!--通用mapper-->
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.0.3</version>
    </dependency>
<!--Springboot测试jar-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>
--如果使用了mybatis的通用mapper,那么不需要mybatis、连接池、数据源依赖,mybatis中的通用mapper中自带的有mybatis、连接池、数据源依赖,如果手动依赖,那么会产生版本冲突。

案例五,使用mybatis的通用mapper

1、自定义pojo

@Table(name = "tb_student")//关联哪个表
public class Student {

	@Id//这是一个主键标识
	@KeySql(useGeneratedKeys = true)//每次修改后返回id
	private Integer id;

	private String name;

	private Integer age;

	@Transient//不是必须的
	private String remark;
}

2、service层

public interface StudentService {

	public void save(Student student);


	public Student findById(Integer id);
}

3、service实现类

@Service
public class StudentServiceImpl implements StudentService {

	@Autowired
	private StudentMapper mapper;
	@Transactional//为增删改加入事务
	@Override
	 public void save(Student student) {
    	mapper.insert(student);
	  }

	@Override
	public Student findById(Integer id) {
    	return mapper.selectByPrimaryKey(id);
}}

4、mapper层

//使用的是哪个pojo,泛型中就填入什么pojo
public interface StudentMapper extends Mapper<Student> {
}
  • 若使用了默认的mapper通用类,那么@MapperScan所在的包要切换到tx包

拦截器

1、自定义一个类,实现自HandlerInterceptor类并实现其中的preHandle、postHandle、afterCompletion方法。

@Slf4j//使用Slf4j注解,可以不用定义log对象,定义对象和使用@Slf4j二选一即可
public class MyInterceptor implements HandlerInterceptor {

private static final Logger log = LoggerFactory.getLogger(MyInterceptor.class);
//之前运行,前置通知
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    log.debug("preHandle method is running...");
    return true;
}
//执行相关结果和执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    log.debug("postHandle method is running...");
}

//之后运行,后置通知
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    log.debug("afterCompletion method is running...");
}}

2、自定义一个类,并实现自WebMvcConfigurer接口,重写addInterceptors方法,添加对应的拦截器,将刚刚创建的自定义Handler创建出来,并指定路径进行拦截。

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值