SpringBoot集成mybatis連接oracle的圖文教程
一、背景
在實(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ì)很影響性能,用戶體驗(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 文件添加依賴:
<!-- 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)依賴 --> <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ō)明依賴添加成功了:
如果沒(méi)有:就需要手動(dòng)添加依賴:
先下載驅(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. 依賴添加成功后,就需要配置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類型 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)類
//不使用@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 層:
/** * 持久化類 * 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)類找不到,但是這個(gè)驅(qū)動(dòng)類jar包已經(jīng)添加到項(xiàng)目了,并且我也反編譯jar包,確認(rèn)路徑是對(duì)的。后來(lái)將target文件夾刪掉重新編譯,就沒(méi)有問(wèn)題了。
2.我用sys/root作為用戶名/密碼連接,報(bào),拒接連接,讓我創(chuàng)建sys連接并授權(quán)之類的,然后我就用/as sysdba登陸 創(chuàng)建了一個(gè)用戶,如圖所示(因?yàn)橹耙呀?jīng)建立了c##root用戶,這里就拿c##wx做例子):
由于tbl_person表是建立在sysdba用戶下的,在c##root用戶下不能查詢,在次用戶下想訪問(wèn)就需要將這個(gè)表單獨(dú)授權(quán)給c##root用戶,同時(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)目,然后如下訪問(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查詢,也支持原生的sql語(yǔ)句。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法,簡(jiǎn)單說(shuō)明了完數(shù)的概念、計(jì)算原理并結(jié)合實(shí)例形式分析了java針對(duì)給定范圍內(nèi)的完數(shù)輸出操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾)
下面小編就為大家?guī)?lái)一篇Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾) 。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12詳解SpringCloud-Alibaba-Seata分布式事務(wù)
這篇文章主要介紹了SpringCloud-Alibaba-Seata分布式事務(wù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Spring Boot 防止接口惡意刷新和暴力請(qǐng)求的實(shí)現(xiàn)
本文主要介紹了Spring Boot 防止接口惡意刷新和暴力請(qǐng)求的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Java并發(fā)編程線程間通訊實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Java并發(fā)編程線程間通訊實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05