依赖
<dependencies> <!--JPA--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional>
</dependency>
<!--mysql Drive-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
配置文件
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://xxxx:3306/logistics?serverTimezone=UTC
password: root
username: root
jpa:
# database: MYSQL
show-sql: true
hibernate:
ddl-auto: update
编写实体类
@Data //lombok
@Entity //声明这是一个实体类
@Table(name = "`order`") //与数据库表对应起来
@Accessors(chain = true) //链式调用(可有可无)
public class Order {
@Id // 主键id
@GeneratedValue(strategy = GenerationType.IDENTITY) //主键类型这是数据库自增
private Integer id;
private String orderNumber;
private Integer skuId;
private String userName;
}
对应的Dao映射
public interface OrderDao extends JpaRepository<Order,Integer>,JpaSpecificationExecutor<Order>{
// JpaRepository<实体类,主键类型> 基本的CRUD
// JpaSpecificationExecutor 分页多条件查询 排序等功能
}
基本测试使用
分页查询
public List<Order> listPage() {
//分页对象
PageRequest of = PageRequest.of(0, 10);
//构建查询条件
Page<Order> orders = orderDao.findAll(new Specification<Order>() {
/** * * @param root 实体类 * @param query 查询对象 * @param criteriaBuilder 条件构建 * @return */
@Override
public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
// between root.get("skuId").as(Integer.class)->获取skuId 字段
Predicate skuIda = criteriaBuilder.between(root.get("skuId").as(Integer.class), 0, 10);
// 排序
javax.persistence.criteria.Order id = criteriaBuilder.desc(root.get("id").as(Integer.class));
//将条件放入到Wher中
query.where(skuIda);
//可以指定多个排序
query.orderBy(id);
//给定查询条件
return query.getRestriction();
}
}, of);
List<Order> content = orders.getContent();
return content;
}
- 效果
增
public void adds() {
List<Order> orders = new ArrayList<>();
for (int i = 0; i < 20; i++) {
Order order = new Order().setOrderNumber(String.valueOf(i))
.setSkuId(i)
.setUserName(String.valueOf(i));
orders.add(order);
}
orderDao.saveAll(orders);
}
删
@Test
void deleteOrder(){
//如果数据中没有id=10的记录则会抛出异常
orderDao.deleteById(10);
}

- 处理办法
@Test
void deleteOrder(){
if(orderDao.existsById(10)) {
orderDao.deleteById(10);
}
}
- 或者在dao层写出方法,加上@Transactional
public interface OrderDao extends JpaRepository<Order,Integer>,JpaSpecificationExecutor<Order>{
@Transactional
void deleteOrdersByIdIn(List<Integer> ids);
}
@Test
void deleteTest(){
List<Integer> ids = new ArrayList<>();
ids.add(59);
ids.add(60);
orderDao.deleteOrdersByIdIn(ids);
}

改
@Test
void updateTest(){
Order order = new Order().setId(61)
.setUserName("阿巴阿巴")
.setOrderNumber("61")
.setSkuId(61);
orderDao.saveAndFlush(order);
}
自定义SQL
- 查询
public interface OrderDao extends JpaRepository<Order,Integer>,JpaSpecificationExecutor<Order>{
@Query(value = "select * from `order` where sku_Id > ?1",nativeQuery = true)
List<Order> getOrderBySkuId(Integer skuId);
}
@Test
void getSkuId(){
List<Order> orderBySkuId = orderDao.getOrderBySkuId(17);
System.out.println(orderBySkuId);
}

- 修改
public interface OrderDao extends JpaRepository<Order,Integer>,JpaSpecificationExecutor<Order>{
@Transactional
@Modifying
@Query(value = "delete from `order` where sku_id = ?1 and user_name = ?1" ,nativeQuery = true)
void deleteOrderBySkuIdAndUserName(Integer skuId,String userName);
}
@Test
void deleteBySkuIdAndUserName(){
orderDao.deleteOrderBySkuIdAndUserName(7,"7");
}
