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

Spring Boot与Mybatis 借助Fastjson快速完成数据解析入库的更多相关文章

  1. 使用intelliJ创建 spring boot + gradle + mybatis站点

    Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧.Net同事问到,我想我也可以写 ...

  2. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  3. Spring boot整合Mybatis

    时隔两个月的再来写博客的感觉怎么样呢,只能用“棒”来形容了.闲话少说,直接入正题,之前的博客中有说过,将spring与mybatis整个后开发会更爽,基于现在springboot已经成为整个业界开发主 ...

  4. 详解Spring Boot集成MyBatis的开发流程

    MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...

  5. Spring Boot 整合MyBatis(1)

    这篇文章介绍如何在Spring boot中整合Mybatis,其中sql语句采用注解的方式插入.后续文章将会介绍,如何使用xml方式. SSM SSH框架已经满足轻量级这个需求了,但是对于开发人员而言 ...

  6. spring boot + gradle + mybatis

    使用intelliJ创建 spring boot + gradle + mybatis站点   Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gr ...

  7. Spring boot之MyBatis

    文章目录1. 环境依赖2. 数据源2.1. 方案一 使用 Spring Boot 默认配置2.2. 方案二 手动创建3. 脚本初始化4. MyBatis整合4.1. 方案一 通过注解的方式4.1.1. ...

  8. Spring Boot 整合 Mybatis 实现 Druid 多数据源详解

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...

  9. Spring boot教程mybatis访问MySQL的尝试

    Windows 10家庭中文版,Eclipse,Java 1.8,spring boot 2.1.0,mybatis-spring-boot-starter 1.3.2,com.github.page ...

随机推荐

  1. Ubuntu16.04(Linux)安装JDK

    Ubuntu 安装JDK的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 第一种:使用ppa ...

  2. Android之NDK环境配置+JNI开发+so文件编译

    前言 这边Android作为日常记录,虽然破坏了文章队形~   最近人工智能挺火的,也稍微了解了一些库,比如关于视觉库openCV.要在安卓下调用这些C/C++库,需要用到JNI开发,在此把过程分享一 ...

  3. Python 关于bytes类方法对数字转换的误区, Json的重要性

    本文起源于一次犯错, 在发觉bytes()里面可以填数字, 转出来的也是bytes类型, 就心急把里面的东西decode出来. 结果为空.搞来搞去以为是命令不熟练事实上错在逻辑. a1 = bytes ...

  4. Python删除开头空格

    # -*- coding: utf-8 -*- '''打开delSpace.txt文本并删除每行开头的八个空格''' f=open("delSpace.txt") lines=f. ...

  5. 理解 on-policy 和 off-policy

    转自:https://www.cnblogs.com/xiachongkun/p/7767976.html,感谢分享 大名鼎鼎的蒙特卡洛方法(MC),源自于一个赌城的名字,作为一种计算方法,应用领域众 ...

  6. java线程面试手写题

    1.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.写出程序. public class Question1 { private int j = 0; /** * @param ...

  7. Django 的视图层

    什么是视图: 之前我们也了解了urls路由 那么路由的主要作用是决定你下一步走哪个视图函数 ,视图就是用来存放一个个的函数的python文件,主要存储的函数就是你Django主要的流程的控制 都存放在 ...

  8. Effective C++(1-2) 编译器替换预处理器

    1 C++最主要的四部分: C Object-Oriented C++: 面向对象 Template C++:泛型编程 STL C++高效编程守则视状况而变化,取决于你使用C++的哪一部分. 2 尽量 ...

  9. 浏览器跨域访问WebApi

      webapi地址:wapapi.ebcbuy.com web地址:wapweb.ebcbuy.com   在默认情况下这两个域名属于两个不同的域,他们之间的交互存在跨域的问题,但因为他们都同属于一 ...

  10. August 07th 2017 Week 32nd Monday

    Life is just a series of trying to make up your mind. 生活只是由一系列下决心的努力所构成. Some people say it is not y ...