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;
选择 File -> New -> Project 选择 Spring Initializr,选择 next 填写包名,项目名,选择下一步。选择依赖,Spring web starter 前面打钩,sql 选项为 Spring Data Jpa,MySql 项目名任意
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-webflux
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-test
test
io.projectreactor
reactor-test
test
server:
port: 8086
spring:
#通用的数据源配置
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo_test?useSSL=false&useUnicode=true&characterEncoding=utf8
username: root
password: 123
jpa:
#这个参数是在建表的时候,将默认的存储引擎切换为 InnoDB 用的
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
#配置在日志中打印出执行的 SQL 语句信息。
show-sql: true
hibernate:
#配置指明在程序启动的时候要删除并且创建实体类对应的表
ddl-auto: create
实体类,需要使用 @Entity 注解标注 需要对实体类的属性进行标注,使用 @Id 标注组件 使用 @Column 标注非主键
/**
* 用户实体类
* */
@Entity
@Table(name="t_user")
public class UserDO {
@Id
private 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 是我们常用的 Dao 接口,需要注意
使用 @Repository 注解
继承 JPARepository
UserRepository 不需要编写任何代码,即可实现增删查改
@Repository
public interface UserRepository extends JPARepository {
}
在
src/test/java/com/fishpro/jpa/
下,新增加
UserRepositoryTest.java
使用
@RunWith(SpringRunner.class)
和
@SpringBootTest
注解标注类。
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest{
}
/**
* 初始化一个对象 UserDO 测试Insert过程
* */
@Before
public 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);
}
@Test
public void testFind(){
Optional optionalUserDO=userRepository.findById(1);
if(optionalUserDO.isPresent()){
UserDO userDO=optionalUserDO.get();
System.out.println("testFind user"+userDO.getUserName());
}
}
@Test
public void testFindAll(){
List list=userRepository.findAll();
for (UserDO user:list
) {
System.out.println("user_name:"+user.getUserName());
}
}
@Test
public void testUpdate(){
Optional optionalUserDO=userRepository.findById(1);
if(optionalUserDO.isPresent()){
UserDO userDO=optionalUserDO.get();
userDO.setUserName("fishpro001");
userRepository.save(userDO);
System.out.println("testFind user"+userDO.getUserName());
}
}
@After
public void after(){
userRepository.deleteById(1);
userRepository.deleteById(2);
userRepository.deleteById(3);
}
例如定义表中userId,roleId 都是主键,此时这样设置
定义一个主键类
public class UserRoleKey implements Serializable {
private Integer userId;
private Integer roleId;
}
定义实体类
@Entity
@Table(name="t_user_role")
@IdClass(UserRoleKey.class) //注意这里是引入了 定义的符合主键类
public class UserRoleDO {
@Id
private Integer userId;
@Id
private 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的自白:我这么努力,就是为了懂你!、
给我个好看再走好吗?