spring data jdbc 基本使用
文章目录
- 配置
- 使用
- 创建表
- 创建实体类
- 创建操作接口Repository
- 读写数据
- 总结
官方文档: https://docs.spring.io/spring-data/jdbc/docs/1.0.6.RELEASE/reference/html/
spring data jdbc是spring data产品中的一员, 它提供查询数据库并映射成实体的功能,类似于jpa,但没有实体生命周期管理这些复杂功能, 并且它对领域驱动设计提供了一些支持。
配置
添加依赖:
plugins {id 'org.springframework.boot' version '2.1.6.RELEASE'id 'java'
}apply plugin: 'io.spring.dependency-management'
// ... ...
dependencies {implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'implementation 'mysql:mysql-connector-java:8.0.17'// ... ...
}
配置类:
@Configuration
@EnableJdbcRepositories("com.example.springdatajdbcdemo") //这里的扫描目录要写好了
public class JdbcConfig {}
数据库参数配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
使用
用一个登录账号的小例子来演示用法
创建表
create database test;
drop table if exists test.account;
create table test.account(id bigint primary key auto_increment,login_name varchar(16) not null ,password varchar(16) not null
);
创建实体类
spring data jdbc读取记录后,会先创建对象,然后给对象赋值
@Data //用lombok来消除模板代码
public class Account {@Id //标记属性为主键private Long id;private String loginName;private String password;//1.如果有无参数的构造函数, spring data jdbc会使用无参数的构造函数来创建对象//2.如果只有一个构造函数, spring data jdbc会使用它//3.如果有多个构造函数, spring data jdbc会使用有@PersistenceConstructor标记的那个@PersistenceConstructorpublic Account(Long id, String loginName, String password) {this.id = id;this.loginName = loginName;this.password = password;}
}
创建操作接口Repository
//继承CrudRepository, 第一个模板参数是实体类, 第二个参数是主键对应的数据类型
public interface AccountRepository extends CrudRepository<Account, Long> {}
读写数据
可以直接使用CrudRepository中的方法
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataJdbcDemoApplicationTests {@Autowiredprivate AccountRepository accountRepository;@Testpublic void testSave() {Account account = new Account(null, "test", "123456");account = accountRepository.save(account);log.info("save ok , id is {}", account.getId());Optional<Account> dbAccountOptional = accountRepository.findById(account.getId());Assert.assertTrue(dbAccountOptional.isPresent());Account dbAccount = dbAccountOptional.get();log.info("get login account: {}", dbAccount);Assert.assertEquals("test", dbAccount.getLoginName());Assert.assertEquals("123456", dbAccount.getPassword());}
}
也可以自己写查询语句:
public interface AccountRepository extends CrudRepository<Account, Long> {@Query("select * from account where login_name=:loginName")Optional<Account> getByLoginName(@Param("loginName") String loginName);
}
然后测试一下
@Testpublic void testQuery() {Optional<Account> optionalAccount = accountRepository.getByLoginName("test");Assert.assertTrue(optionalAccount.isPresent());Account dbAccount = optionalAccount.get();log.info("get login account: {}", dbAccount);Assert.assertEquals("test", dbAccount.getLoginName());Assert.assertEquals("123456", dbAccount.getPassword());}
总结
以上就是spring data jdbc的基本操作了, 总的来说还是比较方便,定义一个实体类,写个接口,就能实现CRUD了, 没有spring data jpa复杂的生命周期, 没有mybatis那么复杂的代码(个人感觉使用mybatis generator也不是很方便)。
但还有许多不足之处, 比如不能使用spring data jpa那样使用方法名称查询, 而@Param标记也不能省略, 还有很多可以优化的地方。
spring data jdbc 基本使用相关推荐
- Spring Data JDBC通用DAO实现–迄今为止最轻量的ORM
我很高兴宣布Spring Data JDBC存储库项目的第一个版本. 这个开放源代码库的目的是为基于Spring框架中 JdbcTemplate关系数据库提供通用,轻量且易于使用的DAO实现,与项目的 ...
- Spring Data JDBC、引用和聚合
之前的博客文章中,我.描述了如何设置和使用 Spring Data JDBC.我还描述了使 Spring Data 原标题:Spring认证|Spring Data JDBC.引用和聚合 JDBC 比 ...
- Spring Data JDBC自动生成的增删改查CRUD分页、排序SQL语句非常简洁没有多余的SQL
通过在application.properties文件中设置记录SQL日志 logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG ...
- 【转】Spring Data JDBC - Reference Documentation
Spring Data JDBC - Reference Documentation Jens Schauder, Jay Bryant, Mark Paluch, Bastian Wilhelm V ...
- Spring Data JDBC入门使用Demo
Spring Data JDBC入门使用Demo Spring Data JDBC is a simple, limited, opinionated ORM. Spring Data JDBC特点: ...
- Spring Data JDBC 详解
目录 一.JPA背景 二.Spring Boot 整合Spring data JDBC 1. 配置数据源 2. 配置Druid的admin后台 3. Spring-data-jdbc常用接口查询策略 ...
- spring data jdbc的简单教程
你需要先做一番配置,跟我来! 目录 配置springconfig 数据库和实体类配置. 数据库:就俩字段,一个是userid,一个是username 实体类: DAO层接口: 开始测试: 其他一些事项 ...
- Spring Data JPA 五分钟快速入门和实践
Spring Data JPA(类似于Java Web 中的 DAO) 操作声明持久层的接口(Repository) 三个核心接口: CrudRepository PagingAndSortingRe ...
- Spring Data 发布更改版本管理方案之后的第一个版本:2020.0.0
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 2020年10月28日 Spring Data自更改版本 ...
最新文章
- ScaleYViewPager
- JZOJ 5609. 【NOI2018模拟3.28】Tree BZOJ 4919: [Lydsy1706月赛]大根堆
- Node.js v7 Beta版引入citgm
- 模糊图像处理 去除模糊_图像模糊如何工作
- 在unity向量空间内绘制几何(2):计算球体的表面坐标
- 【实习之T100开发】Genero FGL (TIPTOP4GL) 学习笔记(2)
- Java实现List数组的几种替代方案
- SpringMVC 整合Redis
- 批量删除2012年9月份以前的表
- 我的Android进阶之旅------>解决:Failed to create ‘XXX\build\outputs\apk\xxx.apks‘: 拒绝访问。
- 波士顿房价数据集——回归分析
- IC卡读写器c++builder源代码续
- 金融数据挖掘与分析(三)-案例实战(1)
- 域共享文件夹服务器怎么设置密码,域环境下共享文件夹加密、Windows 2008 Server局域网共享文件夹设置权限设置的方法...
- Eigen库计算两个向量夹角
- Cadence 软件快捷操作
- 线性代数——对向量的线性组合中的“线性”的理解
- H5手机QQ分享到手Q、QQ空间、微信好友、朋友圈础通用接口
- iOS App处于后台/被杀死的状态仍可进行语言播报的实现 (适配iOS12.1 ,iOS15的本地通知功能)
- 记2021DASCTF没做出来的那些题(已更新官wp版本)
热门文章
- Python 霍兰德人格分析雷达图
- mysql zimbra_记一次zimbra服务器故障导致mysql起不来问题
- docker制作hiredis环境:libhiredis.so.0.13: cannot open shared object file
- DXF库(dxflib)使用指南
- 数模(1)——层次分析法
- 50家硅谷IT公司技术博客
- linux 查重脚本,Linux脚本学习必经之路:Shell脚本实例分享
- 面向对象封装放大镜js代码
- 如何看待许多年轻人“疯狂”的投入到IT培训当中
- 所谓情商高,就是会说话2