Hibernate学习笔记

Hibernate学习笔记

一、IDEA下的数据库配置

resources目录下的application.properties中填入以下配置

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #数据库驱动  
spring.datasource.url=jdbc:mysql://localhost:3306/mysql #数据库url  
spring.datasource.username=username #用户名  
spring.datasource.password=password #密码  

spring.jpa.show-sql=true #表示在jpa执行sql时会在控制台打印sql语句  
#使用InnoDB引擎 不加这句则默认为myisam引擎
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=validate  #validate表示每次启动是会检查entity类中的注解与数据表是否匹配  另一个参数是update,表示每次启动更新数据表

对于spring.jpa.hibernate.ddl-auto = update的说明:
update意思是每次程序启动只会对比 实体类的属性 与 表的列,即如果原来的表示这样的:

public class User {
  
   @id
   private int id;

   @Column(name = "username")
   private String username;
}

如果仅仅是修改注解,例如将@Column(name = "username")修改为@Column(name = "username",nullable = false,length = 20),这样表结构是不会更新的,要想更新的话可以将update改成create,但是这样每次启动后数据库数据表会被删掉重新创建,注意提前做好数据备份

二、@Entity相关

@Entity //表示这是一个实体类,以对应数据库的表或试图  
@Table(name = "muser") //映射数据表或视图,如果设定则默认为类名  
public class User{

   @Id //表示这是主键  
   @GeneratedValue(strategy = GenerationType.IDENTITY) //表示主键自增  
   private int id;

   //@Column 指定列名,如果不指定则默认就是属性名。
   //nullable 是否为空; length 长度
   @Column(name = "username",nullable = false,length = 20)
   private String username;

   //注意如果属性名采用驼峰式命名,那么转换成列时会自动变为 first_name
   @ColumnDefault("'胡'")  //设置默认值  注意有两个单引号括起来。
   private String firstName;

   @Transient  //加上这个注解表示该属性不对应数据表中的列 javax.persistence.*;
   private int stuNo;

   //还得有一个空的构造方法
   public User() {
  
   }
 
   //别忘了还有get/set方法
}

三、Repository相关

public interface UserRepository extends JpaRepository {

    @Query
    User findById(int id);  //这种普通的通过列的查询就加一个@Query注解即可,如果连上了Database会有提示的。  

    @Modifying  // 修改/删除操作
    @Transactional  //事务  修改或删除操作必须加上这个注解,不然会报错
    @Query(nativeQuery = true,value = "update user set username = ? where id = ?") //nativeQuery = true 表示使用指定方言(mysql,oracle等)
    int updateUsername(String newName,String userId);

    @Modifying  
    @Transactional  
    @Query(value = "update user p set select_num = select_num + 1 where id in (:collection)",nativeQuery = true) //另一种指明参数的方法
    int addNum(@Param("collection") Collection collection); //这样就可以使用 in 了
}

四、视图映射

视图映射其实就是数据表的映射,只不过视图没有主键,所以这里得指定一个唯一列作为主键,否则会报错

@Entity
@Table(name = "questionaire_view")
public class QuestionaireView {

   @Id
   @Column(name = "cid")
   private int chooseId;

   .....
}

你可能感兴趣的:(Hibernate学习笔记)