springboot零配置

使用模板创建一个普通的Maven的Web项目

1.引jar包

<dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.11</version>
     <scope>test</scope>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
     <version>5.3.6</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-tx</artifactId>
     <version>5.3.14</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-jdbc</artifactId>
     <version>5.3.14</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
   <dependency>
     <groupId>com.mchange</groupId>
     <artifactId>c3p0</artifactId>
     <version>0.9.5.5</version>
   </dependency>
   <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.47</version>
   </dependency>
   <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>3.5.7</version>
   </dependency>
   <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis-spring</artifactId>
     <version>2.0.6</version>
   </dependency>

   <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>4.0.1</version>
   </dependency>
 </dependencies>

2.书写application.properties

spring.datasource.driver=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test2
spring.datasource.username=root
spring.datasource.password=123456

3.书写实体类读取配置文件的值

package com.zhuoyue.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import java.util.Objects;

@Configuration
@PropertySource("classpath:application.properties")
public class DataSourceProperties {
   @Value("${spring.datasource.driver}")
   private String driver;
   @Value("${spring.datasource.url}")
   private String url;
   @Value("${spring.datasource.username}")
   private String username;
   @Value("${spring.datasource.password}")
   private String password;

   public String getDriver() {
       return driver;
  }

   public void setDriver(String driver) {
       this.driver = driver;
  }

   public String getUrl() {
       return url;
  }

   public void setUrl(String url) {
       this.url = url;
  }

   public String getUsername() {
       return username;
  }

   public void setUsername(String username) {
       this.username = username;
  }

   public String getPassword() {
       return password;
  }

   public void setPassword(String password) {
       this.password = password;
  }

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;
       DataSourceProperties that = (DataSourceProperties) o;
       return Objects.equals(driver, that.driver) && Objects.equals(url, that.url) && Objects.equals(username, that.username) && Objects.equals(password, that.password);
  }

   @Override
   public int hashCode() {
       return Objects.hash(driver, url, username, password);
  }

   @Override
   public String toString() {
       return "DataSourceProperties{" +
               "driver='" + driver + '\'' +
               ", url='" + url + '\'' +
               ", name='" + username + '\'' +
               ", password='" + password + '\'' +
               '}';
  }
}

3.创建配置类SpringBootConfig继承AbstractAnnotationConfigDispatcherServletInitializer

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringBootConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
   @Override
   protected Class<?>[] getRootConfigClasses() {
       return new Class[0];
  }

   @Override
   protected Class<?>[] getServletConfigClasses() {
       return new Class[0];
  }

   @Override
   protected String[] getServletMappings() {
       return new String[0];
  }
}

4.书写数据库配置


import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

@Configuration
@MapperScan("com.zhuoyue.mapper")
@ComponentScan(
       basePackages = {"com.zhuoyue"},
       excludeFilters = {
               @ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class, RestController.class})
      }
)
public class BaseConf {

   @Autowired
   DataSourceProperties dp;
   @Bean(value = "dataSources")
   public DataSource dataSource() throws PropertyVetoException {
       ComboPooledDataSource dataSource = new ComboPooledDataSource();
       dataSource.setDriverClass(dp.getDriver());
       dataSource.setJdbcUrl(dp.getUrl());
       dataSource.setUser(dp.getUsername());
       dataSource.setPassword(dp.getPassword());
       return dataSource;
  }
   @Bean
   public SqlSessionFactory sqlSessionFactory() throws Exception {
       SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
       sqlSessionFactoryBean.setDataSource(dataSource());
       return sqlSessionFactoryBean.getObject();
  }
}

5.书写Web配置


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(
       basePackages = {"com.zhuoyue"},
       includeFilters = {
               @ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class, RestController.class})
      }
)
public class WebConf implements WebMvcConfigurer {
   @Bean
   public InternalResourceViewResolver view(){
       InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
       viewResolver.setPrefix("/");
       viewResolver.setSuffix(".jsp");
       return viewResolver;
  }
}

6.修改配置类SpringBootConfig

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringBootConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
   //数据库相关
   @Override
   protected Class<?>[] getRootConfigClasses() {
       return new Class[]{BaseConf.class};
  }
   //web 类
   @Override
   protected Class<?>[] getServletConfigClasses() {
       return new Class[]{WebConf.class};
  }

   @Override
   protected String[] getServletMappings() {
       return new String[]{"/"};
  }
}

测试:

新建DeptPO


public class DeptPO {
   private Long deptno;
   private String dname;
   private String loc;

   public DeptPO(Long deptno, String dname, String loc) {
       this.deptno = deptno;
       this.dname = dname;
       this.loc = loc;
  }

   public DeptPO() {
  }

   public Long getDeptno() {
       return deptno;
  }

   public void setDeptno(Long deptno) {
       this.deptno = deptno;
  }

   public String getDname() {
       return dname;
  }

   public void setDname(String dname) {
       this.dname = dname;
  }

   public String getLoc() {
       return loc;
  }

   public void setLoc(String loc) {
       this.loc = loc;
  }

   @Override
   public String toString() {
       return "DeptPO{" +
               "deptno=" + deptno +
               ", dname='" + dname + '\'' +
               ", loc='" + loc + '\'' +
               '}';
  }
}

新建DeptMapper


import com.zhuoyue.po.DeptPO;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface DeptMapper {

@Select("select * from dept")
List<DeptPO> findAll();
}

新建DeptController

import com.zhuoyue.po.DeptPO;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface DeptMapper {

@Select("select * from dept")
List<DeptPO> findAll();
}