SpringBoot集成mybatis連接oracle的圖文教程
一、背景
在實際開發過程中是離不開數據庫的,如果不使用任何框架,那麼連接數據庫的代碼會散落在項目的各個地方,且容易出現各種連接數據庫問題。
原始的連接數據庫的步驟
- 1.加載驅動(什麼數據庫,就記載什麼驅動)
- 2.獲取連接
- 3.編寫sql
- 4.創建statement
- 5.執行sql語句並處理結果
- 6.自下而上一次關閉連接(容易出現異常)
在實際開發中,操作數據庫還是很頻繁的,如果按照這個步驟連接數據庫,會很影響性能,用戶體驗也不好。而Mybatis內部封裝瞭jdbc,開發人員隻需要考慮sql語句的編寫和處理返回結果,其餘都封裝好瞭,這樣極
大程度減少瞭開發工作量。
二、整合過程
稀裡糊塗的就整合好瞭,自己卻是一臉蒙
springboot 集成mybatis連接oracle數據庫的過程
1.tools:Spring Boot, IDEA,Oracle,MyBatis,Maven…
2.在上一篇項目搭建成功的基礎上:
2.1 在POM.xml 文件添加依賴:
<!-- Mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!-- 與數據庫操作相關依賴 --> <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>
註意:在下面這個地方能看到,說明依賴添加成功瞭:
如果沒有:就需要手動添加依賴:
先下載驅動(ojdbc6.jar),cd到下載的ojdbc6.jar所在路徑,執行命令
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -Dfile=ojdbc6.jar
出現BUILD SUCCES,說明成功瞭。但是文件位置可能不對,需要移到maven的Reponsitory中。將生成的oracle文件拷貝到相應的目錄下。
查看reponsitory的位置:
放的路徑如下:
3. 依賴添加成功後,就需要配置mvc層
3.1 controller層:
//第一行可以寫 @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); }
這裡有個細節問題:這個dao可能會報錯,但是不影響,如果看不習慣就在這裡設置下:
3.3 dao層:註意:隻有接口,沒有實現類
//不使用@Mapper註解,通過使用.xml文件,在對應的.xml寫sql語句,查出數據並返回 public interface IPersonDao { public List<Person> findAll(); public Person findByid(@Param("id") Integer id); } 另外一種方法(拿其他栗子舉例): //使用瞭@Mapper註解 ,就不需要再寫.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文件配置連接數據庫:
在這裡遇到瞭2個問題:
1.一直報這個驅動類找不到,但是這個驅動類jar包已經添加到項目瞭,並且我也反編譯jar包,確認路徑是對的。後來將target文件夾刪掉重新編譯,就沒有問題瞭。
2.我用sys/root作為用戶名/密碼連接,報,拒接連接,讓我創建sys連接並授權之類的,然後我就用/as sysdba登陸 創建瞭一個用戶,如圖所示(因為之前已經建立瞭c##root用戶,這裡就拿c##wx做例子):
由於tbl_person表是建立在sysdba用戶下的,在c##root用戶下不能查詢,在次用戶下想訪問就需要將這個表單獨授權給c##root用戶,同時還需要建同義詞,這樣就可以省略前綴sys.,直接通過表名就可以操作。
如圖所示:
3.6 入口函數配置掃描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 項目結構:
測試:先啟動項目,然後如下訪問:
另一種測試方法(Spring Boot 內嵌的tools),如下圖:
個人感悟
Mybatis
:雖然做到瞭代碼和sql語句分離,但是無法做到數據庫無關性,即換瞭一個數據庫例如mysql,很多語句就得做修改。Hibernate
:是ORM框架,做到瞭數據庫無關性,很好的封裝瞭底層jdbc。支持獨特的Hql查詢,也支持原生的sql語句。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- MyBatis中多條件查詢商品的三種方法及區別
- MyBatis配置的應用與對比jdbc的優勢
- SpringBoot框架整合Mybatis簡單攻略
- springboot配置mybatis和事務管理方式
- mybatis-plus復合主鍵的使用