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工具
在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>在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实体类
同上
定义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); }定义主启动类,添加MapperScan标记
@SpringBootApplication
@MapperScan(basePackages={"cn.xdl.dao"}) //扫描指定包中的dao类
public class MyBootApplication { }测试程序
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());
}
}追加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使用注意问题:
SQL参数使用#{}和${}的区别
- 采用#{}格式,预编译SQL执行机制,SQL发送时采用?
- ${}采用Statement执行机制,参数值拼到SQL中
- SQL字段值位置使用#{},字段名或表名位置使用${}
异常:"无效列类型:1111"
参数#{}遇到null值情况,会提示上述异常。在可能为null参数位置,使用#{}时,需要指定jdbcType属性,例如#{xx,jdbcType=XXX}
三、JPA工具
在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>在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实体类,并追加映射注解标记
@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方法 }定义DeptDao接口,可以继承JpaRepository
public interface DeptDao extends JpaRepository<Dept, Integer>{ }
Repository:顶级接口,无任何操作
CrudRepository:继承了Repository,增加了增删改查操作方法
PagingAndSortingRepository:继承CrudRepository,增加了分页和排序操作
JpaRepository:继承了PagingAndSortingRepository,增加批处理操作
测试程序
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工具(后续讲解)
未完待续.........
SpringBoot数据库访问(一)--------关系型数据库访问(RDBMS)的更多相关文章
- 数据库 --> 5种关系型数据库比较
5种关系系数据库比较 目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟.面向对象的数据库管理系统虽然技术先进,数据库易于开发.维护,但尚未有成熟的产品.国际国内的主导关系型数据库管理 ...
- Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念
Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念 在学习redis之前我们先来学习两个概念,即什么是关系型数据库什么是非关系型数据库,二者的区别是什么,二者的关系又是什么? ** ...
- MongoDB(一):关系型数据库和非关系型数据库
一.关系型数据库 1.概念 关系型数据库:是指采用了关系模型来组织数据的数据库,是目前各类数据库中使用最为广泛的数据库系统.简单的说,关系模型指的就是二维表格模型,一个关系型数据库就是由二维表及其之间 ...
- 数据库基础 非关系型数据库 MongoDB 和 redis
数据库基础 非关系型数据库 MongoDB 和 redis 1 NoSQL简介 访问量增加,频繁的读写 直接访问(硬盘)物理级别的数据,会很慢 ,关系型数据库的压力会很大 所以,需要内存级的读写操作, ...
- 【Redis】(1)-- 关系型数据库与非关系型数据库
关系型数据库与非关系型数据库 2019-07-02 16:34:48 by冲冲 1. 关系型数据库 1.1 概念 关系型数据库,是指采用了关系模型来组织数据的数据库.关系模型指的就是二维表格模型, ...
- NoSQL:从关系型数据库到非关系型数据库
关系型数据库 所谓关系型数据库,,就是指采用了关系模型来组织数据的数据库. 什么是关系模型,简单说,关系模型就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织. 关系模 ...
- python 之操作redis数据库(非关系型数据库,k-v)
数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- 数据库:mongodb与关系型数据库相比的优缺点 (转)
与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...
随机推荐
- redis的常用公共方法(2)
之前已经写过一篇redis公共方法的使用(https://www.cnblogs.com/jhy55/p/7681626.html),可是发现在高并发的时候出现 Unknown reply on in ...
- Win(Phone)10开发第(5)弹,本地媒体服务器的一些注意事项
首先有个wp上的http服务器 http://wphttpserver.codeplex.com/ 使用方式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- 请教如何用ASP.NET实现http://abc.com/orderID这样的URL???
我查看了一下微信二维码的内容是:https://u.wechat.com/XXXXXXXXX这种格式. 我现在想把我们的订单URL也做成 http://abc.com/orderID这样子,做成二维码 ...
- poj 107 DNA sorting
关于Java的题解,也许效率低下,但是能解决不只是ACGT的序列字符串 代码如下: import java.util.*; public class Main { public static void ...
- 【bzoj2422】 Times 前缀和
本来想练一下树状数组的,看到网上某人的blog后点了进来. 第一眼发现不会,出去上了个厕所发现离散化后不是一道简单前缀和题吗. 考虑到每一个人出现且仅出现一次,且出现的时间是在一个连续的区间内. 那么 ...
- 使用Maven命令行快速创建项目骨架(archetype)
> mvn archetype:generate 接下来就会输出一些列带索引变化的archetype项可供我们选择,然后提示我们选择一个编号,可以直接回车选择默认的编号(392),然后就跟着 ...
- Java之Socket网络编程实践
转自:http://my.oschina.net/leejun2005/blog/104955#comments 一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准 ...
- (转)Python3.5——装饰器及应用详解
原文:https://blog.csdn.net/loveliuzz/article/details/77853346 Python3.5——装饰器及应用详解(下)----https://blog.c ...
- python3 判断大小端的一种方法
这里用到了array.array('H', [1])来测试大小端,[1]可以转化为十六进制的0x0001,占两位,00位高位, 01位低位,通过第一位就可以判断大小端. 如果是小端,则转化为bytes ...
- linux 系统清除日志 .sh
clear.sh #!/bin/sh cat /dev/null > /var/log/syslogcat /dev/null > /var/adm/sylogcat /dev/null ...