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类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...
随机推荐
- js form 表单 重置 清空
清空 和 重置的差异是 清空是彻底清空input内容即便初始值value有值,重置是将input内容重置为value初始状态 很简单记录下 方便之后使用 //重置 //document.getElem ...
- Docker容器的原理与实践 (下)
欢迎访问网易云社区,了解更多网易技术产品运营经验. Docker原理分析 Docker架构 镜像原理 镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容Docker以镜像和在镜 ...
- redis 数据备份持久化方案
本文链接:http://www.cnblogs.com/zhenghongxin/p/9050219.html 使用两种备份方案 备份方案选择RDB和AOF同时进行备份,必须打开AOF的持久化机制,除 ...
- Systemd 服务管理器
博文链接:http://www.cnblogs.com/zhenghongxin/p/8672199.html 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,变成守护进程的第一步,就是把它 ...
- C#后端接收form-data,创建实体类
public class Para_list //实体类 { public long ParemeterID { get; set; } public string Name { get; set; ...
- vue-router进阶笔记
导航守卫 vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航,大白话,检测路由跳转过程中的具体的变化. 一.全局前置守卫——router.beforeEach 使用router. ...
- Android之自定义控件
开发自定义控件的步骤: 1.了解View的工作原理 2. 编写继承自View的子类 3. 为自定义View类增加属性 4. 绘制控件 5. 响应用户消息 6 .自定义回调函数 一.Vie ...
- fail2ban
在 [DEFAULT] 全局配置中的ignoreip选项中添加被放行的ip地址:ignoreip = 127.0.0.1 172.17.1.218 网段可以加 127.0.0.1/8,用空格隔开就行. ...
- Cookie、Session和Cache
一.Cookie Cookie是保存客户端的一组数据,主要用来保存用户的个人信息,主要存放浏览器请求服务器时的请求信息,这些信息是非敏感信息.主要用于当用户访问您的系统时,应用程序可以检索以前存储的信 ...
- OC 中的属性
自动合成 (autosynthesis) @property 语法,会做下面两件事情 自动生成存取方法 由编译器生成,编辑器里不会看到这些方法. 向类中添加适当类型的实例变量 在属性前加下划线,作为实 ...