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方法要是非静态的。

猜你喜欢

转载自blog.csdn.net/u011372108/article/details/83016185