SpringBoot+Mybatis+Oracle+Tomcat-jdbc 詳細demo

轉自:https://blog.csdn.net/iku5200/article/details/82856621

前期準備

IDEA、Oracle、maven、JDK 配置

新建項目

在這裏插入圖片描述
2. 在這裏插入圖片描述
3. 在這裏插入圖片描述
4. 在這裏插入圖片描述
5. 在這裏插入圖片描述
6.
在這裏插入圖片描述

修改配置

  1. maven本地倉庫設置 File > settings >
    在這裏插入圖片描述
  2. 修改pom.xml
    加入如下依賴,該過程較慢,等maven下載完依賴包(oracle需自己手動構建到maven中):
<!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>

        <!-- Spring Boot JDBC Pool -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
            <version>9.0.29</version>
        </dependency>

        <!-- Spring Boot JDBC -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>

        <!-- oracle -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>10.2.0.3.0</version>
        </dependency>
  1. 刷新maven
    在這裏插入圖片描述
  2. 不使用application.properties文件,使用更加簡潔的application.yml文件(備註:其實SpringBoot底層會把application.yml文件解析爲application.properties)。將resource文件夾下原有的application.properties文件刪除,創建application.yml和application-dev.yml配置文件。
    在這裏插入圖片描述

application.yml

spring:
  profiles:
    active: dev

application-dev.yml

server:
  port: 8080


spring:
  jpa:
    database: oracle
  datasource:
    username: scott
    password: scott
    url: jdbc:oracle:thin:@127.0.0.1:1521/orcl
    driver-class-name: oracle.jdbc.driver.OracleDriver


mybatis:
  mapper-locations: classpath:mapping/*Mapper.xml
  type-aliases-package: com.example.entity

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

配置文件意義:

在項目中配置多套環境的配置方法。
因爲現在一個項目有好多環境,開發環境,測試環境,準生產環境,生產環境,每個環境的參數不同,所以我們就可以把每個環境的參數配置到yml文件中,這樣在想用哪個環境的時候只需要在主配置文件中將用的配置文件寫上就行如application.yml
筆記:在Spring Boot中多環境配置文件名需要滿足application-{profile}.yml的格式,其中{profile}對應你的環境標識,比如:
application-dev.yml:開發環境
application-test.yml:測試環境
application-prod.yml:生產環境
至於哪個具體的配置文件會被加載,需要在application.yml文件中通過spring.profiles.active屬性來設置,其值對應{profile}值。

還有配置文件中最好不要有中文註釋,會報錯。解決方案:spring boot 中application.yml中文亂碼

  1. 接下來把啓動文件移到com.example下,而且springboot的啓動類不能放在java目錄下!!!必須要個包將它包進去,否則會報錯誤。
    在這裏插入圖片描述

創建實體類實現業務流程

  1. 預先創建數據庫表myuser
    在這裏插入圖片描述
CREATE TABLE myuser(
  id number NOT NULL,
  userName varchar(32) NOT NULL,
  passWord varchar(50) NOT NULL,
  realName varchar(32) DEFAULT NULL,
  PRIMARY KEY (id)
);

填入如下數據:
在這裏插入圖片描述

  1. 創建包controller、entity、mapper、service。resources下創建mapping文件夾,用於寫sql語句,也可以用註解的方式直接寫在mapper文件裏。

框架結構
在這裏插入圖片描述

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">

    <resultMap id="BaseResultMap" type="com.example.entity.User">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="userName" jdbcType="VARCHAR" property="userName" />
        <result column="passWord" jdbcType="VARCHAR" property="passWord" />
        <result column="realName" jdbcType="VARCHAR" property="realName" />
    </resultMap>

    <select id="Sel" resultType="com.example.entity.User">
        select * from myuser where id = #{id}
    </select>

</mapper>

UserController.java

package com.example.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


import com.example.service.UserService;

@RestController
@RequestMapping("/testBoot")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("getUser/{id}")
    public String GetUser(@PathVariable int id){
        return userService.Sel(id).toString();
    }
}

User.java

package com.example.entity;

public class User {
    private Integer id;
    private String userName;
    private String passWord;
    private String realName;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", realName='" + realName + '\'' +
                '}';
    }
}

UserMapper.java

package com.example.mapper;

import org.springframework.stereotype.Repository;
import com.example.entity.User;

@Repository
public interface UserMapper {
    User Sel(int id);
}

UserService.java

package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.entity.User;
import com.example.mapper.UserMapper;


@Service
public class UserService {
    @Autowired
    UserMapper userMapper;
    public User Sel(int id){
        return userMapper.Sel(id);
    }
}

DemoApplication.java

package com.example;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com/example/mapper")
@SpringBootApplication
public class DemoApplication {

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

}
  1. 輸入網址,查看結果
    在這裏插入圖片描述

一些經驗(坑)

1、數據庫連接問題,一般默認的數據庫SID都是orcl
在這裏插入圖片描述
配置文件中要注意:
在這裏插入圖片描述

  1. springboot啓動錯誤: 找不到或無法加載主類(原因在於改寫了main所在的文件名)
    在這裏插入圖片描述
  2. Springboot啓動application報錯:Field userMapper in xxx required a bean of type xx that could not be found
    原因在於代碼中啓動類中缺少內容(參考https://blog.csdn.net/pmdream/article/details/81188426

解決辦法:
在主函數類上添加以上註解,可以掃描dao包中的所有接口,替代在每個dao中寫@Mapper註解,這樣會提高耦合度。
加上@MapperScan註解 後面是mapper接口的類的地址

@MapperScan("com.example.mapper")

@MapperScan的理解:使用該註解,可以免去每個Mapper類都加上@Mapper

這個註解也可以同時掃描多個包,
如果如果mapper類沒有在Spring Boot主程序可以掃描的包或者子包下面,可以使用如下方式進行配置

@SpringBootApplication  
@MapperScan({"com.example.*.mapper","org.example.*.mapper"})  
public class App {  
    public static void main(String[] args) {  
       SpringApplication.run(App.class, args);  
    }  
} 
  1. 無法引入org.apache.ibatis.annotations.Select , 解決pom.xml中引入如下版本的mybatis
    在這裏插入圖片描述

  2. yml 配置文件不生效,解決注意格式問題(冒號後面跟上一個空格)

  3. 數據庫連接池不用默認的,改用tomcat-jdbc 需要在pom.xml中加入相關dependency
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章