最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成mybatis連接oracle的圖文教程

 更新時(shí)間:2022年02月26日 08:59:37   作者:無(wú)暇淺安時(shí)光  
這篇文章主要介紹了Spring Boot集成mybatis連接oracle的圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、背景

在實(shí)際開(kāi)發(fā)過(guò)程中是離不開(kāi)數(shù)據(jù)庫(kù)的,如果不使用任何框架,那么連接數(shù)據(jù)庫(kù)的代碼會(huì)散落在項(xiàng)目的各個(gè)地方,且容易出現(xiàn)各種連接數(shù)據(jù)庫(kù)問(wèn)題。

原始的連接數(shù)據(jù)庫(kù)的步驟

  • 1.加載驅(qū)動(dòng)(什么數(shù)據(jù)庫(kù),就記載什么驅(qū)動(dòng))
  • 2.獲取連接
  • 3.編寫(xiě)sql
  • 4.創(chuàng)建statement
  • 5.執(zhí)行sql語(yǔ)句并處理結(jié)果
  • 6.自下而上一次關(guān)閉連接(容易出現(xiàn)異常)

在實(shí)際開(kāi)發(fā)中,操作數(shù)據(jù)庫(kù)還是很頻繁的,如果按照這個(gè)步驟連接數(shù)據(jù)庫(kù),會(huì)很影響性能,用戶(hù)體驗(yàn)也不好。而Mybatis內(nèi)部封裝了jdbc,開(kāi)發(fā)人員只需要考慮sql語(yǔ)句的編寫(xiě)和處理返回結(jié)果,其余都封裝好了,這樣極

大程度減少了開(kāi)發(fā)工作量。

二、整合過(guò)程

稀里糊涂的就整合好了,自己卻是一臉蒙

springboot 集成mybatis連接oracle數(shù)據(jù)庫(kù)的過(guò)程

1.tools:Spring Boot, IDEA,Oracle,MyBatis,Maven…

2.在上一篇項(xiàng)目搭建成功的基礎(chǔ)上:

2.1 在POM.xml 文件添加依賴(lài):

<!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- 與數(shù)據(jù)庫(kù)操作相關(guān)依賴(lài) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- oracle -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.1.0</version>
        </dependency>

注意:在下面這個(gè)地方能看到,說(shuō)明依賴(lài)添加成功了:

如果沒(méi)有:就需要手動(dòng)添加依賴(lài):

先下載驅(qū)動(dòng)(ojdbc6.jar),cd到下載的ojdbc6.jar所在路徑,執(zhí)行命令

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -Dfile=ojdbc6.jar

出現(xiàn)BUILD SUCCES,說(shuō)明成功了。但是文件位置可能不對(duì),需要移到maven的Reponsitory中。將生成的oracle文件拷貝到相應(yīng)的目錄下。

查看reponsitory的位置:

放的路徑如下:

3. 依賴(lài)添加成功后,就需要配置mvc層

3.1 controller層:

 //第一行可以寫(xiě) @Restcontroller(返回json的controller)
//@Restcontroller = @Controller + @ResponseBody
@Controller
public class PersonController {
    @Resource
    private PersonIService personIService;
    @RequestMapping("/person")
    @ResponseBody//json返回
    public List<Person> findAll(){
       List<Person> list = personIService.findAll();
        return list;//[{},{}]
    }
    @RequestMapping("/findPersonByid/{id}")
    @ResponseBody//返回json類(lèi)型
    public Person findByid(@PathVariable("id") Integer id){
        return personIService.findByid(id);//{}
    }
}

3.2 service 層:

	@Service
public class PersonServiceImpl implements  PersonIService{
    @Autowired
    private IPersonDao dao;
    public List<Person> findAll(){
        return dao.findAll();
    }
     public Person findByid(Integer id){
        return dao.findByid(id);
    }

這里有個(gè)細(xì)節(jié)問(wèn)題:這個(gè)dao可能會(huì)報(bào)錯(cuò),但是不影響,如果看不習(xí)慣就在這里設(shè)置下:

3.3 dao層:注意:只有接口,沒(méi)有實(shí)現(xiàn)類(lèi)

//不使用@Mapper注解,通過(guò)使用.xml文件,在對(duì)應(yīng)的.xml寫(xiě)sql語(yǔ)句,查出數(shù)據(jù)并返回
public interface IPersonDao {
    public List<Person> findAll();
    public Person findByid(@Param("id") Integer id);
}
另外一種方法(拿其他栗子舉例):
//使用了@Mapper注解 ,就不需要再寫(xiě).xml文件
@Mapper
public interface IEmployeeDao {
    @Select("select * from tbl_emp e where e.name=#{name}")
    public List<Employee> findEmpByName(@Param("name") String name);
}

3.4 entity 層:

