关系型数据库访问(RDBMS)

采用JdbcTemplate、MyBatis、JPA、Hibernate等技术。

一、JdbcTemplate工具

  • 在pom.xml添加boot-starter-jdbc定义

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.7.RELEASE</version>
    </parent> <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    </properties> <dependencies>
    <dependency><!-- jdbc -->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency> <dependency>
    <groupId>com.oracle</groupId><!-- oracle的版本-->
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.3</version>
    </dependency>
    </dependencies>
  • 在application.properties添加链接参数定义

    spring.datasource.username=SCOTT
    spring.datasource.password=TIGER
    spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
    spring.datasource.driverClassName=oracle.jdbc.OracleDriver
  • 根据DEPT表编写Dept实体类

    public class Dept implements Serializable{
    
        private Integer deptno;
    private String dname;
    private String loc; //set和get省略
    }
  • 定义DeptDao接口

    public interface DeptDao {
    
        public List<Dept> findAll();
    
    }
  • 定义JdbcDeptDao实现类

    @Repository("deptDao")
    public class JdbcDeptDao implements DeptDao { @Autowired
    private JdbcTemplate jdbcTemplate; public List<Dept> findAll() {
    String sql = "select * from DEPT";
    //BeanPropertyRowMapper功能同名加载。查询结果集列名和实体类属性名一致,类似写了一个Maper
    RowMapper<Dept> rowMapper = new BeanPropertyRowMapper<Dept>(Dept.class);
    List<Dept> list = jdbcTemplate.query(sql, rowMapper);
    return list;
    } }
  • 定义主启动类,开启自动配置和扫描等功能

    @SpringBootApplication
    public class MyBootApplication { }
  • 测试程序

    public static void main(String[] args) {
    ApplicationContext ac = SpringApplication.run(MyBootApplication.class);
    DeptDao deptDao = ac.getBean("deptDao",DeptDao.class);
    List<Dept> list = deptDao.findAll();
    for(Dept dept:list){
    System.out.println(dept.getDeptno()
    +" "+dept.getDname()+" "+dept.getLoc());
    }
    }

    二、MyBatis工具

    1. 在pom.xml添加boot-starter-jdbc、mybatis-boot定义

      <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.4.7.RELEASE</version>
      </parent> <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      </properties> <dependencies> <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
      </dependency> <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0.3</version>
      </dependency> <!-- mybatis、mybatis-spring、autocofigurer -->
      <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.0</version>
      </dependency> </dependencies>
    2. 在application.properties添加数据库连接参数定义

      spring.datasource.username=SCOTT
      spring.datasource.password=TIGER
      spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
      spring.datasource.driverClassName=oracle.jdbc.OracleDriver
    3. 根据DEPT表定义Dept实体类

      同上
    4. 定义Mapper映射器DeptDao接口、利用注解定义SQL

      public interface DeptDao {
      
          @Select("select * from DEPT")
      public List<Dept> selectAll(); @Select("select * form DEPT where DEPTNO=#{no}")
      public Dept selectById(int id); @Insert("insert into DEPT(DEPTNO,DNAME,LOC) values (#{deptno},#{dname},#{loc})")
      public void save(Dept dept); }
    5. 定义主启动类,添加MapperScan标记

      @SpringBootApplication
      @MapperScan(basePackages={"cn.xdl.dao"}) //扫描指定包中的dao类
      public class MyBootApplication { }
    6. 测试程序

      public static void main(String[] args) {
      ApplicationContext ac = SpringApplication.run(MyBootApplication.class, args);
      DeptDao deptDao = ac.getBean("deptDao",DeptDao.class);
      List<Dept> list = deptDao.selectAll();
      for(Dept dept:list){
      System.out.println(dept.getDeptno()+" "+dept.getDname());
      }
      }
    7. 追加pageHelper分页处理

      <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.2.3</version>
      </dependency> <!-- 指定添加一个分页组件pageHelp-->

      然后在调用查询方法前,执行下PageHelper.startPage()方法即可

      PageHelper.startPage(2, 3);
      List<Dept> list = deptDao.selectAll();

    Mybatis使用注意问题:

    1. SQL参数使用#{}和${}的区别

      • 采用#{}格式,预编译SQL执行机制,SQL发送时采用?
      • ${}采用Statement执行机制,参数值拼到SQL中
      • SQL字段值位置使用#{},字段名或表名位置使用${}
    2. 异常:"无效列类型:1111"

      参数#{}遇到null值情况,会提示上述异常。在可能为null参数位置,使用#{}时,需要指定jdbcType属性,例如#{xx,jdbcType=XXX}

      三、JPA工具

      1. 在pom.xml追加boot-jdbc、boot-data-jpa包定义

        <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        </parent> <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        </properties> <dependencies> <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency> <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
        </dependency> <!-- jpa -->
        <dependency>
        <groupId>org.springframework.boot</groupId><!-- 导入jpa的jar包 -->
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency> </dependencies>
      2. 在application.properties文件追加数据库连接参数定义

        spring.datasource.username=SCOTT
        spring.datasource.password=TIGER
        spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
        spring.datasource.driverClassName=oracle.jdbc.OracleDriver
      3. 根据DEPT表编写Dept实体类,并追加映射注解标记

        @Entity  //标识为实体类
        @Table(name="DEPT") //标识为数据库中的表名
        public class Dept implements Serializable{ @Id //指定前的字段为主键
        @Column(name="DEPTNO") //指定目标字段与当前字段相同
        private Integer deptno; @Column(name="DNAME")
        private String dname; @Column(name="LOC")
        private String loc; //省略set和get方法 }
      4. 定义DeptDao接口,可以继承JpaRepository

        public interface DeptDao extends JpaRepository<Dept, Integer>{
        
        }

        Repository:顶级接口,无任何操作

        CrudRepository:继承了Repository,增加了增删改查操作方法

        PagingAndSortingRepository:继承CrudRepository,增加了分页和排序操作

        JpaRepository:继承了PagingAndSortingRepository,增加批处理操作

      5. 测试程序

        public static void main(String[] args) {
        ApplicationContext ac =
        SpringApplication.run(MyBootApplication.class, args);
        DeptDao deptDao = ac.getBean("deptDao",DeptDao.class);
        List<Dept> list = deptDao.findAll();
        for(Dept dept:list){
        System.out.println(dept.getDeptno()+" "+dept.getDname());
        }
        }
        Sql语句中常用连接词

        四、Hibernate工具(后续讲解)

      6. 未完待续.........

SpringBoot数据库访问(一)--------关系型数据库访问(RDBMS)的更多相关文章

  1. 数据库 --> 5种关系型数据库比较

    5种关系系数据库比较 目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟.面向对象的数据库管理系统虽然技术先进,数据库易于开发.维护,但尚未有成熟的产品.国际国内的主导关系型数据库管理 ...

  2. Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念

    Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念 在学习redis之前我们先来学习两个概念,即什么是关系型数据库什么是非关系型数据库,二者的区别是什么,二者的关系又是什么? ** ...

  3. MongoDB(一):关系型数据库和非关系型数据库

    一.关系型数据库 1.概念 关系型数据库:是指采用了关系模型来组织数据的数据库,是目前各类数据库中使用最为广泛的数据库系统.简单的说,关系模型指的就是二维表格模型,一个关系型数据库就是由二维表及其之间 ...

  4. 数据库基础 非关系型数据库 MongoDB 和 redis

    数据库基础 非关系型数据库 MongoDB 和 redis 1 NoSQL简介 访问量增加,频繁的读写 直接访问(硬盘)物理级别的数据,会很慢 ,关系型数据库的压力会很大 所以,需要内存级的读写操作, ...

  5. 【Redis】(1)-- 关系型数据库与非关系型数据库

    关系型数据库与非关系型数据库 2019-07-02  16:34:48  by冲冲 1. 关系型数据库 1.1 概念 关系型数据库,是指采用了关系模型来组织数据的数据库.关系模型指的就是二维表格模型, ...

  6. NoSQL:从关系型数据库到非关系型数据库

    关系型数据库 所谓关系型数据库,,就是指采用了关系模型来组织数据的数据库. 什么是关系模型,简单说,关系模型就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织. 关系模 ...

  7. python 之操作redis数据库(非关系型数据库,k-v)

    数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...

  8. Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)

    day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库:    简称:DataBase ---->DB    数据库即存放数据的仓库, ...

  9. 数据库:mongodb与关系型数据库相比的优缺点 (转)

    与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...

