SpringBoot使用記錄
阿新 • • 發佈:2018-12-07
專案結構
一:實體類 (Entity)
- @Entity~標註為實體類
- @Table(name = "資料庫中表名")~對應資料庫表
- @Id~標註該欄位為id
- @GeneratedValue(strategy=GenerationType.IDENTITY)~id自增標註
- @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層
- interface~dao層是介面層,主要對接資料庫操作
- extends CrudRepository<實體類, Id型別>~繼承CrudRepository裡面有簡單的crud操作
- @Query("寫hql語句")~寫資料庫操作語句hql語句或sql語句,區別在nativeQuery=true為sql,不寫則為hql
- @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層
- @Service~標註該class為服務層,連結控制層和資料庫操作的dao層
- @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)
- @RestController~標註該class為控制層,並說明所有方法的返回值均不是jsp或任何頁面
- @Controller~標註該class為控制層,並說明返回值為頁面地址
- @RequestMapping("主對映地址")~定下進這個控制器的主對映地址例如:/test/user
- @Value("${配置檔案中的屬性名}")~可以將配置檔案中的值引入該類直接使用
- @Autowired~讓spring自動注入需要的服務層即service層,@Autowired private UserService userService;
- @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)
- 專案執行埠配置
server.port=8084
任意屬性配置
屬性名=值
資料來源配置
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
上傳檔案大小控制
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>