pom:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- 添加Hibernate依赖 -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.32.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.32.Final</version>
</dependency>
<!-- mysql数据库的驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
hibernate.cfg.xml文件:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据源配置-->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/game?useAffectedRows=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.pool_size">10</property>
<!--打印SQL语句-->
<property name="show_sql">true</property>
<!--格式化SQL语句-->
<property name="format_sql">true</property>
<!--是否自动生成数据表,如果表存在则直接使用,否则县创建
默认none 不自动生成
update 如果没有表会创建,有会检查更新
create 创建
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--数据库方言,方便根据不同方言自动生成SQL语句-->
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!-- 指定哪些pojo或entity 需要进行ORM映射-->
<mapping class="com.jpa.entity.User"></mapping>
</session-factory>
</hibernate-configuration>
user类
package com.jpa.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
@Entity //作为hibernate实体类
@Table(name = "t_user") //映射的表名
@Data
public class User {
/*
* @Id:声明主键的配置
* @GeneratedValue:
*GenerationType.TABLE:使用一个特定的数据库表格来保存主键。
GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
GenerationType.IDENTITY:主键由数据库自动生成(主要是自动增长型)
GenerationType.AUTO:主键由程序控制。
*
* @Column:指定实体类属性和数据库表之间的对应关系
* name:指定数据库表的列名称。
unique:是否唯一
nullable:是否可以为空
nserttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定义建表时创建此列的DDL
*
* */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;
private String username;
private String password;
private Long role;
private String roleName;
private String createUser;
private String updateUser;
private Date createTime;
private Date updateTime;
}
test测试:
package com.jpa;
import com.jpa.entity.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
public class JpaTests {
// session工厂 Session:数据库会话 代码持久化操作数据库的一个桥梁
private SessionFactory sf;
@Before
public void init(){
StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("/hibernate.cfg.xml").build();
// 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的session工厂
System.out.println(registry);
try {
sf = new MetadataSources(registry).buildMetadata().buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
// 错误则打印输出,并销毁
StandardServiceRegistryBuilder.destroy(registry);
}
}
@Test
public void testset(){
// session进行持久化操作
try(Session session = sf.openSession()){
Transaction transaction = session.beginTransaction();
User user = new User();
user.setPassword("123456")
.setUsername("jpa")
.setRole(1l)
.setRoleName("jpa");
session.save(user);
transaction.commit();
}
}
@Test
public void test_remove(){
// session进行持久化操作
try(Session session = sf.openSession()){
Transaction transaction = session.beginTransaction();
User user = new User();
user.setId(3l);
// session.update(user);
session.remove(user);
transaction.commit();
}
}
@Test
public void test_updae(){
// session进行持久化操作
try(Session session = sf.openSession()){
Transaction transaction = session.beginTransaction();
User user = new User();
user.setPassword("123456")
.setUsername("jpa")
.setRole(1l)
.setRoleName("JPA1")
.setId(5l);
session.update(user);
// session.saveOrUpdate(user);
transaction.commit();
}
}
@Test
public void testget(){
// session进行持久化操作
try(Session session = sf.openSession()){
Transaction transaction = session.beginTransaction();
User user = new User();
User user1 = session.find(User.class,2l);
System.out.println(user1);
transaction.commit();
}
}
@Test
public void test_lazy(){
// session进行持久化操作
try(Session session = sf.openSession()){
Transaction transaction = session.beginTransaction();
User user = new User();
User user1 = session.load(User.class,2l);//load:懒加载
System.out.println("=========");
System.out.println(user1);
transaction.commit();
}
}
@Test
public void test_hql(){
// session进行持久化操作
try(Session session = sf.openSession()){
Transaction transaction = session.beginTransaction();
String hql = "FROM User";
List<User> userList = session.createQuery(hql,User.class).getResultList();
System.out.println(userList);
transaction.commit();
}
}
@Test
public void test_hql02(){
// session进行持久化操作
try(Session session = sf.openSession()){
Transaction transaction = session.beginTransaction();
String hql = "FROM User where id =:id";
List<User> userList = session.createQuery(hql,User.class)
.setParameter("id",1l)
.getResultList();
System.out.println(userList);
transaction.commit();
}
}
}