目录
如果出现Cannot resolve table ‘XXX’
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
配置连接数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/vueblog?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 spring.datasource.username=**** spring.datasource.password=**** spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
写实体类
因为属于严格ORM,所以一定要一一对应。
目前先这样,后边会进行
联表查询、时间自动写入
。
/**
* @author 刘通
* @date 2022年01月15日 20:44
*/
@Entity
@Table(name = "m_blog")
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Mblog {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "user_id")
private int userId;
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
@Column(name = "content")
private String content;
@Column(name = "created")
private Date created;
@Column(name = "status")
private int status;
}
/**
* @author 刘通
* @date 2022年01月15日 20:25
*/
@Entity
@Table(name = "m_user")
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Muser {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "username")
private String username;
@Column(name = "avatar")
private String avatar;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@Column(name = "status")
private int status;
@Column(name = "created")
private Date created;
@Column(name = "last_login")
private Date lastLogin;
}
如果出现Cannot resolve table ‘XXX’
只需要
先用idea连接数据库
,
选择数据源
就可以了
Repository层
/**
* @author 刘通
* @date 2021年09月17日 19:27
*/
public interface TestUserRepository extends JpaRepository<Muser,Integer>, PagingAndSortingRepository<Muser,Integer>, JpaSpecificationExecutor<Muser>{
}
控制层
查
不使用分页
@Autowired
TestUserRepository testUserRepository;
@GetMapping("getList")
public List<Muser> a(){
List<Muser> all = testUserRepository.findAll();
return all;
}
使用分页
@GetMapping("get")
public Page<Muser> a(@PageableDefault(size = 10) Pageable page){
System.out.println("test执行");
Page<Muser> all = testUserRepository.findAll(page);
return all;
}
请求案例:
注意:page从0开始
localhost:8080/get?page=0&size=5
增
@PostMapping("add")
public Muser add(@RequestBody Muser muser){
testUserRepository.save(muser);
return muser;
}
删
@PostMapping("delete/{id}")
public String add(@PathVariable int id){
testUserRepository.deleteById(id);
return "删除成功";
}
改
通过save更改
id要吻合
@PostMapping("update")
public Muser update(@RequestBody Muser muser){
testUserRepository.save(muser);
return muser;
}
自己写sql语句
// 在删除/更改语句中要用@Modifying
@Modifying
// 用sql语句就要开启nativeQuery
@Query(nativeQuery = true,value = "xxxxxxxxx")
public void updateById(int id);
联表查询
把上边实体类的userid更换
//
// @Column(name = "user_id")
// private int userId;
@ManyToOne
@JoinColumn(name = "user_id")
private Muser muser;
之后就可以测试查询,就能成功
自动生成(增加,修改)日期
修改上边实体
// @Column(name = "created")
// private Date created;
// @Column(name = "last_login")
// private Date lastLogin;
@Column(name = "created")
@CreatedDate
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date created;
@Column(name = "last_login")
@LastModifiedDate
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastLogin;
在实体类上加注解@EntityListeners(AuditingEntityListener.class)
在启动类上加注解@EnableJpaAuditing
阿里规范每个表都要有创建时间和更新时间,所以我们可以把时间提取出来一个抽象类,让实体去继承
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Data
public abstract class AbDao {
@Column(name = "created") //自定义通用就好
@CreatedDate
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
private Date created;
@Column(name = "last_login")//自定义通用就好
@LastModifiedDate
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
private Date lastLogin;
}
整合querydsl
依赖
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<scope>provided</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
//输出目录
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
生成Q类
直接clean+compile
或者
Repository继承qsl
public interface TestUserRepository extends JpaRepository<Muser,Integer>, PagingAndSortingRepository<Muser,Integer>, JpaSpecificationExecutor<Muser>,QuerydslPredicateExecutor<Muser>{
}
实例
public Predicate getContion(){
QMuser muser = QMuser.muser;
BooleanExpression between = muser.id.between(0, 5);
BooleanExpression sd = muser.username.contains("sd").and(between);
return sd;
}
@GetMapping("getList")
public List<Muser> a(){
List<Muser> all = (List<Muser>) testUserRepository.findAll(getContion());
return all;
}
如有疑问可私信
版权声明:本文为wai_58934原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。