1.简介
Hibernate (避免使用繁琐的sql语句去操作数据 梦想)
1.操作数据的 对象关系型数据库
使用 面向对象 的思想 去增删改查 2.直接插入一个User对象
2.获取要修改的对象 sava
3.根据你使用方法的不同 自动给你生成sql语句
4.HQL Hibernate特有的sql语句
1.## auto schema export 自动导出表结构. 自动建表
2.#hibernate.hbm2ddl.auto create 自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
3.#hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
4.#hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
5.#hibernate.hbm2ddl.auto validate 校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.
2.操作方法
增加
save()
获取对象 再改
get(,)
load()
删除(根据 id)
delete()
HQL 语句 hibernate特有的SQL语句
createQuery()
sql 语句
createNativeQuery()
1.创建一个实体类User
* 实体类
* 需要创建实体类 对应的 映射文件
* 名字规范(User.hbm.xml)
* 1.与实体类名字相同
* 2.与实体类在同一个包下
* 3.xml文件
*/
public class User {
private int id;
private String username;
private String password;
public User() {
super();
}
public User(int id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.在包下创建一个User.hbm.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.lanou3g">
<class name="User" table="user">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="username" column="username"></property>
<property name="password" column="password"></property>
</class>
</hibernate-mapping>
3.在src下创建一个Hibernate.cfg.xml文件
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/a_hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/lanou3g/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4.简单封装HibernateUtils工具类
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static SessionFactory sessionFactory = null;
static {
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
}
public static Session getSession() {
return sessionFactory.openSession();
}
public static Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
}
5.创建测试类测试HQL语句
import java.util.Arrays
import java.util.List
import org.hibernate.Session
import org.hibernate.SessionFactory
import org.hibernate.Transaction
import org.hibernate.cfg.Configuration
import org.hibernate.query.NativeQuery
import org.hibernate.query.Query
import org.junit.jupiter.api.Test
public class Demo01 {
@Test
public void fun1() {
//1.加载配置文件
//直接调用configure 系统会默认读取 hibernate.cfg.xml这个文件
Configuration configuration = new Configuration().configure()
//2.获取sessionFactory对象 相当于获取连接池对象
SessionFactory sessionFactory = configuration.buildSessionFactory()
//3.从工厂中获取一个session对象
//openSession()获取的是一个全新的session
Session session = sessionFactory.openSession()
// sessionFactory.getCurrentSession()
//4.执行数据库插入对象
User user = new User()
user.setUsername("wanglong")
user.setPassword("123")
//使用session对象开启一个事物(返回一个事物对象)
Transaction transaction = session.beginTransaction()
//包裹要执行的任务
session.save(user)
//5.提交事物
transaction.commit()
//6.关闭资源
session.close()
sessionFactory.close()
}
@Test
public void fun2() {
Configuration configuration = new Configuration().configure()
SessionFactory sessionFactory = configuration.buildSessionFactory()
Session session = sessionFactory.openSession()
Transaction transaction = session.beginTransaction()
//修改对象
//1.获取对象(根据id获取)
User user = session.get(User.class, 11)
//2.修改对象
user.setUsername("zp")
//3.把对象更新一遍
//注意:修改的时候就使用update
//3.把对象再保存一遍
session.update(user)
transaction.commit()
session.close()
sessionFactory.close()
}
@Test
public void fun3() {
Configuration configuration = new Configuration().configure()
SessionFactory sessionFactory = configuration.buildSessionFactory()
Session session = sessionFactory.openSession()
Transaction transaction = session.beginTransaction()
//查
User user = session.get(User.class, 11)
transaction.commit()
session.close()
sessionFactory.close()
System.out.println(user)
}
@Test
public void fun4() {
Configuration configuration = new Configuration().configure()
SessionFactory sessionFactory = configuration.buildSessionFactory()
Session session = sessionFactory.openSession()
Transaction transaction = session.beginTransaction()
//查
User user = session.load(User.class, 11)
transaction.commit()
session.close()
sessionFactory.close()
//这时代理对象才会使用session去查询数据库
//而session已经销毁 此次打印报错12 报错
//System.out.println(user)
}
@Test
public void fun5() {
Configuration configuration = new Configuration().configure()
//sessionFactory是线程安全的
SessionFactory sessionFactory = configuration.buildSessionFactory()
Session session = sessionFactory.openSession()
Transaction transaction = session.beginTransaction()
//删(按id删除)
//1.先查对象 把该对象删除
// User user = session.get(User.class, 11)
// session.delete(user)
//2.创建一个对象 只赋值id 然后删除
User user = new User()
user.setId(18)
session.delete(user)
transaction.commit()
session.close()
sessionFactory.close()
//这时代理对象才会使用session去查询数据库
//而session已经销毁 报错
//System.out.println(user)
}
//使用HQL查询
@Test
public void fun6() {
//获取session对象
Session session = HibernateUtils.getSession()
Transaction transaction = session.beginTransaction()
//查询方法
//返回的是 保存查询结果的对象
//Query<User> query = session.createQuery("from com.lanou3g.User")
Query<User> query2 = session.createQuery("from User",User.class)
//获取到查询结果的集合
List<User> list = query2.list()
System.out.println(list)
transaction.commit()
session.close()
}
//SQL语句查询
@Test
public void fun7() {
//获取session对象
Session session = HibernateUtils.getSession()
Transaction transaction = session.beginTransaction()
//直接使用SQL语句查询
NativeQuery nativeQuery = session.createNativeQuery("select * from user")
List<Object[]> list = nativeQuery.list()
//list中保存几个对象 每一个对象是一个Object[]
for (Object[] object : list) {
System.out.println(Arrays.toString(object))
}
System.out.println(list)
transaction.commit()
session.close()
}
}