本文转载自微信公众号《小明菜市场》,作者+小明菜市场。转载本文请联系小明菜市场公众号。数据准备数据库使用的数据表设计如下建表语句如下SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;-------------------------------Tablestructurefort_user----------------------------DROPTABLEIFEXISTS`t_user`;创建表`t_user`(`id`int(11)NOTNULLAUTO_INCREMENT,`user_name`varchar(255)DEFAULTNULL,`password`varchar(255)DEFAULTNULL,`last_login_time`datetimeDEFAULTNULL,`sex`tinyint(4)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=6DEFAULTCHARSET=armscii8;--------------------------------Recordsoft_user-----------------------------开始;插入`t_user`VALUES(1,'json','123','2019-07-2716:01:21',1);INSERTINTO`t_user`VALUES(2,'jackjo','123','2019-07-2416:01:37',1);INSERTINTO`t_user`VALUES(3,'manistal','123','2019-07-2416:01:37',1);INSERTINTO`t_user`VALUES(4,'landengdeng','123','2019-07-2416:01:37',1);INSERTINTO`t_user`VALUES(5,'max','123','2019-07-2416:01:37',1);COMMIT;SETFOREIGN_KEY_CHECKS=1;新建SpringBoot项目选择File->New->Project选择SpringInitializr,选择next填写包名,项目名称,选择Next选择依赖,Springwebstarter前面打钩,sql选项为SpringDataJpa,MySql项名称任引入Pom配置org.springframework.bootspring-boot-starter-数据jpaorg.springframework.bootspring-boot-starter-webfluxmysqlmysql-connector-java运行时org.springframework.bootspring-boot-starter-testtestio.projectreactorreactor-test测试编写配置文件application.ymlserver:port:8086spring:#通用数据源配置datasource:driverClassName:com.mysql.jdbc.Driverurl:jdbc:mysql://localhost:3306/demo_test?useSSL=false&useUnicode=true&characterEncoding=utf8username:rootpassword:123jpa:#this参数是将默认存储引擎切换为InnoDB在建表时使用的数据库平台:org.hibernate.dialect.MySQL5InnoDBDialect#configure在日志中打印出执行过的SQL语句信息show-sql:truehibernate:#Configuration表示在程序启动时,删除并创建实体类对应的表ddl-auto:create编写示例代码创建一个新的实体对象UserDao.java实体类,需要使用@Entity注解标注实体类属性标注,使用@Id注解组件使用@Column标注非主键/***UserEntityClass**/@Entity@Table(name="t_user")publicclassUserDO{@IdprivateIntegerid;@Column(name="user_name",length=200)privateStringuserName;@Column(name="password",length=200)privateStringpassword;@Column(name="sex")privateIntegersex;@Column(name="last_login_time")privateDatelastLoginTime;publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicIntegergetSex(){returnsex;}publicvoidsetSex(Integersex){this.sex=sex;}publicDategetLastLoginTime(){returnlastLoginTime;}publicvoidsetLastLoginTime(DatelastLoginTime){this.lastLoginTime=lastLoginTime;}}新建仓库接口类UserRepository仓库接口类,UserRepository是我们常用的Dao接口,需要注意使用@Repository注解继承JPARepositoryUserRepository不需要写任何代码,可以增删改查,检查修改}在src/test/java/com/fishpro/jpa/下编写测试用例,添加UserRepositoryTest.java并使用@RunWith(SpringRunner.class)和@SpringBootTest注解类@RunWith(SpringRunner.class)@SpringBootTestpublicclassUserRepositoryTest{}新增用户数据/***初始化一个对象UserDO测试插入流程**/@Beforepublicvoidbefore(){UserDOuserDO=newUserDO();userDO.setId(1);userDO.setUserName("fishpro");userDO.setSex(1);userDO.setLastLoginTime(newDate());userDO.setPassword("passWord");userRepository.save(userDO);}查询单个用户数据@TestpublicvoidtestFind(){OptionaloptionalUserDO=userRepository.findById(1);if(optionalUserDO.isPresent()){UserDOuserDO=optionalUserDO.get();System.out.println("testFinduser"+userDO.getUserName());}}查询多个Data@TestpublicvoidtestFindAll(){Listlist=userRepository.findAll();for(UserDOuser:list){System.out.println("user_name:"+user.getUserName());}}更新数据@TestpublicvoidtestUpdate(){OptionaloptionalUserDO=userRepository.findById(1);if(optionalUserDO.isPresent()){UserDOuserDO=optionalUserDO.get();userDO.setUserName("fishpro001");userRepository.save(userDO);System.out.println("testFinduser"+userDO.getUserName());}}删除数据@Afterpublicvoidafter(){userRepository.deleteById(1);userRepository.deleteById(2);userRepository.deleteById(3);}组合主键比如定义表中的userId和roleId都是主键。这个时候设置这个1.定义一个主键类publicclassUserRoleKeyimplementsSerializable{privateIntegeruserId;privateIntegerroleId;}2。定义实体类@Entity@Table(name="t_user_role")@IdClass(UserRoleKey.class)//注意这里是引入定义的主键类publicclassUserRoleDO{@IdprivateIntegeruserId;@IdprivateIntegerroleId;publicIntegergetUserId(){returnuserId;}publicvoidsetUserId(IntegeruserId){this.userId=userId;}publicIntegergetRoleId(){returnroleId;}publicvoidsetRoleId(IntegerroleId){this.roleId=roleId;}}