首页 > 其他分享 >springboot三

springboot三

时间:2023-07-22 10:44:06浏览次数:45  
标签:fastJson springboot SerializerFeature 使用 import null 注解

神器之整合通用 Mapper 的开发方法

  通用 mapper 的开发方法是做练习的神器,它是基于 mybatis 的一款 MyBatis 增强插件,可以提供一些常用增、删、改、查的操作,不需要重复写一些常用的 sql。简化操作,精简代码,并且达到代码风格统一的目的。它的出现不是为了替代 mybatis,而是让 mybatis 的开发更方便。 我总结了它的使用过程:
添加依赖:
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>4.2.2</version>
</dependency>
使用通用 mapper 的开发方式,采用注解定义映射关系,自动生成常见的 SQL 语句,不需要 xml 映射元文件
/*
1.表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如 TestUser 默认对应的表名为 test_user
2.表名可以使用@Table(name = "tableName")进行指定,对不符合第一条默认规则的可以通过这种方式指定表
名.
3.字段默认和@Column 一样,都会作为表字段,表字段默认为 Java 对象的 Field 名字驼峰转下划线形式.
4.可以使用@Column(name = "fieldName")指定不符合第 3 条规则的字段名
5.使用@Transient 注解可以忽略字段,添加该注解的字段不会作为表字段使用.
6.建议一定是有一个@Id 注解作为主键的字段,可以有多个@Id 注解的字段作为联合主键.
7.默认情况下,实体类中如果不存在包含@Id 注解的字段,所有的字段都会作为主键字段进行使用(这种效率极
低).
8.实体类可以继承使用,可以参考测试代码中的 tk.mybatis.mapper.model.UserLogin2 类.
9.由于基本类型,如 int 作为实体类字段时会有默认值 0,而且无法消除,所以实体类中建议不要使用基本类型.
10.@NameStyle 注解,用来配置对象名/字段和表名/字段之间的转换方式,该注解优先于全局配置 style,可
选值:
normal:使用实体类名/属性名作为表名/字段名
camelhump:这是默认值,驼峰转换为下划线形式
uppercase:转换为大写
lowercase:转换为小写
*/
@Entity //用于声明当前类是一个实体类
@Table(name="tbl_users") // 用于声明当前类所对应的表名称
public class User implements Serializable {
@Id //用于声明标识属性,对应表中的主键
@GeneratedValue(strategy = GenerationType.IDENTITY) 声明主键生成策略
private Long id;
@Column //如果属性名称和列名称不一致,则需要通过@Column 进行配置对应的列名称
private String username;
private String password;
private Date birth;
private Boolean sex;
}
定义 mapper 接口
public interface UserMapper extends BaseMapper<User> {
}
针对 mapper 接口进行注册,一般是依赖自动扫描实现。可以在主类或者配置上添加一个注解配置
SpringBoot 针对 Junit 的单元测试有很好的支持
@SpringBootTest
class CommonMapperApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
}
@Test
void testCreate(){
User user=new User();
user.setUsername("张三丰");
user.setPassword("333333");
user.setSex(true);
int len = userMapper.insertSelective(user);
Assertions.assertEquals(1,len);
}
}
需要控制器调用业务,业务再通过 Mapper 访问数据库,最终返回 JSON 字符串

FastJson

jackson 和 fastJson 的对比 有很多人已经习惯于使用阿里巴巴的 fastJson 来做项目中 json 转换的相关工作,比如目前项目中使用的就是阿里的 fastJson关于 fastJson 和 jackson 的对比,网上有很多资料可以查看,主要是根据自己实际项目情况来选择合适的框架。从扩展上来看,fastJson 没有 jackson 灵活,从速度或者上手难度来看,fastJson 可以考虑,项目中目前使用的是阿里的 fastJson,挺方便的。 fastJson 依赖导入 使用 fastJson 需要导入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency>   使用 fastJson 处理 null 使用 fastJson 时,对 null 的处理和 jackson 有些不同,需要继承 WebMvcConfigurationSupport 类或者实现WebMvcConfiguration 接口,然后覆盖 configureMessageConverters 方法,在方法中可以选择对要实现 null转换的场景,配置好即可。
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class fastJsonConfig extends WebMvcConfigurationSupport {
//使用阿里 FastJson 作为 JSON MessageConverter
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(
SerializerFeature.WriteMapNullValue, // 保留 map 空的字段
SerializerFeature.WriteNullStringAsEmpty, // 将 String 类型的 null 转成""
SerializerFeature.WriteNullNumberAsZero, // 将 Number 类型的 null 转成 0
SerializerFeature.WriteNullListAsEmpty, // 将 List 类型的 null 转成[]
SerializerFeature.WriteNullBooleanAsFalse, // 将 Boolean 类型的 null 转成 false
SerializerFeature.DisableCircularReferenceDetect); // 避免循环引用
converter.setFastJsonConfig(config);
converter.setDefaultCharset(Charset.forName("UTF-8"));
List<MediaType> mediaTypeList = new ArrayList<>();
// 解决中文乱码问题,相当于在 Controller 上的@RequestMapping 中加了个属性 produces ="application/json" mediaTypeList.add(MediaType.APPLICATION_JSON);
converter.setSupportedMediaTypes(mediaTypeList);
converters.add(converter);
}
}

 