	/**
 * 持久化類(lèi)
 * by wx 2019-04-08
 */
public class Person implements Serializable {
    private static final long serialVersionUID = -6172780607087661025L;
    private Integer id;
    private String name;
    private String addr;
    private String company;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }
    public String getCompany() {
        return company;
    }
    public void setCompany(String company) {
        this.company = company;
    }
}

3.5 在application.yml文件配置連接數(shù)據(jù)庫(kù):

在這里遇到了2個(gè)問(wèn)題:

1.一直報(bào)這個(gè)驅(qū)動(dòng)類(lèi)找不到,但是這個(gè)驅(qū)動(dòng)類(lèi)jar包已經(jīng)添加到項(xiàng)目了,并且我也反編譯jar包,確認(rèn)路徑是對(duì)的。后來(lái)將target文件夾刪掉重新編譯,就沒(méi)有問(wèn)題了。

2.我用sys/root作為用戶(hù)名/密碼連接,報(bào),拒接連接,讓我創(chuàng)建sys連接并授權(quán)之類(lèi)的,然后我就用/as sysdba登陸 創(chuàng)建了一個(gè)用戶(hù),如圖所示(因?yàn)橹耙呀?jīng)建立了c##root用戶(hù),這里就拿c##wx做例子):

由于tbl_person表是建立在sysdba用戶(hù)下的,在c##root用戶(hù)下不能查詢(xún),在次用戶(hù)下想訪(fǎng)問(wèn)就需要將這個(gè)表單獨(dú)授權(quán)給c##root用戶(hù),同時(shí)還需要建同義詞,這樣就可以省略前綴sys.,直接通過(guò)表名就可以操作。

如圖所示:

3.6 入口函數(shù)配置掃描mapper,即:@MapperScan(“com.wx.springbootdemo.dao”)

@RestController
@SpringBootApplication
@MapperScan("com.wx.springbootdemo.dao")//要掃描的dao包
public class SpringbootdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootdemoApplication.class, args);
    }
}

3.7 mapper映射文件:

<?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.wx.springbootdemo.dao.IPersonDao">
            <select id="findAll" resultType="com.wx.springbootdemo.entity.Person">
        select id,name,addr ,company from tbl_person
    </select>
    <select id="findByid" resultType="com.wx.springbootdemo.entity.Person">
            select * from tbl_person where id = #{id}
        </select>
        </mapper>

3.8 項(xiàng)目結(jié)構(gòu):

測(cè)試:先啟動(dòng)項(xiàng)目,然后如下訪(fǎng)問(wèn):

另一種測(cè)試方法(Spring Boot 內(nèi)嵌的tools),如下圖:

