美文网首页
SpringBoot整合springdata-jpa

SpringBoot整合springdata-jpa

作者: 6cc89d7ec09f | 来源:发表于2018-09-16 18:30 被阅读89次

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,则会报错

相关文章

网友评论

      本文标题:SpringBoot整合springdata-jpa

      本文链接:https://www.haomeiwen.com/subject/pfjfnftx.html