Hibernate是java数据持久化的框架之一(还有一种常用的是Mybatis),自动化程度很高。
Hibernate的思路为:(仅仅只是理解的思路,代码真正运行的步骤并非如此)
第一步,连接数据库
第二步,java实体与数据库的table对应
第三部,java接口提供方法(方法与SQL语句对应)进行SQL语句操作
实例:
SpringBoot背景,可以先看之前的SpringBoot+Mybatis实例
https://blog.youkuaiyun.com/weixin_43751710/article/details/90256095
前期准备:
引入jar包(jpa就是hibernate的模式)
<!-- hibernate的jar包依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
application.yml
spring:
datasource:
url: ……
username: ……
password: ……
driver-class-name: com.mysql.jdbc.Driver
jpa:
database: MYSQL
show-sql: true
hibernate:
ddl-auto: update
naming:
strategy: org.hibernate.cfg.ImprovedNamingStrategy
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
第一步,建立java实体Xuser与数据库table对应
目录结构:
package com.huoli.demo.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name = "xuser")
//@Table(name = "xuser")
public class Xuser implements Serializable
{
@Id //注意在MySQL中,这个ID也必须设置为自动增长,如果是int类型的话
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "xuser_id")
private int id;
@Column(name = "xuser_name")
private String name;
@Column(name = "xuser_age")
private int age;
public int getId()
{
return id;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public void setId(int id)
{
this.id = id;
}
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
}
第二步、创建java接口XuserRepository实现SQL语句操作
目录结构:
package com.huoli.demo.repository;
import java.util.List;
import javax.persistence.Table;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.huoli.demo.entity.Xuser;
@Repository("xuserRepository")
@Table(name = "xuser")
public interface XuserRepository extends JpaRepository<Xuser, Long>
{
//public Xuser selectOne(int id);
@Modifying
@Transactional
//@Query(value = "insert into xuser value(?,?,?)",nativeQuery = true)
public Xuser save(Xuser xuser);
/*
* 根据用户名查询
*/
@Query("select t from xuser t where t.name = :name") //这并非是SQL语句(虽然很像),其中的“t”也不可以换为“*”
public List<Xuser> findByName(@Param("name") String name);
/*
* 查询全部
* */
//@Query("select t from xuser t")
//List<Xuser> find();
}
第三步、通过controller调用
@RequestMapping("addXuser")
public void addXuser()
{
Xuser x = new Xuser();
x.setId(521355);
x.setName("xiang");
x.setAge(18);
xuserRepository.save(x);
}
@RequestMapping("findXuserByName")
public List<Xuser> findXuserByName(String name)
{
return xuserRepository.findByName(name);
}