为大家推荐一个非常好用的测试工具postman

如果直接测试,则需要编写页面和 js 代码才能进行验证,可以使用 postman 避免这些繁琐的操作

 

 

 

 

 

标签:fastJson,springboot,SerializerFeature,使用,import,null,注解
From: https://www.cnblogs.com/fenglei1/p/17572957.html

相关文章

  • springboot二
    对springboot的一些补充在具体的应用开发中可以使用properties配置文件或者yaml配置文件两种一般建议开发中首选yml格式的文件,文件后缀可以是yml或者yaml。可以通过格式缩进的方式表达层次结构。解析yml格式的文件需要依赖snakeyaml,这个依赖由web-starter依赖引......
  • springboot~redisson中使用lua脚本的问题
    起因事情是这样的,我在通过redission进行限流时,用到了在lua脚本里进行数值计算,而我在本地测试过程中,发现所有tonumber()方法时,返回值都是nil,这个原因最后找到了,是没有配置序列化的方式,出现错误提示如下:org.redisson.client.RedisException:ERRErrorrunningscript(calltof_......
  • springboot原理
    SpringApplication.run()执行流程:1.初始化监听器、自定义监听器。2.发布ApplicationStartedEvent事件(监听ApplicationStartedEvent方法:1、实现ApplicationStartedEvent  2、SpringApplication.addListener())3.装配参数和环境,确定是web环境还是非web环境。4.装配完环境后,......
  • springboot学习之十三(druid+mybaits plus)
    Druid介绍Druid是阿里巴巴的一个开源项目,号称为监控而生的数据库连接池,在功能、性能、扩展性方面都超过其他例如DBCP、C3P0、BoneCP、Proxool、JBossDataSource等连接池,而且Druid已经在阿里巴巴部署了超过600个应用,通过了极为严格的考验,这才收获了大家的青睐! Springboot集成......
  • 【转载】SpringBoot 通用限流方案
    一、背景限流对于一个微服务架构系统来说具有非常重要的意义,否则其中的某个微服务将成为整个系统隐藏的雪崩因素,为什么这么说?举例来讲,某个SAAS平台有100多个微服务应用,但是作为底层的某个或某几个应用来说,将会被所有上层应用频繁调用,业务高峰期时,如果底层应用不做限流处理,该应用......
  • SpringBoot 使用jasypt 对敏感字段加密
    com.github.ulisesbocchiojasypt-spring-boot-starter2.1.2如果SpringBoot项目中使用了@SpringBootApplication或者@EnableAutoConfiguration,在项目里添加jasypt-spring-boot-starter依赖会自动对项目中整个属性(包括系统属性,环境属性,命令行参数, applicat......
  • idea 在springboot添加本地jar包的方法
    虽然现在Maven很方便,但还是会有一些jar是不开源的,也就是说在Maven仓库中是下载不到的,比如对接阿里云、通联等,这个时候就需要我们手动将这些jar包下载下来,然后手动添加到我们的项目中1、先下载好自己需要的jar包,如下: 2、在SpringBoot中的resources目录新建一个lib目录,将这些ja......
  • springboot插件式开发 springboot-plugin-framework-v2.4.5使用文档
    功能介绍简介介绍此框架可在SpringBoot项目上开发出用于扩展项目的插件,可在插件模块中单独定义接口、静态文件、mybatis-xml等扩展功能。核心功能插件配置式插拔于springboot项目。在springboot上可以进行插件式开发,扩展性极强,可以针对不同项目开发不同插件,进行不同插件jar包......
  • springboot
    这几天查阅了几十篇文章,总结了springboot的一些心得。一.Spring Boot 是什么从 2002 年开始,Spring 一直在飞速的发展,如今已经成为了在 Java EE 开发中真正意义上的标准,但是随着技术的发展,Java EE 使用 Spring 逐渐变得笨重起来,大量的 XML 文件存在于项目之中......
  • springboot元注解@Target@Retention@Documented
        @Target(ElementType.METHOD)是一个元注解,用来标注注解的作用目标。这里的@Target(ElementType.METHOD)表示该自定义注解可以用于方法上。@Retention(RetentionPolicy.RUNTIME)是一个元注解,用来标注注解的保留策略。这里的@Retention(RetentionPolicy.RUNTIME)表......