信息发布→ 登录 注册 退出

SpringBoot集成mybatis连接oracle的图文教程

发布时间:2026-01-11

点击量:
目录
  • 一、背景
    • 原始的连接数据库的步骤
  • 二、整合过程
    • 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语句。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

    在线客服
    服务热线

    服务热线

    4008888355

    微信咨询
    二维码
    返回顶部
    ×二维码

    截屏,微信识别二维码

    打开微信

    微信号已复制,请打开微信添加咨询详情!