1. 程式人生 > >SpringBoot使用記錄

SpringBoot使用記錄

專案結構


 

一:實體類 (Entity)

  1. @Entity~標註為實體類
  2. @Table(name = "資料庫中表名")~對應資料庫表
  3. @Id~標註該欄位為id
  4. @GeneratedValue(strategy=GenerationType.IDENTITY)~id自增標註
  5. @Column(name="資料庫中欄位名稱")~對應資料庫中的欄位
@Entity
@Table(name = "mini_user")
public class UserEntity {
	@Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id")
	private Long id;
	
	@Column(name = "openid")
	private String openId;//使用者唯一標識
	
	@Column(name = "nick_name")
	private String nickName;//使用者暱稱
	
	@Column(name = "avatar_url")
	private String avatarUrl;//使用者頭像
	
	@Column(name = "gender")
	private String gender;//性別

    get/set...
}

 

二:Dao層

  1. interface~dao層是介面層,主要對接資料庫操作
  2. extends CrudRepository<實體類, Id型別>~繼承CrudRepository裡面有簡單的crud操作
  3. @Query("寫hql語句")~寫資料庫操作語句hql語句或sql語句,區別在nativeQuery=true為sql,不寫則為hql
  4. @Modifying , @Transactional~刪除和修改資料庫操作時需要加這兩個註釋,保證操作事務性
public interface UserDao extends CrudRepository<UserEntity, Long>{

	@Query("from UserEntity where openId = ?")
	UserEntity findUserByOpenId(String openid);

        @Query("seletc * from user where openId = ?",nativeQuery=true)
	UserEntity findUserByOpenId(String openid);

        @Modifying
	@Transactional
	@Query("delete from UserEntity where openId = ?")
	void deleteUser(String openId);

}

 

三:service層

  1. @Service~標註該class為服務層,連結控制層和資料庫操作的dao層
  2. @Autowired~通過spring自動注入相應的dao層
@Service
public class UserService{

	@Autowired
	private UserDao userDao;
	
	/**
	 * 儲存使用者資訊
	 * @param user
	 */
	public void save(UserEntity user){
		userDao.save(user);
    }


	/**
	 * 通過openid獲取使用者物件
	 * @param openid
	 * @return
	 */
	public UserEntity findUserByOpenId(String openid) {
		return userDao.findUserByOpenId(openid);
	}

}

 

 四:控制層(Controller)

  1. @RestController~標註該class為控制層,並說明所有方法的返回值均不是jsp或任何頁面
  2. @Controller~標註該class為控制層,並說明返回值為頁面地址
  3. @RequestMapping("主對映地址")~定下進這個控制器的主對映地址例如:/test/user
  4. @Value("${配置檔案中的屬性名}")~可以將配置檔案中的值引入該類直接使用
  5. @Autowired~讓spring自動注入需要的服務層即service層,@Autowired private UserService userService;
  6. @RequestMapping(value = "對應方法對映", method = RequestMethod.GET)~通過url找到執行該類中的哪一個方法,/add
@RestController
@RequestMapping("${basepath}/user")
public class UserController {
	
	public static Logger logger = LogManager.getLogger(UserController.class);
	
	@Value("${wx.appid}")
	private String appid;
	
	@Value("${wx.secret}")
	private String secret;
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private PictureUploadService pictureUploadService;
	
	/**
	 * 接收小程式傳過來的登入code,返回對應的openid
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/receiveCode", method = RequestMethod.GET)
	public String receiveCode(HttpServletRequest request, @RequestParam String loginCode){
		logger.info("請求成功,傳過來的登入碼為:" + loginCode);
		//請求微信伺服器端去獲取openid和sessionkey
		String url = "https://api.weixin.qq.com/sns/jscode2session";
		
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("appid", appid);
		params.put("secret", secret);
		params.put("js_code", loginCode);
		params.put("grant_type", "authorization_code");
		
		String ret = HttpAccess.getNameValuePairRequest(url, params, "utf-8", "authorization_code");
		
		JSONObject retJson = JSONObject.parseObject(ret);
		String openid = retJson.getString("openid");
		return openid;
	}
}

 五:配置檔案 (application.properties)

  1. 專案執行埠配置
  2. server.port=8084

    任意屬性配置

  3. 屬性名=值

    資料來源配置

  4. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/資料庫名
    spring.datasource.username=賬號
    spring.datasource.password=密碼
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.initialSize=5  
    spring.datasource.minIdle=5  
    spring.datasource.maxActive=20  
    spring.datasource.maxWait=60000  
    spring.datasource.timeBetweenEvictionRunsMillis=60000  
    spring.datasource.minEvictableIdleTimeMillis=300000  
    spring.datasource.validationQuery=SELECT 1 FROMDUAL  
    spring.datasource.testWhileIdle=true  
    spring.datasource.testOnBorrow=false  
    spring.datasource.testOnReturn=false  
    spring.datasource.poolPreparedStatements=true  
    spring.datasource.maxPoolPreparedStatementPerConnectionSize=20  
    spring.datasource.filters=stat,wall,log4j  
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # Specify the DBMS
    spring.jpa.database=MYSQL
    # Show or not log for each sql query
    spring.jpa.show-sql=true
    # Hibernate ddl auto (create, create-drop, update)
    spring.jpa.hibernate.ddl-auto=update
    # stripped before adding them to the entity manager)
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

    上傳檔案大小控制

  5. spring.http.multipart.maxFileSize=100Mb
    spring.http.multipart.maxRequestSize=100Mb

    配置直接訪問本地資料

    spring.mvc.static-path-pattern=/**
    spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:本地地址

     

 


六:日誌配置檔案(log4j2.xml)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
  <Appenders>
    <Console name="console" target="SYSTEM_OUT">
      <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}][%p][%class.%method() %L] : %m%n"/>
    </Console>
    <RollingFile name="logfile" fileName="D://counts_log/jar-logs/app.log" filePattern="D://counts_log/jar-logs/%d{yyyy-MM-dd-HH}.log">
    	<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}][%p][%class.%method() %L] : %m%n"/>
      	<Policies>  
        	<TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
        </Policies> 
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <!-- <AppenderRef ref="database"/> -->
      <AppenderRef ref="console"/>
      <AppenderRef ref="logfile"/>
    </Root>
    <logger name="com.gargoylesoftware.htmlunit" level="fatal" additivity="false"/>
  </Loggers>
</Configuration>

 


 

常用jar包

    <!-- logging begin -->
    <dependency>
	    <groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-log4j2</artifactId>
	</dependency>
	<!-- logging end -->

	<!-- http begin -->
	<dependency>
	    <groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpclient</artifactId>
    </dependency>
	<!-- http end -->

	<!-- fastjson begin -->
	<dependency>
	    <groupId>com.alibaba</groupId>
		<artifactId>fastjson</artifactId>
		<version>1.2.46</version>
	</dependency>
	<!-- fastjson end -->

 

熱部署

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 這個需要為 true 熱部署才有效 -->
</dependency>

<build>
    <plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>
                <fork>true</fork>
            </configuration>
		</plugin>
	</plugins>
</build>