天天看點

springboot入門兩種搭建解析,通用mapper使用,MBG,lombokspringboot

springboot

1.springboot的概念

Spring Boot是由Pivotal團隊提供的全新架構,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該架構使用了特定的方式來進行配置,進而使開發人員不再需要定義樣闆化的配置.通過這種方式,Spring Boot緻力于在蓬勃發展的快速應用開發領域(rapid application development)成為上司者。

2.springboot的相關特點

  • 建立獨立的spring應用程式
  • 内嵌tomcat,不需要部署
  • 簡化maven配置
  • 自動配置
  • 無需xml相關的配置

    spring1.x xml

    spring2.x 注解 資料持久層使用xml 業務層使用注解

    spring.3.x java配置

    spring 4.x java配置

    spring 4.x java配置

xml @configuration
bean标簽的形式 @Bean

注意 @Bean用來修飾方法,表明傳回值交由對象管理

​ ** @configuration 用來修飾類表名目前類為配置類.**

3.springboot的限制

  • src/main/java

    ​ com.baizhi 主包

    ​ entity 子包

    ​ dao

    ​ service

    ​ controller

    ​ conf

    ​ 入口類 注意:入口類必須在主包下和子包同級

  • src/main/resources

    ​ springboot的配置檔案 注意:配置檔案名字必須叫application,将配置檔案放置在resources目錄下

    • application.yml
    • application.yaml
    • application.properties
  • src/test/java
  • src/test/resources

4.使用maven搭建springboot的第一個環境

  • 導入jar
    <!--父級項目依賴-->
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.8.RELEASE</version>
    </parent>
    
    <!--web支援的jar springboot的啟動器-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!--測試支援的jar-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <!-- 隻在test測試裡面運作 -->
    <scope>test</scope>
    </dependency>
               
  • 開發入口類
    @SpringBootApplication
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class,args);
        }
    }
               
  • 開發配置檔案 yml的配置檔案需要注意屬性名和屬性值之間有空格的間隔

    注意:預設啟動端口号為8080

    ​ 預設啟動沒有項目名

    server:
      port: 8989
      context-path: /springboot
               

1.注解剖析

1.@SpringBootApplication=@Configuration+@EnableAutoConfiguration+@ComponentScan
//目前的注解是一個組合注解
@Configuration  //作用:聲明目前類是一個配置類
@ComponentScan  //作用:元件掃描   把一些加有@service  @controller @component  @repository注解的對象交由工廠管理
@EnableAutoConfiguration    //開啟自動配置 datasource  sqlsessionFactorybean  mapperScanner 
2.@RestController //作用:組合注解 @Controller @ResponseBody  聲明目前類為控制器,并且類中所用方法傳回json   
           

注意:springboot預設不支援jsp,預設的視圖層模版為thmyleaf

5.快速搭建springboot應用程式

springboot入門兩種搭建解析,通用mapper使用,MBG,lombokspringboot

6.springboot和第三方技術的內建

6.1.mybatis

​ 1.導入jar

<!--整合mybatis-->
<!--mybatis和springboot的整合包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<!--資料源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.19</version>
</dependency>
<!--資料庫驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--mybatis的核心jar-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
           

2.相關的配置

注意:springboot采用自動配置 裝配相關對象是以不需要手動配置相關的元件,但是需要聲明動态的參

數,如資料源相關參數

server:
  port: 8989
  context-path: /springboot
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:oracle:thin:@localhost:1521:xe
    driver-class-name: oracle.jdbc.OracleDriver
    username: hr
    password: hr
