1、pom引入
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2、创建表
sql语句:
CREATE TABLE `product_category` (
`category_id` INT NOT NULL AUTO_INCREMENT,
`category_name` VARCHAR(64) NOT NULL COMMENT '类目名字',
`category_type` INT NOT NULL COMMENT '类目编号',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`category_id`)
);
3、配置application.yml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
## mysql默认ssl安全连接,会报错
url: jdbc:mysql://192.168.199.124/gardener?characterEncoding=utf-8&useSSL=false
jpa:
## 控制台打印sql语句
show-sql: true
4、写实体类
@Entity //标识为数据库实体类
@DynamicUpdate //动态的更新update时间
@Data //帮助我们添加get set方法
public class CategoryDO {
@Id //主键
@GeneratedValue(strategy = GenerationType.IDENTITY)//自增
private Integer categoryId;
/** 类目名字. */
private String categoryName;
/** 类目编号. */
private Integer categoryType;
private Date createTime;
private Date updateTime;
public CategoryDO() {
}
public CategoryDO(String categoryName, Integer categoryType) {
this.categoryName = categoryName;
this.categoryType = categoryType;
}
}
5、写DAO接口
/**
* @Author zzy
* @Description TODO
* @Date 2018/9/16 17:18
* @Version 1.0
**/
public interface CategoryRepository extends JpaRepository<CategoryDO,Integer> {
/**
*
* @param id
* @return
*/
CategoryDO findCategoryDOByCategoryId(Integer id);
/**
* 按照类目查询
* @param categoryTypeList
* @return
*/
List<CategoryDO> findByCategoryTypeIn(List<Integer> categoryTypeList);
}
6、测试
@RunWith(SpringRunner.class) //指定默认的运行器,加载spring上下文
@SpringBootTest //目前不知道什么意思
public class CategoryDOTest {
@Autowired
private CategoryRepository categoryRepository;
@Test
public void testsave(){
CategoryDO categoryDO = new CategoryDO("饮料",1);
CategoryDO save = categoryRepository.save(categoryDO);
Assert.assertEquals(new Integer(1),save.getCategoryId());
}
}
7 坑
主键增长方式必须填写,否则会报 springBoot+jpa 测试自增时数据库报错Springboot-jpa Table 'XXX.hibernate_sequence' doesn't exist
错误。
查看GeneratedValue源码:
GenerationType strategy() default GenerationType.AUTO;
JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
如果按照默认策略,再插入时候也没指定id,则会报错
网友评论