1. 程式人生 > 實用技巧 >Springboot-Mybatis-Oracle-H2-Properties demo

Springboot-Mybatis-Oracle-H2-Properties demo

先說廢話: 之前有一片sprin 框架的Mybatis 框架,這個是為將之改造為springboot而生

程式碼中有註釋的地方刻意沒有刪, 心思比較細的話,可以瞭解下

先上程式碼結構:

pom檔案:

<?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>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository
--> </parent> <groupId>com.adao</groupId> <artifactId>mybaits</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mybaits</name> <description>Demo project for Spring Boot</description> <properties> <
java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId> spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>10.2.0.2.0</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>cn.easyproject</groupId> <artifactId>orai18n</artifactId> <version>12.1.0.2.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
MAIN 檔案
包: com.adao.mybatis

PropertiesUtil 有註釋的地方是
package com.adao.mybaits.common;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * @Classname PropertiesUtil
 * @Description TODO
 * @Date 2020/7/23
 * @Created ADAO
 */
@Configuration
@ConfigurationProperties(prefix = "config", ignoreUnknownFields = false)
//@PropertySource("classpath:config.properties")
@Component
public class PropertiesUtil {

    @Value("${socket.server.address}")
    private String serverAddress;
    @Value("${socket.server.port}")
    private String serverPort;
    public String getServerAddress() {
        return serverAddress;
    }
    public void setServerAddress(String serverAddress) {
        this.serverAddress = serverAddress;
    }
    public String getServerPort() {
        return serverPort;
    }
    public void setServerPort(String serverPort) {
        this.serverPort = serverPort;
    }
}
TerController
package com.adao.mybaits.controller;

import com.adao.mybaits.common.PropertiesUtil;
import com.adao.mybaits.entity.TerminalBean;
import com.adao.mybaits.service.TerminalService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @Classname TerController
 * @Description TODO
 * @Date 2020/7/23
 * @Created ADAO
 */
//@EnableConfigurationProperties(PropertiesUtil.class)
@RestController
@RequestMapping("/test")
public class TerController {

    @Autowired
    PropertiesUtil propertiesUtil;

    @Autowired
    private TerminalService terminalService;

    @RequestMapping("getTer/{id}")
    public String GetUser(@PathVariable long id) {
        System.out.println("terminalService ##############: " + terminalService);
        String teaminalName = terminalService.getTerNameById(String.valueOf(id));
        System.out.println(teaminalName);

        return teaminalName;
    }
    @RequestMapping("getTaskTer/{id}")
    public long getTaskTer(@PathVariable long id) {
        //"1433142404804l"
        List<TerminalBean> b = terminalService.getTerListByTaskId(id);
        System.out.println(b.get(0).getTerminalAddress());
        return b.get(0).getTerminalAddress();
    }

    @RequestMapping("getTer")
    public String GetUser() {
        System.out.println("terminalService ##############: " + terminalService);
        List<TerminalBean> list = terminalService.list();
        System.out.println("資料庫有" + list.size() + "條終端記錄");
        return "資料庫有" + list.size() + "條終端記錄";
    }

    @RequestMapping("getProperties")
    public String testProperties() {
        String str = propertiesUtil.getServerAddress();
        String i = propertiesUtil.getServerPort();
        System.out.println(str);
        System.out.println(i);
        return str + i;
    }

    @RequestMapping("setProperties")
    public String setProperties() {
        propertiesUtil.setServerAddress("192.168.127.222");
        propertiesUtil.setServerPort("8888");
        String str2 = propertiesUtil.getServerAddress();
        String i2 = propertiesUtil.getServerPort();
        System.out.println(str2);
        System.out.println(i2);
        return str2 + i2;
    }

}



TerminalMapper
package com.adao.mybaits.dao;

import java.util.List;
import java.util.Map;

import com.adao.mybaits.entity.TerminalBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

/**
 * 終端mapper
 * 
 */
//@Repository
//@Transactional
//@Mapper
@Component
public interface TerminalMapper {
    
    /**
     * 根據ID取終端名稱
     * 
     * @param terId
     * @return
     */
    public String getTerNameById(long terId);
    
    public List<TerminalBean> list();

    /**
     * 根據taskId獲取對應的終端資訊
     * @param taskId
     * @return
     */
    public List<TerminalBean> getTerListByTaskId(long taskId);

    /**
     * @Author 瞿天賜
     * @Description 根據終端ID查詢表地址ID
     * @Date 2020/07/09
     * @Param [terminalId]
     * @return java.util.List<java.lang.Long>
     **/
    public List<Map<String,Object>> getMpointIdList(@Param("terminalId") long terminalId);

}
TerminalBean.
package com.adao.mybaits.entity;

/**
 * 終端檔案
 */
public class TerminalBean {


    private long terminalId; // 終端ID

    private long terminalAddress;// 終端地址

    public long getTerminalId() {
        return terminalId;
    }

    public void setTerminalId(long terminalId) {
        this.terminalId = terminalId;
    }

    public long getTerminalAddress() {
        return terminalAddress;
    }

    public void setTerminalAddress(long terminalAddress) {
        this.terminalAddress = terminalAddress;
    }

}
TerminalService

