-
首先实体类创建
- 这里用的是mySQL数据库
- 配置文件yaml配置数据源和spring.jpa简单属性就好
package com.testofjpa.domain;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Entity//标识,这里是一个实体类
@Table(name = "csp_test_user")//这里主要标识对应的表名,如果名字匹配,可以不需要
public class TestUser implements Serializable {
private static final long serialVersionUID = 4122384962907036649L;
@Id//标识,这是一个逐渐
@GeneratedValue(strategy = GenerationType.IDENTITY)//主键自增,会在数据库里创建一个序列
private Integer id;
private String namer;
private Integer age;
private String sex;
private String rName;
private Date createTime;
private Integer del;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNamer() {
return namer;
}
public void setNamer(String namer) {
this.namer = namer;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getrName() {
return rName;
}
public void setrName(String rName) {
this.rName = rName;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Integer getDel() {
return del;
}
public void setDel(Integer del) {
this.del = del;
}
}
-
查询
- 这里只说findAll 主要是参数,和返回类型
- 参数,Sort Example Pageable
//Sort主要用于排序,参数1:排序方式,参数2根据什么排序
Sort sort = new Sort(Sort.Direction.ASC, "id");
//分页对象
Pageable page1 = PageRequest.of(0, 5);
//分页对象,且包含排序
Pageable page2 = PageRequest.of(0, 5, new Sort(Sort.Direction.ASC, "id"));
//查询条件对象
TestUser user = new TestUser();
user.setId(1);
user.setrName("张飞");
Example<TestUser> of1 = Example.of(user);
TestUser user = new TestUser();
user.setId(1);
user.setrName("张");
user.setNamer("晕");
Example<TestUser> of1 = Example.of(user);
System.out.println("ok");
ExampleMatcher matcher = ExampleMatcher.matching()
.withMatcher("rName", ExampleMatcher.GenericPropertyMatchers.startsWith())//模糊查询匹配开头,即{rName}%
.withMatcher("namer",ExampleMatcher.GenericPropertyMatchers.startsWith())//模糊查询,匹配结尾,即%{namer}
.withMatcher("rName" ,ExampleMatcher.GenericPropertyMatchers.contains())//全部模糊查询,即%{rName}%
.withIgnorePaths("password");//忽略字段,即不管password是什么值都不加入查询条件
Example<TestUser> example = Example.of(user ,matcher);
this.tud.findAll(example);
-
返回数据类型
Iterable
@Test//这里是写在junit4中个代码,拿参数做示范
public void contextLoads(Iterable<TestUser> users) {
Iterator<TestUser> it = users.iterator();
while (it.hasNext())
TestUser user = it.next();
}
Optional
@Test//转实体类
public void contextLoads(Optional<TestUser> optional) {
TestUser user = optional.get();
}
- 也可以在DAO interface 中 用@Query 写HQL 直接查询
@Query("from TestUser u where u.id = :id")//这里注意:(冒号),和@Param连用
TestUser getById(@Param("id") Integer id);
- 查询不需要开启事务,如果是RUD操作 需要@Modifying@Transactional 支持,@Transactional标签一般加在service实现类方法上
@Modifying@Transactional//这里是做案例,所以没有写service层,标签直接加在了 DAO interface
@Query("update TestUser tu set tu.del = :del where tu.id = :id")
Integer updTestUser(@Param("id") Integer id, @Param("del") Integer del);
- 一般保存save , 删除deleteById,修改需要自己写,saveAndFlush不是修改哈,是冲数据用的
chenyb 随笔记录,方便自己学习
2018-04-16