Spring Boot與Mybatis 借助Fastjson快速完成數據解析入庫


通過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與數據表之間的字段對應(變量名大部分情況與數據表字段是不完全統一的)。將注解寫在getset方法上即可,例如:

@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方法要是非靜態的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM