Browse Source

fix 后端JDBC

zhanghaijun 2 years ago
parent
commit
36901defcf

+ 75 - 0
train-server/pom.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>3.1.5</version>
+        <relativePath/>
+    </parent>
+    <groupId>top.haijunit</groupId>
+    <artifactId>train-server</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <name>train-server</name>
+    <description>train server</description>
+    <properties>
+        <java.version>17</java.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.liquibase</groupId>
+            <artifactId>liquibase-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 13 - 0
train-server/src/main/java/top/haijunit/train/TrainServerMain.java

@@ -0,0 +1,13 @@
+package top.haijunit.train;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class TrainServerMain {
+
+    public static void main(String[] args) {
+        SpringApplication.run(TrainServerMain.class, args);
+    }
+
+}

+ 20 - 0
train-server/src/main/java/top/haijunit/train/config/MybatisPlusConfig.java

@@ -0,0 +1,20 @@
+package top.haijunit.train.config;
+
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@MapperScan("top.haijunit.train.mapper")
+public class MybatisPlusConfig {
+
+    /**
+     * 分页插件
+     */
+    @Bean
+    public PaginationInnerInterceptor paginationInterceptor() {
+        return new PaginationInnerInterceptor();
+    }
+}
+

+ 7 - 0
train-server/src/main/java/top/haijunit/train/mapper/UserMapper.java

@@ -0,0 +1,7 @@
+package top.haijunit.train.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import top.haijunit.train.model.UserDO;
+
+public interface UserMapper extends BaseMapper<UserDO> {
+}

+ 13 - 0
train-server/src/main/java/top/haijunit/train/model/UserDO.java

@@ -0,0 +1,13 @@
+package top.haijunit.train.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("db_user")
+public class UserDO {
+    private Long userId;
+    private String username;
+    private String email;
+
+}

+ 24 - 0
train-server/src/main/resources/application.yml

@@ -0,0 +1,24 @@
+spring:
+  application:
+    name: train-server
+  liquibase:
+    enabled: true
+    change-log: classpath:/db/changelog/db-server.xml
+  datasource:
+    type: com.zaxxer.hikari.HikariDataSource
+    driver-class-name: org.h2.Driver
+    url: jdbc:h2:./store/db_train;IGNORECASE=TRUE;MODE=MySQL;AUTO_SERVER=TRUE;AUTO_SERVER_PORT=9090;USER=root;PASSWORD=123456
+    username: root
+    password: 123456
+    hikari:
+      minimum-idle: 10
+      maximum-pool-size: 20
+      connectionTimeout: 30000
+      validationTimeout: 5000
+      idleTimeout: 600000
+      maxLifetime: 1800000
+      connectionTestQuery: SELECT 1
+      keepaliveTime: 30000
+logging:
+  level:
+    top.haijunit: debug

+ 25 - 0
train-server/src/main/resources/db/changelog/db-server-train.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<databaseChangeLog
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
+
+
+    <changeSet id="demo" author="zhanghaijun" failOnError="false" runOnChange="true">
+        <createTable tableName="db_user" schemaName="${schema.name}" remarks="用户表">
+            <column name="user_id" type="${autoing.type}" autoIncrement="true" remarks="用户Id">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="username" type="VARCHAR(255)" defaultValue="" remarks="用户名称"/>
+            <column name="email" type="VARCHAR(128)" defaultValue="" remarks="邮箱地址"/>
+
+            <column name="status" type="${number.type}" defaultValue="1" remarks="数据状态"/>
+            <column name="create_time" type="datetime" remarks="创建时间"/>
+            <column name="create_by" type="${autoing.type}" remarks="创建者"/>
+            <column name="update_time" type="datetime" remarks="更新时间"/>
+            <column name="update_by" type="${autoing.type}" remarks="更新者"/>
+        </createTable>
+    </changeSet>
+
+</databaseChangeLog>
+

