Hibernate针对MySQL8使用的方言是MySQLDialect,MySQL8Dialect被弃用。
JAP和DATASOURCE在同个Level上缩进,否则不起作用。
POM
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
YML 文件
spring:
datasource:
primary:
jdbc-url: jdbc:mysql://localhost:3306/mybook?
useUnicode=true&characterEncoding=utf-8
username: root
password: ENC(BHwwNZhfnSS9QLRiWYLuMw==)
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database-platform: org.hibernate.dialect.MySQLDialect
database: mysql
hibernate.ddl-auto: update
generate-ddl: true
show-sql: true
open-in-view: true
PO
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name="bookorder1")
public class OrderPO{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public long id;
@Column(nullable = false,length=32)
public String orderName;
@Column(length=512)
public String orderDes;
public Date createTime;
}
VO
@Data
@Component
@Slf4j
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonPropertyOrder(value= {"time","orderName"})
@ConfigurationProperties(prefix="bookorder")
@Validated
public class OrderVO {
//@JsonIgnore
public long id;
public String orderName;
public String orderDes;
@JsonFormat(shape = JsonFormat.Shape.STRING,
pattern = "yyyy-MM-dd hh:mm:ss", timezone = "GMT+8")
public Date createTime;
//@JsonProperty("buy")
//@JsonInclude(JsonInclude.Include.NON_NULL)
//public List<Buyer> buyer;
}
DAO
OrderRepository集成JpaRepository实现数据库访问,不需要自己实现DAO的编码。
public interface OrderRepository extends JpaRepository<OrderPO, Long> {
}
Service
代码示例,引用JPA的Respository访问数据库。
@Resource
private OrderRepository orderRepository;
@Resource
private Mapper mapper;
@Override
public OrderPO getOrderById(Long id) {
//return orderDAO.findById(id,null);
return orderRepository.getReferenceById(id);
}
Controller
JPA【spring-boot-starter-data-jpa】和JDBC【spring-boot-starter-jdbc】在Controller层逻辑相同。
Dozer
通过Dozer实现VO-->PO的自动转换,不需要自己编码。
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.4.0</version>
</dependency>
代码示例
import org.dozer.Mapper;
@Resource
private Mapper mapper;
@Override
@Transactional
public void saveOrder(OrderVO orderVO) {
//orderDAO.saveOrder(orderVO,primaryJdbcTemplate);
//orderDAO.saveOrder(orderVO,secondaryJdbcTemplate);
OrderPO orderPO = mapper.map(orderVO, OrderPO.class);
orderRepository.save(orderPO);
}