Hi ! 我是小小,今天是本周的第五篇,主要内容是jpa的入门,现在开始今日内容

数据准备

数据库使用的数据表设计如下

建表语句如下

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_name` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,`last_login_time` datetime DEFAULT NULL,`sex` tinyint(4) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=armscii8;-- ----------------------------
-- Records of t_user
-- ----------------------------
BEGIN;
INSERT INTO `t_user` VALUES (1, 'json', '123', '2019-07-27 16:01:21', 1);
INSERT INTO `t_user` VALUES (2, 'jack jo', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (3, 'manistal', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (4, 'landengdeng', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (5, 'max', '123', '2019-07-24 16:01:37', 1);
COMMIT;SET FOREIGN_KEY_CHECKS = 1;

新建 Spring Boot 工程

选择 File -> New -> Project 选择 Spring Initializr,选择 next 填写包名,项目名,选择下一步。选择依赖,Spring web starter 前面打钩,sql 选项为 Spring Data Jpa,MySql 项目名任意

引入 Pom配置

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-test</artifactId><scope>test</scope></dependency></dependencies>

编写配置文件 application.yml

server:port: 8086
spring:#通用的数据源配置datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/demo_test?useSSL=false&useUnicode=true&characterEncoding=utf8username: rootpassword: 123jpa:#这个参数是在建表的时候,将默认的存储引擎切换为 InnoDB 用的database-platform: org.hibernate.dialect.MySQL5InnoDBDialect#配置在日志中打印出执行的 SQL 语句信息。show-sql: truehibernate:#配置指明在程序启动的时候要删除并且创建实体类对应的表ddl-auto: create

编写示例代码

新建实体对象 UserDao.java

实体类,需要使用 @Entity 注解标注 需要对实体类的属性进行标注,使用 @Id 标注组件 使用 @Column 标注非主键

/*** 用户实体类* */
@Entity
@Table(name="t_user")
public class UserDO {@Idprivate Integer id;@Column(name="user_name",length = 200)private String userName;@Column(name="password",length = 200)private String password;@Column(name="sex")private Integer sex;@Column(name="last_login_time")private Date lastLoginTime;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}public Date getLastLoginTime() {return lastLoginTime;}public void setLastLoginTime(Date lastLoginTime) {this.lastLoginTime = lastLoginTime;}
}

新建仓库接口类 UserRepository

仓库接口类,UserRepository 是我们常用的 Dao 接口,需要注意

  1. 使用 @Repository 注解

  2. 继承 JPARepository

  3. UserRepository 不需要编写任何代码,即可实现增删查改

@Repository
public interface UserRepository extends JPARepository<UserDO,Integer> {}

编写测试用例

src/test/java/com/fishpro/jpa/

下,新增加

UserRepositoryTest.java

使用

@RunWith(SpringRunner.class)

@SpringBootTest

注解标注类。

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest{}

新增加用户数据

/*** 初始化一个对象 UserDO 测试Insert过程* */@Beforepublic void before(){UserDO userDO=new UserDO();userDO.setId(1);userDO.setUserName("fishpro");userDO.setSex(1);userDO.setLastLoginTime(new Date());userDO.setPassword("passWord");userRepository.save(userDO);}

查询单个用户数据

@Testpublic void testFind(){Optional<UserDO> optionalUserDO=userRepository.findById(1);if(optionalUserDO.isPresent()){UserDO userDO=optionalUserDO.get();System.out.println("testFind user"+userDO.getUserName());}}

查询多个数据

@Testpublic void testFindAll(){List<UserDO> list=userRepository.findAll();for (UserDO user:list) {System.out.println("user_name:"+user.getUserName());}}

更新数据

@Testpublic void testUpdate(){Optional<UserDO> optionalUserDO=userRepository.findById(1);if(optionalUserDO.isPresent()){UserDO userDO=optionalUserDO.get();userDO.setUserName("fishpro001");userRepository.save(userDO);System.out.println("testFind user"+userDO.getUserName());}}

删除数据

@Afterpublic void after(){userRepository.deleteById(1);userRepository.deleteById(2);userRepository.deleteById(3);}

联合主键

例如定义表中userId,roleId 都是主键,此时这样设置

  1. 定义一个主键类

public class UserRoleKey implements Serializable {private Integer userId;private Integer roleId;
}
  1. 定义实体类

@Entity
@Table(name="t_user_role")
@IdClass(UserRoleKey.class) //注意这里是引入了 定义的符合主键类
public class UserRoleDO {@Idprivate Integer userId;@Idprivate Integer roleId;public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public Integer getRoleId() {return roleId;}public void setRoleId(Integer roleId) {this.roleId = roleId;}
}

关于作者

我是小小,双鱼座的程序猿,我们下期再见!

小明菜市场

推荐阅读

● 真香 | 谁说的 StringJoiner 不好!真香警告……

● 对不起,你以前学的 ElasticSearch 都是垃圾!

● 基础 | 这波编程基础绝了!快来学习!

● 装逼 | 10个JS精简代码无形装逼集合,最为致命,记得收藏好

● 文末送书 | NLP的自白:我这么努力,就是为了懂你!、

给我个好看再走好吗?

值不值 | 三分钟搞定jpa?值不值!相关推荐

  1. 服务器添加管理员隐藏账号,绝招:隐藏管理员账号 三分钟搞定

    绝招:隐藏管理员账号 三分钟搞定 更新时间:2007年07月30日 11:30:59   作者: 对regedit.exe大家都很熟悉,但却不能对注册表的项键设置权限,而regedt32.exe最大的 ...

  2. EasyExcel 三分钟搞定导入导出

    前言:本文章教你从零开始,三分钟搞定excel单sheet导出.导入.多sheet导出.导入.excel模板导入单个sheet.多个sheet,废话不多说,直接上代码 1.引入依赖 <!--ex ...

  3. 三分钟搞定一个网页原型设计

    三分钟搞定一个网页原型设计 PS插件之Velositey(撒福利一波吼~) 做设计的大佬们应该很熟这个插件了,主要安利给平时不玩设计的后台们,以及不想花时间在做重复框架上的同学,更多的时间快留给打磨属 ...

  4. windows+mysql集群搭建-三分钟搞定集群

    一.集群了解 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.首先看了一些关于集群的资料,然后根据步骤一步步的整,遇到了一些问题,在这里把我遇到的问题以及解 ...

  5. 港澳通行证签注可以自助办理了 三分钟搞定 - 杭州新闻中心 - 杭州网

    港澳通行证签注可以自助办理了 三分钟搞定 - 杭州新闻中心 - 杭州网 港澳通行证签注可以自助办理了 三分钟搞定 - 杭州新闻中心 - 杭州网 posted on 2016-07-15 08:37  ...

  6. 机器人画家,三分钟搞定一幅人物黑白肖像

    逆天的机器人,现在要进军艺术圈了. 小编曾经去过一次科技馆,看见过一种可以为人类画像的机器人,当时不少人为之一振,惊呼神奇. 在此次MWC 2016大会上,也出现了一款类似的机器人,在画画上面的天赋还 ...

  7. 138+134 新手寻星,三分钟搞定,呵呵,我明天才!!

    空间 138+134 新手寻星,三分钟,呵呵,我是天才!! 我是河南的新手,从来没玩过卫视,本来是没有需求玩卫星,不过家里的有线不能看,其它村上的安装的有有线,我自己接了一个头出来,但是根本没有几个台 ...

  8. ChatGPT + MindShow 三分钟搞定PPT制作

    制作一份"通用性"的PPT需要几步? 三步 接下来,我们借助ChatGPT和MindShow,大概三分钟完成操作,就能制作出来完胜大部分人的PPT文件.具体可看文末效果导示. 解锁 ...

  9. Python抓取十万弹幕数据需多久?三分钟搞定并实现词云!

    不知道周四的芒果台<披荆斩棘的哥哥>第1期一经播出,你们看了没.简直炸裂来袭,情怀牌.不油腻.有质感,让它上线就获得了大量关注! 将古惑仔.摇滚乐手.rapper.舞者.歌手.功夫演员等等 ...

最新文章

  1. 华硕路由器 linux上不了网,华硕ASUS路由器连不上网怎么办?
  2. 将serversocket 写在按钮事件中连接不上_Java服务器的模型—TCP连接/流量优化
  3. 什么是交叉编译?个人对交叉编译的理解
  4. sql loader
  5. SQL挂起,需要重新启动计算机?
  6. 工程项目经济评价的基本方法
  7. 学习成功:中学生成就梦想的15堂必修课
  8. MSI设计一个1位二进制全减器
  9. 当年轻人在说“夸克真香”,他们在说什么?
  10. Fabric.js 文档
  11. Angular 里使用 FormControl 的步骤
  12. 100%代码覆盖率的悲剧
  13. ecshop其他页面判断是智能手机访问也跳转到ECTouch对应手机版页面[有修正]
  14. 华硕路由域名访问_“618” WiFi6 路由器选购推荐清单_路由器
  15. 【数据仓库】数仓好坏衡量标准
  16. 团队springboot基础镜像选择思考
  17. 域名防红监测软件实现方案
  18. pythorch 基本学习
  19. 视频原理和FFmpeg
  20. java实验报告之Employee类的设计

热门文章

  1. redis应用之——关注、被关注
  2. Java Web学习总结(20)——基于ZooKeeper的分布式session实现
  3. su - 提示失败问题[su方式]
  4. 贪心 Codeforces Round #301 (Div. 2) B. School Marks
  5. 基于概率的项目相似度之并行方法
  6. mysql 替换 汉字_MySQL替换文字
  7. 深入学习js之——原型和原型链
  8. 进阶的Redis之数据持久化RDB与AOF
  9. 【最佳实践】OSS开源工具ossutil-大文件断点续传
  10. Mac下node.js卸载方法收集