神器之整合通用 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