package com.malk.base;


import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @EntityListeners 且需要在启动类添加 @EnableJpaAuditing 注解, 即可在字段上添加 @CreatedDate & @LastModifiedDate 实现 [Date 类型数据 - 自动插入创建 & 更新时间]
 * -
 * 项目绑定数据库后，进行分配。即可消除@Table、 在 idea 下不能匹配到信息的报错提示
 * @Table指定表【下划线和小驼峰都可】, 若使用驼峰则依然会有报错提示. 若类名从驼峰转为下划线和表名相同则可不需要注解
 * -
 * 自定义查询
 * @Query 当设置nativeQuery=true即可以使用原生SQL进行查询, 默认为false, 使用JPQL语法 [JPQL不支持insert语法, 注意: nativeQuery查询使用表名, 不能使用对象名]
 * - 索引参数: 索引值从1开始，查询中"?X"个数需要与方法定义的参数个数相一致，并且顺序也要一致
 * - 命名参数: 可以定义好参数名，赋值时使用@Param("参数名"), 而不用管顺序. 对入参使用 @Param("email") 修饰, @Query内使用 :email 进行取值
 * - 关于返回值: update 语法, 返回值为 void. select 语法, 返回单个可用集合接收; 若返回多个用对象接收就会异常
 * @Modifying注解 编写JPQL实现DELETE和UPDATE操作的时候必须加上@modifying注解，以通知Spring Data 这是一个DELETE或UPDATE操作
 * -
 * 事务管理 @Transactional注解，可以修饰类或方法
 * - 配置 jpa.database-platform: org.hibernate.dialect.MySQL57Dialect, JPA建表的默认引擎修改为：InNoDB
 * - 在启动类添加 @EnableTransactionManagement 注解, 开启事务支持后，然后在访问数据库的Service方法上添加注解 @Transactional 即可 [Service指dao, 或调用dao的地方]
 * -
 * 动态匹配, 注解于类
 * @DynamicInsert : 默认true,指定用于INSERT的 SQL 将会在运行时动态生成，并且只包含那些非空值字段。(如果是)
 * @DynamicUpdate : 默认true, 指定用于UPDATE 的SQL将会在运行时动态生成，并且只更新那些改变过的字段
 */
public interface BaseDao extends JpaRepository<BasePo, Long> {

}