mybatis:
  mapper-locations: classpath:com/baizhi/mapper/*Mapper.xml
  type-aliases-package: com.baizhi.entity
           

3.手動聲明dao包的位置加入注解@MapperScan

springboot入門兩種搭建解析,通用mapper使用,MBG,lombokspringboot

6.2.lombok

1.概念

使java代碼變的更加優雅,以注解的方式代替之前的冗長代碼,底層采用位元組碼技術生成相應方法

2.使用lombok

1.下載下傳lombok相關插件

springboot入門兩種搭建解析,通用mapper使用,MBG,lombokspringboot

2.下載下傳lombok的jar

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>
           

3.常用注解的解釋

@Data 注解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法
@Setter :注解在屬性上;為屬性提供 setting 方法
@Getter :注解在屬性上;為屬性提供 getting 方法
@Log4j :注解在類上;為類提供一個 屬性名為log 的 log4j 日志對象
@NoArgsConstructor :注解在類上;為類提供一個無參的構造方法
@AllArgsConstructor :注解在類上;為類提供一個全參的構造方法
@NonNull : 如果給參數加個這個注解 參數為null會抛出空指針異常
@Value : 注解和@Data類似,差別在于它會把所有成員變量預設定義為private final修飾,并且不會生成set方法。
           

6.3.MBG(mybatis-generator)

1.相關介紹

mybatis的一個插件,根據建立資料庫表,生成實體類,dao,mapper檔案

2.使用

1.導入jar以及插件

<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<version>1.3.2</version>
		</dependency>

       <plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.2</version>
				<dependencies>
					<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<version>5.1.35</version>
					</dependency>
				</dependencies>
				<configuration> 
					<!--配置檔案的路徑 -->
	<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
					<overwrite>true</overwrite>
				</configuration>
     </plugin>

           

2.添加generator.xml配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="test" targetRuntime="MyBatis3">
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>  
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin> 
         <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin> 
        <commentGenerator>
            <!-- 這個元素用來去除指定生成的注釋中是否包含生成的日期 false:表示包含 -->
            <!-- 如果生成日期,會造成即使修改一個字段,整個實體類所有屬性都會發生變化,不利于版本控制,是以設定為true -->
            <property name="suppressDate" value="true" />
            <!-- 是否去除自動生成的注釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--資料庫連結URL,使用者名、密碼 -->
        <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
            connectionURL="jdbc:oracle:thin:@localhost:1521:xe" userId="hr" password="hr">
            </jdbcConnection>
        <javaTypeResolver>
            <!-- This property is used to specify whether MyBatis Generator should
                force the use of java.math.BigDecimal for DECIMAL and NUMERIC fields, -->
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- 生成模型的包名和位置 entity -->
        <javaModelGenerator targetPackage="com.baizhi.entity"
            targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- 生成映射檔案的包名和位置 -->
        <sqlMapGenerator targetPackage="mapper"
            targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 生成DAO的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.baizhi.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        
        <!-- 要生成哪些表 -->
        <table tableName="city" domainObjectName="City"
            enableCountByExample="false" enableUpdateByExample="false"
            enableDeleteByExample="false" enableSelectByExample="false"
            selectByExampleQueryId="false"></table>
    </context>

</generatorConfiguration>
           

3.執行 mybatis-generator:generate

springboot入門兩種搭建解析,通用mapper使用,MBG,lombokspringboot

6.4.通用mapper 官網:https://github.com/abel533/Mapper/wiki

1.通用mapper和MBG對比

MBG 通用Mapper
反向生成實體,dao,mapper 通過實體幫你生成sql語句

2.通用mapper的使用

1.導入的jar

<!--通用mapper的啟動器   注意這是mybatis和mybatis啟動器的封裝-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.19</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>oracle</artifactId>
            <version>1.0.0</version>
        </dependency>
           

2.配置

server:
  port: 8989
  context-path: /springboot
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:oracle:thin:@localhost:1521:xe
    username: hr
    password: hr
    driver-class-name: oracle.jdbc.OracleDriver
mybatis:
  type-aliases-package: com.baizhi.entity
           

3.包掃描@MapperScan 注意:不要使用mybatis原生的注解而是采tk.mybatis.spring.annotation.MapperScan

springboot入門兩種搭建解析,通用mapper使用,MBG,lombokspringboot

4.mapper接口繼承Mapper

springboot入門兩種搭建解析,通用mapper使用,MBG,lombokspringboot

3.通用mapper的相關注解

@Table  //用在類上   聲明資料庫的表名
@Id     //用在屬性上 聲明目前屬性為主鍵
@Column(name ="username")  //作用在屬性上 用來指定資料庫中的字段名稱
//注意:建議使用駝峰命名法 資料庫中以下劃線分割如 userage  實體類中要使用駝峰規則如 userAge
//主鍵政策 兩種形式分别是oracle 和 mysql
//oracle
@KeySql(sql = "select sm_user_seq.nextval from dual", order = ORDER.BEFORE)
//mysql    
@KeySql(useGeneratedKeys = true)
@Transient   //用在屬性上 作用聲明目前屬性不是資料庫中的列


 // 分頁      RowBounds rowBounds=new RowBounds(4,4);  第一個參數是起始下标 第二個參數是每頁的條數
           

6.5.spirngboot內建jsp

1.導入jar

<!-- 給内嵌tomcat提供jsp解析功能的jar-->
     <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
     <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
      </dependency>
           

2.修改springboot配置的視圖解析器

spring: 
  mvc:
    view:
      prefix: /
      suffix: .jsp
           

3.以插件形式啟動 官方提供的插件

springboot入門兩種搭建解析,通用mapper使用,MBG,lombokspringboot

​ 注意:由于内嵌tomcat預設不支援頁面熱部署的功能需要添加相關的配置

server:
	jsp-servlet:
    	init-parameters:
      		development: true
           

6.6.springboot中需要處理的小細節

1.亂碼

1.由于springboot啟動其中已經配置了編碼過濾器,源碼如下,并且預設值為UTF-8,是以不需要配置

@Bean
	@ConditionalOnMissingBean(CharacterEncodingFilter.class)
	public CharacterEncodingFilter characterEncodingFilter() {
		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
		filter.setEncoding(this.properties.getCharset().name());
		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
		return filter;
	}
           

2.如果配置配置項如下

spring:
	http:
    encoding:
      charset: utf-8
      force: true
           

2.檔案上傳

1.springboot預設裝配了檔案處理器,源碼如下 預設單個檔案大小為1MB,一次請求攜帶的檔案大小為10MB

@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
	@ConditionalOnMissingBean(MultipartResolver.class)
	public StandardServletMultipartResolver multipartResolver() {
		StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
		multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
		return multipartResolver;
}
           

2.自定義配置

spring:
	http:
   		multipart:
      		max-file-size: 10MB
      max-request-size: 100MB
           

3.日期格式如何接受

1.方法1:在實體類上加上注解

2.方法2:全局配置,配置yaml

#配置Jackson時間格式轉換
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
           

4.靜态資源處理

1.不需要處理

get請求優先找靜态資源,找controller

post請求直接找controller

5.測試

1.導入測試相關的啟動器,預設內建的junit是以無需再次導入junit的jar

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
           

2.注解

@Runwith(SpringRunner.class)   //啟動spring的工廠
@SpringbootTest      //開啟自動配置,并且裝配項目中相關bean,如dao,service,controller
           

6.配置檔案切分

1.由于實際開發時需要生産環境和測試環境,為了減少測試環境上線時頻繁修改配置檔案的問題,可以做配置檔案的切分,主配置檔案中主要配置公共的參數,小配置檔案中配置獨立的參數

2.如何選擇激活哪個配置檔案

spring:
  profiles:
    active: test
           

7.fastjson的內建 将類型轉換器交由工廠管理

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.54</version>
</dependency>
           

2.相關注解

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
   @JSONField(format = "yyyy-MM-dd HH:mm:ss")
           

6.7.springboot內建logback

6.7.1.log4j.properties

1.日志的級别:debug—info—warn–error 日志級别越低列印日志量越多,越詳細

2.日志的分類: 父日志(根日志) 控制全局日志

​ 子日志 某個包中的日志 子日志優先級高于父日志

3.Appender 為日志輸出目的地,Log4j提供的appender有以下幾種:

org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(檔案),
org.apache.log4j.DailyRollingFileAppender(每天産生一個日志檔案),
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候産生一個新的檔案),
org.apache.log4j.WriterAppender(将日志資訊以流格式發送到任意指定的地方)
           

4.Layout:日志輸出格式,Log4j提供的layout有以下幾種:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志資訊的級别和資訊字元串),
org.apache.log4j.TTCCLayout(包含日志産生的時間、線程、類别等等資訊)
           

5.列印參數: Log4J采用類似C語言中的printf函數的列印格式格式化日志資訊,如下:

%m   輸出代碼中指定的消息
  %p   輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL 
  %r   輸出自應用啟動到輸出該log資訊耗費的毫秒數 
  %c   輸出所屬的類目,通常就是所在類的全名 
  %t   輸出産生該日志事件的線程名 
  %n   輸出一個回車換行符,Windows平台為“\r\n”,Unix平台為“\n” 
  %d   輸出日志時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日  22 : 10 : 28 , 921  
  %l   輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 ) 
           

6.7.2.logback.xml

1.由于springboot內建了logback是以不需要引入jar直接導入配置檔案即可

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern> [%p] [%d{yyyy-MM-dd HH:mm:ss}] %m %n</pattern>
        </layout>
    </appender>
    <root level="info">
        <appender-ref ref="stdout"/>
    </root>
    <logger name="com.baizhi.mapper" level="DEBUG"/>
</configuration>
           

7.springboot中的屬性注入

7.1.spring的屬性注入方式

@Configuration
@PropertySource(value = "classpath:jdbc.properties")
public class JavaConf {
    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driver}")
    String driver;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;


    @Bean
    public DruidDataSource getDruidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(url);
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
}
           

7.2.springboot的注入形式

1.第一種屬性注入方式

聲明配置屬性類

@ConfigurationProperties(prefix = "jdbc")
public class JDBCProp {

    String url;

    String driver;

    String username;

    String password;
}
           

在相關配置類中引入目前屬性類

@EnableConfigurationProperties(value = JDBCProp.class)
public class JavaConf {

@Autowired
JDBCProp jdbcProp;
}
           

2.第二種注入方式 注意:配置檔案中的屬性必須和目前對象屬性保持一緻

@Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DruidDataSource getDruidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
           

注意:通過屬性注入的方式可以修改容器中的bean

7.2springboot 自動裝配原理

springboot通過啟動器的形式将一些必須建立的bean先建立出來,比如視圖解析器,處理器擴充卡,處理器映射器,後續開發者可以通過手工配置bean的形式覆寫原來的對象,或者可以通過更簡單的屬性注入的方式修改該執行個體.

8.idea中的debug調試

1.使用方式 在相關的類上标注斷點,以斷點模式啟動

如果想執行下一步操作,  f8

結束目前的斷點,或者是下一個斷點,f9

進入方法體,f7

跳出方法體shift+f8
           

9.mybatis的分頁插件之pagehelper

1.導入pagehelper的啟動器

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.2</version>
  </dependency>
           
第一個參數為 頁碼   第二個參數為 每頁顯示多少條
PageHelper.startPage(1,3);
List<User> users = userMapper.selectAll();
           

turn druidDataSource;

}

注意:通過屬性注入的方式可以修改容器中的bean    

###### 7.2springboot  自動裝配原理

springboot通過啟動器的形式将一些必須建立的bean先建立出來,比如視圖解析器,處理器擴充卡,處理器映射器,後續開發者可以通過手工配置bean的形式覆寫原來的對象,或者可以通過更簡單的屬性注入的方式修改該執行個體.

## 8.idea中的debug調試

1.使用方式     在相關的類上标注斷點,以斷點模式啟動

```java
如果想執行下一步操作,  f8

結束目前的斷點,或者是下一個斷點,f9

進入方法體,f7

跳出方法體shift+f8
           

9.mybatis的分頁插件之pagehelper

1.導入pagehelper的啟動器

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.2</version>
  </dependency>
           
第一個參數為 頁碼   第二個參數為 每頁顯示多少條
PageHelper.startPage(1,3);
List<User> users = userMapper.selectAll();
           

繼續閱讀