+ 36 - 0
train-server/src/main/resources/db/changelog/db-server.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<databaseChangeLog
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
+
+    <property name="schema.name" value="${database.defaultSchemaName}"/>
+    <property name="catalog.name" value="${database.defaultCatalogName}"/>
+
+    <property name="clob.type" value="longtext" dbms="h2"/>
+    <property name="clob.type" value="longtext" dbms="mysql,mariadb"/>
+    <property name="clob.type" value="clob"/>
+
+    <property name="autoing.type" value="bigint(20)" dbms="h2"/>
+    <property name="autoing.type" value="bigint(20)" dbms="mysql,mariadb"/>
+    <property name="autoing.type" value="serial"/>
+
+    <property name="number.type" value="bigint" dbms="h2"/>
+    <property name="number.type" value="int" dbms="mysql,mariadb"/>
+    <property name="number.type" value="serial"/>
+
+    <property name="now" value="now()" dbms="h2"/>
+    <property name="now" value="now()" dbms="mysql,mariadb"/>
+    <property name="now" value="sysdate"/>
+
+    <changeSet author="zhanghaijun" id="mysql_charsets_change" runOnChange="true" runAlways="true" failOnError="false" dbms="mysql,mariadb">
+        <validCheckSum>ANY</validCheckSum>
+        <sql dbms="mysql,mariadb" splitStatements="true" stripComments="true">
+            ALTER DATABASE ${schema.name} DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_bin
+        </sql>
+    </changeSet>
+
+    <include relativeToChangelogFile="true" file="db-server-train.xml"/>
+
+</databaseChangeLog>
+

+ 13 - 0
train-server/src/test/java/top/haijunit/train/TrainServerMainTests.java

@@ -0,0 +1,13 @@
+package top.haijunit.train;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class TrainServerMainTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

+ 91 - 0
train-server/src/test/java/top/haijunit/train/mapper/UserMapperTest.java

@@ -0,0 +1,91 @@
+package top.haijunit.train.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import jakarta.annotation.Resource;
+import org.assertj.core.api.Assertions;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import top.haijunit.train.model.UserDO;
+
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class UserMapperTest {
+    @Resource
+    private UserMapper userMapper;
+
+    /**
+     * 测试单条查询
+     */
+    @Test
+    public void testSelectOne() {
+        UserDO user = userMapper.selectById(1L);
+        System.out.println(user);
+    }
+
+    /**
+     * 测试新增
+     */
+    @Test
+    public void testInsert() {
+        UserDO user = new UserDO();
+        user.setUsername("kk");
+        user.setEmail("kk@qq.com");
+        assertThat(userMapper.insert(user)).isGreaterThan(0);
+        assertThat(user.getUserId()).isNotNull();
+    }
+
+    /**
+     * 测试删除
+     */
+    @Test
+    public void testDelete() {
+        assertThat(userMapper.deleteById(3L)).isGreaterThan(0);
+        assertThat(userMapper.delete(new QueryWrapper<UserDO>()
+            .lambda().eq(UserDO::getUsername, "kk"))).isGreaterThan(0);
+    }
+
+    /**
+     * 测试更新
+     */
+    @Test
+    public void testUpdate() {
+        UserDO user = userMapper.selectById(2);
+        assertThat(user.getUsername()).isEqualTo("Jack");
+        userMapper.update(null, Wrappers.<UserDO>lambdaUpdate().set(UserDO::getEmail, "zz@qq.com").eq(UserDO::getUserId, 1));
+        Assertions.assertThat(userMapper.selectById(2).getEmail()).isEqualTo("11@qq.com");
+    }
+
+    /**
+     * 测试查询列表
+     */
+    @Test
+    public void testSelect() {
+        List<UserDO> userList = userMapper.selectList(null);
+        Assert.assertEquals(5, userList.size());
+    }
+
+    /**
+     * 测试分页查询
+     */
+    @Test
+    public void testPage() {
+        Page<UserDO> page = new Page<>(1, 2);
+        IPage<UserDO> userIPage = userMapper.selectPage(page, new QueryWrapper<>());
+        assertThat(page).isSameAs(userIPage);
+        System.out.println("总条数: " + userIPage.getTotal());
+        System.out.println("当前页数: " + userIPage.getCurrent());
+        System.out.println("当前每页显示数: " + userIPage.getSize());
+        System.out.println("记录列表: " + userIPage.getRecords());
+    }
+
+}