SpringBoot数据库访问(一)--------关系型数据库访问(RDBMS)

关系型数据库访问(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. 未完待续.........

原文地址:https://www.cnblogs.com/hx1098/p/9398630.html

时间: 2024-11-09 06:09:10

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

关系型数据库和非关系型数据库,RDBMS和NoSQL区别?

简单地讲:什么是关系型数据库?依据关系模型来建立的,不同的表或库之间有相关联性 什么是非关系型数据库?不同的表或库之间没有相关联性,依据非关系模型来建立 关系型数据库和非关系型数据库各自的特点:RDBMS:二维表数据存取通过SQL数据安全性方面强 NoSQL:关注高性能,高并发,灵活性等特点 首先说说各自的优缺点:强大的查询功能--强一致性--二级索引: 关系型的优点,非关系型的缺点灵活模式--扩展性--性能: 非关系形的优点,关系型的缺点 NoSQL的分类和典型的产品:键值(KV)存储:Mem

关系型数据库与非关系型数据库的简介、对比、说明

关系型数据库与非关系型数据库的简介.对比和说明!!! 分类专栏:数据库 数据库MySQL的系列知识 关系型数据库: Oracle SQLServer Sybase Informix Access DB2 mysql vfp Ingers FoxPro 非关系型数据库:关系型数据库与非关系型数据库的对比 MongoDB Cassandra CouchDB Hypertable Redis Riak Neo4j Hadoop HBase Couchbase MemcacheDB REVENDB Vo

关系型数据库与非关系型数据库

关系型数据库与非关系型数据库 自1970年,埃德加·科德提出关系模型之后,关系数据库便开始出现,经过了40多年的演化,如今的关系型数据库具备了强大的存储.维护.查询数据的能力.但在关系数据库日益强大的时候,人们发现,在这个信息爆炸的"大数据"时代,关系型数据库遇到了性能方面的瓶颈,面对一个表中上亿条的数据,SQL语句在大数据的查询方面效率欠佳.我们应该知道,往往添加了越多的约束的技术,在一定程度上定会拖延其效率. 在1998年,Carlo Strozzi提出NOSQL的概念,指的是他开

关系型数据库跟费关系型数据库区别

关系数据库的概念 以关系模型建立的数据库就是关系数据库(Relational Data Base,RDB),关系数据库系统的DBMS是关系型数据库管理系统(Relational DataBase Management System,RDBMS).关系数据库中包含若干个关系,每个关系都由关系模式确定,每个关系模式包含若干个属性和属性对应的域,所以,定义关系数据库就是逐一定义关系模式,对每一关系模式逐一定义属性及其对应的域. 关系型数据库的优点: 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关

关系型数据库和非关系型数据库之间的那些区别(一)

说说关系型数据库和非关系型数据库之间的那些区别 第一弹 就拿现在最流行的两种数据库来说吧:mysql和mongodb(介于关系型和非关系型之间的一种产品,在这里面我们就当做非关系型数据库用来和mysql比较一下) 举个实际好理解的的例子:学生选课的系统(简化来说举出系统里面的两个:学生,课程) 首先说在mysql里面建立的模型是 学生表(student): S Sid name gender age address email college class 1 张三 女 19 a 111 外语 1

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

关系型数据库 所谓关系型数据库,,就是指采用了关系模型来组织数据的数据库. 什么是关系模型,简单说,关系模型就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织. 关系模型中常用的概念: 1.关系 可以理解为一张二维表,每个关系都有一个关系名,在数据库中被称为表名 2.元组 可以理解为二维表中的一行,在数据库中被称为记录 3.属性 可以理解为二维表中的一列,在数据库中被称为字段 4.域 属性的取值范围,在数据库中为某一列的取值限制 5.关键字 一族可以唯一标识元组的

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

数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁盘上 Redis里的数据类型有String 和hash类型,下面主要是对Redis 的一些操作. 一.String类型 r = redis.Redis(host='localhost',port=6379,db=3) r.set('nancy2','201801211505') #set数据 pri

关系型数据库和非关系型数据库的区别

关系型数据库和非关系型数据库的区别 1.关系型数据库通过外键关联来建立表与表之间的关系,2.非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定        比如 有一个学生的数据:              姓名:张三,性别:男,学号:12345,班级:二年级一班       还有一个班级的数据:             班级:二年级一班,班主任:李四 关系型数据库中,我们创建学生表和班级表来存这两条数据,并且学生表中的班级存储的是班级表中的主键.

01关系型数据库与非关系型数据库

数据库 就是用来存储数据的仓库,分为两类:关系型数据库和非关系型数据库   关系型数据库  严格限定了字段的类型,大小,向数据库中传数据时,必须按照相应的字段传数据 eg:mysql 非关系型数据库(免费) 字段类型可以随便写 eg: mongodb 原文地址:https://www.cnblogs.com/SRH151219/p/10200625.html

常见的关系型数据库和非关系型数据库及其区别

Oracle.DB2.Microsoft SQL Server.Microsoft Access.MySQL 非关系型数据库: NoSql.Cloudant.MongoDb.redis.HBase 两种数据库之间的区别: 关系型数据库 关系型数据库的特性 1.关系型数据库,是指采用了关系模型来组织数据的数据库: 2.关系型数据库的最大特点就是事务的一致性: 3.简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织. 关系型数据库的优点 1.容易