首先引入依赖包
org.springframework.boot spring-boot-starter-testcom.baomidou mybatis-plus-boot-starter3.4.3 org.postgresql postgresql42.2.14 runtime org.projectlombok lombok1.18.20 provided com.alibaba druid-spring-boot-starter1.2.1 mysql mysql-connector-java8.0.27 runtime com.baomidou dynamic-datasource-spring-boot-starter3.5.1 com.baomidou mybatis-plus-generator3.5.2
然后开始建表
CREATE TABLE "public"."post_user" ( "id" int8 NOT NULL, "name" varchar(255) COLLATE "pg_catalog"."default", "code" varchar(255) COLLATE "pg_catalog"."default", "edit_time" date, CONSTRAINT "user_pkey" PRIMARY KEY ("id") ) ; ALTER TABLE "public"."post_user" OWNER TO "postgres";
application.yml 配置文件 这里可以加入动态数据源切换mysql数据库对比一下mysql性能
spring: servlet: multipart: max-file-size: 50MB max-request-size: 50MB jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss #涉及接收日期参数格式 main: allow-bean-definition-overriding: true #重写jacksonObjectMapper # datasource: # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # url: jdbc:sqlserver://10.10.1.65:1433;DatabaseName=EVODetection_ASSY_BZH # username: sa # password: 123456 datasource: dynamic: druid: # filter: stat,wall,log4j #druid监控 initial-size: 1 #连接池初始化大小 min-idle: 3 #最小空闲连接数 max-active: 3 #最大连接数 #监控页面的配置放在了DruidConfig中,否则不起作用 # stat-view-servlet: # enabled: true # login-username: admin # login-password: admin primary: dataSourceDefault datasource: dataSourceDefault: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://10.10.1.82:3308/EVODetection_ASSY_BZH_JM?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: Fitow@2022xxx dataSourcePostgreSql: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://192.168.206.128:5432/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowMultiQueries=true username: postgres password: 123456xxx dataSourceM: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.206.128:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: 123456
创建实体类
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.util.Date; @Getter @Setter @TableName("post_user") public class PostUser implements Serializable { @TableId("id") @ApiModelProperty(value = "主键ID") private Long id; @TableField("name") private String name; @TableField("code") private String code; @TableField(value = "edit_time",fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date editTime; }
创建mapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.fitow.ois.entity.PostUser; import com.fitow.ois.entity.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper{ }
service
import com.baomidou.mybatisplus.extension.service.IService; import com.fitow.ois.entity.PostUser; import com.fitow.ois.entity.User; public interface UserService extends IService{ }
serviceImpl
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fitow.ois.entity.PostUser; import com.fitow.ois.entity.User; import com.fitow.ois.mapper.UserMapper; import com.fitow.ois.service.UserService; import org.springframework.stereotype.Service; @Service @DS("dataSourcePostgreSql") //数据源切换 public class UserServiceImpl extends ServiceImplimplements UserService { }
编写测试类测试
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.fitow.ois.service.*; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; i /** * @desc * @Author zhangchuang * @date 2021/10/18 10:41 */ @RunWith(SpringRunner.class) @SpringBootTest @Slf4j public class CommonTest { @Autowired UserService userService; @Test public void test() throws Exception { // //todo 插入性能 // long l = System.currentTimeMillis(); // for(int i =0;i<100000;i++){ // ArrayListpostUsers = new ArrayList<>(1000); // for(int m = 0; m<1000; m++){ // PostUser user = new PostUser(); // user.setName("xxxx"); // user.setCode("xxsdf"); // postUsers.add(user); // } // userService.saveBatch(postUsers); // } // System.out.println(System.currentTimeMillis()-l); //查询性能 // long l = System.currentTimeMillis(); // List list = userService.list(); // System.out.println(System.currentTimeMillis()-l); }
然后就可以测试了,
写了一个批量插入10万数据 4秒插入完成 同样的代码 mysql8.0 65秒插入完成,吞吐量postgreSQL性能确实占优。