通过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
方法要是非静态的。
君子藏器于身,待时而动