個(gè)人感悟

  • Mybatis:雖然做到了代碼和sql語(yǔ)句分離,但是無(wú)法做到數(shù)據(jù)庫(kù)無(wú)關(guān)性,即換了一個(gè)數(shù)據(jù)庫(kù)例如mysql,很多語(yǔ)句就得做修改。
  • Hibernate:是ORM框架,做到了數(shù)據(jù)庫(kù)無(wú)關(guān)性,很好的封裝了底層jdbc。支持獨(dú)特的Hql查詢(xún),也支持原生的sql語(yǔ)句。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java后端返回?cái)?shù)據(jù)給前端時(shí)去除值為空或NULL的屬性、忽略某些屬性代碼示例

    java后端返回?cái)?shù)據(jù)給前端時(shí)去除值為空或NULL的屬性、忽略某些屬性代碼示例

    在Java開(kāi)發(fā)中我們處理JSON數(shù)據(jù)時(shí)經(jīng)常會(huì)遇到空值(null)的情況,這篇文章主要給大家介紹了關(guān)于java后端返回?cái)?shù)據(jù)給前端時(shí)去除值為空或NULL的屬性、忽略某些屬性的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Java高級(jí)特性基礎(chǔ)之反射五連問(wèn)

    Java高級(jí)特性基礎(chǔ)之反射五連問(wèn)

    反射賦予了我們?cè)谶\(yùn)行時(shí)分析類(lèi)以及執(zhí)行類(lèi)中方法的能力。通過(guò)反射你可以獲取任意一個(gè)類(lèi)的所有屬性和方法,你還可以調(diào)用這些方法和屬性。本文就來(lái)和大家詳細(xì)聊聊Java中的反射,感興趣的可以了解一下
    2023-01-01
  • springboot CompletableFuture并行計(jì)算及使用方法

    springboot CompletableFuture并行計(jì)算及使用方法

    CompletableFuture基于 Future 和 CompletionStage 接口,利用線(xiàn)程池、回調(diào)函數(shù)、異常處理、組合操作等機(jī)制,提供了強(qiáng)大而靈活的異步編程功能,這篇文章主要介紹了springboot CompletableFuture并行計(jì)算及使用方法,需要的朋友可以參考下
    2024-05-05
  • Java核心庫(kù)實(shí)現(xiàn)簡(jiǎn)單的AOP

    Java核心庫(kù)實(shí)現(xiàn)簡(jiǎn)單的AOP

    這篇文章主要介紹了如何用Java核心庫(kù)實(shí)現(xiàn)簡(jiǎn)單的AOP,幫助大家為了更好的理解和學(xué)習(xí)AOP的思想,感興趣的朋友可以了解下
    2020-08-08
  • 詳解Java的Hibernate框架中的set映射集與SortedSet映射

    詳解Java的Hibernate框架中的set映射集與SortedSet映射

    這篇文章主要介紹了詳解Java的Hibernate框架中的set映射集與SortedSet映射,Hibernate是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • 自定義application.yml配置項(xiàng)方式

    自定義application.yml配置項(xiàng)方式

    這篇文章主要介紹了自定義application.yml配置項(xiàng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java靜態(tài)代理和動(dòng)態(tài)代理詳解

    Java靜態(tài)代理和動(dòng)態(tài)代理詳解

    這篇文章主要介紹了Java靜態(tài)代理和動(dòng)態(tài)代理,本文通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-11-11
  • Java排序算法中的選擇排序算法實(shí)現(xiàn)

    Java排序算法中的選擇排序算法實(shí)現(xiàn)

    這篇文章主要介紹了Java排序算法中的選擇排序算法實(shí)現(xiàn),選擇排序算法的實(shí)現(xiàn)思路類(lèi)似插入排序,分已排序區(qū)間和未排序區(qū)間,選擇排序每次會(huì)從未排序區(qū)間中找到最小(大)的元素,將其放到已排序區(qū)間的末尾,需要的朋友可以參考下
    2023-12-12
  • java如何使用redis加鎖

    java如何使用redis加鎖

    這篇文章主要介紹了java如何使用redis加鎖問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java實(shí)現(xiàn)數(shù)字金額轉(zhuǎn)中文大寫(xiě)金額的完整過(guò)程

    Java實(shí)現(xiàn)數(shù)字金額轉(zhuǎn)中文大寫(xiě)金額的完整過(guò)程

    本程序?qū)崿F(xiàn)將用戶(hù)輸入的整數(shù)金額(0~9999999)轉(zhuǎn)換為符合財(cái)務(wù)規(guī)范的中文大寫(xiě)金額,并自動(dòng)添加單位符號(hào)(如“萬(wàn)”、“仟”、“佰”等),例如輸入 1234,輸出 壹仟貳佰叁拾肆元,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2025-04-04

最新評(píng)論

武山县| 阿勒泰市| 府谷县| 普洱| 滦平县| 崇文区| 三台县| 北京市| 黑水县| 滨州市| 巴彦淖尔市| 余庆县| 南安市| 延川县| 大邑县| 康定县| 上栗县| 沅江市| 涟水县| 开平市| 临潭县| 潜江市| 高邑县| 广水市| 九寨沟县| 定西市| 昌都县| 梧州市| 同心县| 沿河| 佛坪县| 阿鲁科尔沁旗| 上栗县| 哈巴河县| 大石桥市| 三都| 平凉市| 南宫市| 大连市| 乌兰浩特市| 昭觉县|