package com.adao.mybaits.service;

import com.adao.mybaits.entity.TerminalBean;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 業務介面
 * 
 * @author ADAO
 * 2020-06-23
 */


public interface TerminalService {
    /**
     * 測試方法 :獲取列表
     * 
     * @return
     */
    public List<TerminalBean> list();

    /**
     * 測試方法 :獲取終端名
     * 
     * @return
     */
    public String getTerNameById(String id);

    /**
     * 根據任務id獲取對應的終端資訊
     * @param taskId
     * @return
     */
    public List<TerminalBean> getTerListByTaskId(long taskId);

    /**
     * @Author 瞿天賜
     * @Description 根據終端ID查詢表地址ID
     * @Date 2020/07/09
     * @Param [terminalId]
     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     **/
    public List<Map<String,Object>> getMpointIdList(long terminalId);

}
MybaitsApplication
package com.adao.mybaits;

import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@MapperScan(basePackages = {"com.adao.mybaits.dao"})
@SpringBootApplication
//@ComponentScan(basePackages = {"com.adao.mybaits"})
public class MybaitsApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybaitsApplication.class, args);
    }

}

TerminalServiceImpl
package com.adao.mybaits.service.impl;


import com.adao.mybaits.entity.TerminalBean;
import com.adao.mybaits.dao.TerminalMapper;
import com.adao.mybaits.service.TerminalService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 實現類
 *
 * @author ADAO
 * 2020-06-23
 */

@Service
public class TerminalServiceImpl implements TerminalService {

    @Autowired
    private TerminalMapper terminalMapper;

    @Override
    public List<TerminalBean> list() {
        System.out.println("terminalMapper####################" +terminalMapper);
        return terminalMapper.list();
    }

    @Override
    public String getTerNameById(String id) {

        //long terId = Long.parseLong("1437640452317");
        long terId = Long.parseLong(id);
        String teaminalName = terminalMapper.getTerNameById(terId);
        return teaminalName;
    }

    @Override
    public List<TerminalBean> getTerListByTaskId(long taskId) {
        List<TerminalBean> terminalBeans = terminalMapper.getTerListByTaskId(taskId);
        return terminalBeans;
    }

    @Override
    public List<Map<String, Object>> getMpointIdList(long terminalId) {
        return terminalMapper.getMpointIdList(terminalId);
    }
}

RESOURCE 檔案

mapping/TerminalMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.adao.mybaits.dao.TerminalMapper">

    <select id="getTerNameById" resultType="String">
        select TERMINAL_NAME
        from T_TERMINAL  where TERMINAL_ID=#{terId}
    </select>

    <select id="list" resultType="com.adao.mybaits.entity.TerminalBean">
        select * from T_TERMINAL
    </select>

    <select id="getTerListByTaskId" resultType="com.adao.mybaits.entity.TerminalBean">
        select t.TERMINAL_ID terminalId, t.TERMINAL_ADDRESS terminalAddress
        from T_TASK_DEVICE_RELATION tdr, T_TERMINAL t
        where TASK_ID=#{taskId}
        and t.TERMINAL_ID = tdr.DEVICE_ID
    </select>
    <select id="getMpointIdList" resultType="java.util.Map">
        SELECT
        m.MPOINT_ID mpointId,
        m.MPOINT_INDEX mpointIndex
        FROM T_TERMINAL t
        LEFT JOIN T_MPOINT m ON t.TERMINAL_ID = m.TERMINAL_ID
        WHERE t.TERMINAL_ID = #{terminalId}
    </select>

</mapper>

配置檔案:

appliation.yml

#spring:
#      profiles:
#        active:dev

############################################################
#
# 配置資料來源資訊
#
############################################################
spring:
  datasource:                                           # 資料來源的相關配置
    type: com.zaxxer.hikari.HikariDataSource          # 資料來源型別:HikariCP
    driver-class-name: oracle.jdbc.OracleDriver   # oracle驅動
    url: jdbc:oracle:thin:@192.168.127.150:1521:ORCL
    username: coll_platform
    password: coll_platform
    hikari:
      connection-timeout: 30000       # 等待連線池分配連線的最大時長(毫秒),超過這個時長還沒可用的連線則發生SQLException, 預設:30秒
      minimum-idle: 5                 # 最小連線數
      maximum-pool-size: 20           # 最大連線數
      auto-commit: true               # 自動提交
      idle-timeout: 600000            # 連線超時的最大時長(毫秒),超時則被釋放(retired),預設:10分鐘
      pool-name: DateSourceHikariCP     # 連線池名字
      max-lifetime: 1800000           # 連線的生命時長(毫秒),超時而且沒被使用則被釋放(retired),預設:30分鐘 1800000ms
############################################################
#
# mybatis 配置
#
############################################################
mybatis:
  type-aliases-package: com.adao.mybaits.entity       # 所有POJO類所在包路徑
  mapper-locations: classpath:mapping/TerminalMapper.xml      # mapper對映檔案

server:
  port: 8080

#showSql
logging:
  level:
    com:
      example:
        mapper : debug

config.properties

#socket server config
socket.server.address=127.0.0.1
socket.server.port=8511

執行結果

控制檯hikari日誌

完美