随机推荐

  1. asp.net 下载EXCEL文件

    一.需要导入NPOI 库文件 打开VS2012 工具>>库程序包管理器>>管理解决方案的NuGet程序包,搜索NPOI,如下图 安装完成: 添加 using NPOI.HSSF ...

  2. 网易云首席安全架构师谈安全新形势:DDOS两三天,游戏玩家数从几万降到几百

    本文由  网易云发布. 安全是一个永恒的话题,在业务不断云化.攻击越来越复杂的当下,互联网安全呈现了出什么样的严峻形势?对这些形势,网易云又是如何应对的? 网易云首席安全架构师沈明星 4月13日,网易 ...

  3. 前端分享----JS异步编程+ES6箭头函数

    前端分享----JS异步编程+ES6箭头函数 ##概述Javascript语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只 ...

  4. NGINX部署

  5. Android------------------的资源文件的学习

    一.style的学习 用法: 使用: 使用系统自带的style的风格 使用: 效果: 二.drawable的使用 selector是一个xml文件进行加载使用的: 文件名叫做buttonselecto ...

  6. OCP 12c 062题库大更新,出现大量新题-5

    5.One of your databases supports an OLTP workload. The default undo tablespace is fixed size with: 1 ...

  7. jzoj5923

    我們可以記f[i]表示i個點的連通圖的個數 則我們可以考慮將i個點不必聯通的圖個數(記為g)減去i個點的不連通圖個數 那麼f[i]=g[i]-c(j-1,i-1)f[j]gi-j 枚舉一個j,強制將j ...

  8. Flask从入门到精通之重定向和用户会话

    最新版的hello.py 存在一个可用性问题.用户输入名字后提交表单,然后点击浏览器的刷新按钮,会看到一个莫名其妙的警告,要求在再次提交表单之前进行确认.之所以出现这种情况,是因为刷新页面时浏览器会重 ...

  9. CDN添加流程

    CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节 ...

  10. JDBC连接数据库7个步骤

    JDBC连接数据库    •创建一个以JDBC连接数据库的程序,包含7个步骤:    1.JDBC所需的四个参数(user,password,url,driverClass) (1)user用户名 ( ...