通過Spring Boot
可以快速搭建一個項目結構,在此基礎上本文就通過一個簡單的例子,說明如何結合Mybatis 和 Fastjson
,快速的完成一個數據的入庫基本操作。
添加相關的依賴
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
部分相關代碼
數據庫表結構
首先需要在數據庫新建一張表,作為演示新建一張最簡結構的表datatable,僅包含自增主鍵id,字段value和字段curr_time。
CREATE TABLE `datatable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(255) DEFAULT NULL,
`curr_time` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Bean實體
之后需要一個javabean對應數據表,這里有一個GsonFormat
插件可以快速的生成一個beanClass。只需要根據一個json串{"value":"","curr_time":""}
就可以自動生成相關的getSet方法。IntelliJ IDEA
可以搜索插件直接安裝。
public class dataBean {
/**
* value :
* curr_time :
*/
private String value;
private String curr_time;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getCurr_time() {
return curr_time;
}
public void setCurr_time(String curr_time) {
this.curr_time = curr_time;
}
}
這里Fastjson
提供一個@JSONField
注解,用來幫助bean與數據表之間的字段對應(變量名大部分情況與數據表字段是不完全統一的)。將注解寫在get
和set
方法上即可,例如:
@JSONField(name="table_value")
public void setValue(String value) {
this.value = value;
}
同時還提供其他很有用的功能,例如在字段上加這段注解@JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)
就可以在由bean對象轉json字符串時,為空值保留位置,{“value”:“null”}
,同樣還有@format
等實用注解。
Mapper相關
一個簡單的Mapper.java
類,僅包含insert方法。
@Mapper
@RestController
public interface insert_table {
void insert(List<dataBean> list);
}
對應的mapper.xml
添加如下insert語句即可。
<mapper namespace="com.***.Mapper">
<insert id="insert_table" parameterType="java.util.List">
insert into datatable (value,curr_time)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.value},#{item.curr_time})
</foreach>
</insert>
</mapper>
業務代碼簡單示例
@Autowired
private Mapper mapper;
public void insertValue(){
//此處json_str來自其他接口數據,一般為json_arr格式
String json_str = "\[\{\"value\":\"1\",\"curr_time\":\"2018-10-11 18:00:00\"\},\{\"value\":\"2\",\"curr_time\":\"2018-10-11 18:05:00\"\}\]";
List resList = JSON.parseArray(json_str, dataBean.class);
mapper.insert(resList);
}
其中JSON.parseArray()
重載方法可以將json_str
直接轉換為相應的bean對象列表,此方法為Fastjson
提供。
調用該方法即可完成最簡單的數據入庫,主要依賴Fastjaon 和 Mybatis
提供的功能。
Spring Boot 與配置文件相關的幾個實用注解
@PropertySource(value = {"classpath:config/*.properties"})
@ConfigurationProperties(prefix = "***")
@Value("${***}")
首先@PropertySource
注解放在類聲明頭上,指明需要加載的配置文件位置,如果沒有該屬性,則只默認加載全局配置文件application.properties
;其次@Value
注解放在成員變量頭上,用於對單個變量自動賦值,其中***
對應配置文件中的key值;當遇到屬性值較多時,用@Value
會比較繁瑣,采用@ConfigurationProperties
注解,放在類聲明頭上,通過指定prefix
前綴,將配置文件中的值對應自動賦值給類成員變量。簡單實例如下:
##data.properties配置文件內容,位於resources/config/下##
data.username = admin
data.password = 123456
相應的java.class
代碼如下:
//##java.class文件內容##
@PropertySource(value = {"classpath:config/data.properties"})
@ConfigurationProperties(prefix = "data")
public class Configuration {
// @Value("${data.username}")
private String username;
// @Value("${data.password}")
private String password;
}
靜態變量的自動賦值
通過上面三個注解,便可以通過配置文件來靈活改變個別屬性值,但Spring Boot提供的自動賦值功能無法對static變量賦值。
在開發工作中,經常存在一些工具類,包含大量的靜態方法,調用的靜態變量值同樣需要通過配置文件自動賦值,我們就需要變通的解決一下這個問題。因為Spring Boot 支持set方法注入,我們可以利用非靜態set方法注入靜態變量。
@Component
public class Helper {
// @Value("${data.username}")直接用vlaue對static變量賦值是不會生效的
private static String username;
@Value("${data.username}")
private void setUsername(String name){
username = name;
}
}
需要注意的是代碼中需要@Component
注解,同時set
方法要是非靜態的。