社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
主要是学习Hibernate框架的主要基础知识,以及其结构体系和运行过程,核心组件及其应用。
Hibernate对JDBC进行了轻量级的封装,简单来说,我们在Dao层写代码时对数据库操作就是讲Javabean进行拆分,拼装sql;查询数据时,变将数据库中数据组合,拼装成Javabean。Hibernate就是实现Javabean和数据库列之间的映射关系,从而简化开发。
数据持久化就是把内存中的数据(对象)永久保存到数据库中,即实现:保存、更新、、删除、查询、加载。
为了在系统中能够找到所需对象,需要为每一个对象分配一个唯一的标识号。在关系数据库中称之为主键,而在对象术语中,则叫做对象标识(Object identifier-OID)。
ORM的全称是Object/Relation Mapping,即对象/关系映射,是一种数据持久化技术,其基本思想是把对象模型(例如:JavaBean对象)与关系数据库的表建立映射关系。
https://blog.csdn.net/wyy_1208/article/details/78434919
Hibernate配置文件主要用来设置访问数据库所需要的参数。
见文章末仓库地址
见文章末仓库地址
Hibernate的映射文件把一个PO类和一个数据表联系起来。通常一个PO类对应一个映射文件。命名规范:PO类名称.hbm.xml,且与PO类在同一包下。
安装插件后可自动生成
<hibernate-mapping>
<class name="实体类PO所在的包路径名及类" table="对应数据库中的数据表名">
<id name="类属性id" type="属性类型">
<column name="对应表的主键字段" />
<generator class="生成主键的策略" />
</id>
<property name="类属性名" type="该属性的类型">
<column name="对应该属性在数据表中的字段名" />
</property>
<-- 其它类各属性与数据表字段之间的映射关系-->
</class>
</hibernate-mapping>
Hibernate把查询条件封装为一个Criteria对象,基于Criteria对象实现查询——Query By Criteria查询(QBC查询)。
基于QBC的查询,其查询基本过程是:
Scanner cin = new Scanner(System.in);
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
session = sessionFactory.openSession();
transaction = session.beginTransaction();
// (1)创建查询条件的查询对象cr
Criteria cr = session.createCriteria(Vip_Member.class);
//条件查询
//cr.add(Restrictions.like("name", "蜘蛛%"));
//条件查询
//cr.add(Restrictions.eq("name", "蜘蛛侠"));
//条件查询+名称排序
cr.add(Restrictions.like("name", "蜘%"));
cr.addOrder(Order.asc("name"));
List<Vip_Member> list = cr.list();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getName());
}
transaction.commit();
session.close();
sessionFactory.close();
String sql="insert into vip_member(name,playUrl,description,score,secondInfo,imageUrl) values('asd','qwe','12',2.2,'333','444')";
SQLQuery sqlQuery = session.createSQLQuery(sql);
int flag=sqlQuery.executeUpdate();
//查询更新内容
String sql2="select * from vip_member where name = 'asd'";
sqlQuery = session.createSQLQuery(sql2);
List<Vip_Member> list =null;
sqlQuery.addEntity(Vip_Member.class);
list=sqlQuery.list();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getId());
}
应用于班级与学生的信息管理。
文章地址:
基于爬取的爱奇艺电影信息做增删改查。
文章地址:点我进入
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public final class HibernateUtil {
private static SessionFactory sessionFactory;
private static ThreadLocal<Session> session = new ThreadLocal<Session>();
private HibernateUtil() {
}
static {
// 第一步:读取Hibernate的配置文件 hibernamte.cfg.xml文件
Configuration configuration = new Configuration().configure();
// 第二步:创建服务注册构建器对象,通过配置对象中加载所有的配置信息
StandardServiceRegistryBuilder regbulider = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
// 创建注册服务
ServiceRegistry serviceRegistry = regbulider.build();
// 第三步:创建会话工厂
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
public static Session getThreadLocalSession() {
Session s = (Session) session.get();
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() {
Session s = (Session) session.get();
if (s != null) {
s.close();
session.set(null);
}
}
}
import java.util.List;
public interface IBaseDao<T> {
public int insert(T o); // 将对象o,添加到数据库内
public int insertList(List<T> list); // 将对象集合,添加到数据库内
public int update(T o); // 利用对象o,修改当前记录
public int deleteList(Class<T> c, int... ids); // 利用id的集合,删除该集合中对应id的记录。
public int delete(T o);// 从数据库中删除一个记录o
public int delete(Class<T> c, int id);// 利用关键字id 从数据库中删除一个记录
public T findById(Class<T> c, int id); // 利用id,查找一条记录
public T findOne(String hql, String[] param); // 查询单条记录
public List<T> find(String hql, String[] param); // 按条件查找多条记录
public List<T> findPage(String hql, String[] param, int page, int size); // 分页查找所有对象
public int getCount(String hql, String[] pras);// 返回数据个数
public List<T> findByFields(String hql, String fields[],String condition); //单字段模糊查找满足条件的所有对象
}
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.raptor.db_util.HibernateUtil;
public class DaoHibernate<T> implements IBaseDao<T> {
@Override
public int insert(T o) {
Session s = null;
Transaction tx = null;
int result = 0;
try {
s = HibernateUtil.getThreadLocalSession();
tx = s.beginTransaction();
s.save(o);
tx.commit();
result=1;
} catch (Exception e) {
if (tx != null) {
tx.rollback();// 事物回滚
}
} finally {
HibernateUtil.closeSession();
}
return result;
}
@Override
public int insertList(List<T> list) {
for (T t : list) {
insert(t);
}
return list.size();
}
@Override
public int update(T o) {
Session s = null;
int result = 0;
Transaction tx = null;
try {
s = HibernateUtil.getThreadLocalSession();
tx = s.beginTransaction();
s.update(o);
tx.commit();
result = 1;
} catch (Exception e) {
if (tx != null) {
tx.rollback();// 事物回滚
}
} finally {
HibernateUtil.closeSession();
}
return result;
}
@Override
public int deleteList(Class<T> c, int... ids) {
for (int id : ids) {
delete(c, id);
}
return ids.length;
}
@Override
public int delete(T o) {
Session s = null;
Transaction tx = null;
int result = 0;
try {
s = HibernateUtil.getThreadLocalSession();
tx = s.beginTransaction();
s.delete(o);
tx.commit();
result = 1;
} catch (Exception e) {
if (tx != null) {
tx.rollback();// 事物回滚
}
} finally {
HibernateUtil.closeSession();
}
return result;
}
@Override
public int delete(Class<T> c, int id) {
Session s = null;
Transaction tx = null;
int result = 0;
try {
s = HibernateUtil.getThreadLocalSession();
tx = s.beginTransaction();
s.delete(s.load(c, id));
tx.commit();
result = 1;
} catch (Exception e) {
if (tx != null) {
tx.rollback();// 事物回滚
}
} finally {
HibernateUtil.closeSession();
}
return result;
}
@SuppressWarnings("unchecked")
@Override
public T findById(Class<T> c, int id) {
Session s = null;
T t = null;
try {
s = HibernateUtil.getThreadLocalSession();
t = (T)s.get(c, id);
} finally {
HibernateUtil.closeSession();
}
return t;
}
@SuppressWarnings("unchecked")
@Override
public T findOne(String hql, String[] param) { // 查询单条记录
T t = null;
Session s = null;
try {
s = HibernateUtil.getThreadLocalSession();
Query query = s.createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
query.setParameter(i, param[i]);
}
}
t = (T) query.uniqueResult();
} finally {
HibernateUtil.closeSession();
}
return t;
}
@SuppressWarnings("unchecked")
@Override
public List<T> find(String hql, String[] param) {
List<T> list = null;
Session s = null;
try {
s = HibernateUtil.getThreadLocalSession();
Query query = s.createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
query.setParameter(i, param[i]);
}
}
list = query.list();
} finally {
HibernateUtil.closeSession();
}
return list;
}
@SuppressWarnings("unchecked")
@Override
public List<T> findPage(String hql, String[] param, int page, int size) { // 分页查找所有对象
List<T> list = null;
Session s = null;
try {
s = HibernateUtil.getThreadLocalSession();
Query query = s.createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
query.setParameter(i, param[i]);
}
}
// 筛选条数
query.setFirstResult((page - 1) * size);
query.setMaxResults(size);
list = query.list();
} finally {
HibernateUtil.closeSession();
}
return list;
}
@Override
public int getCount(String hql, String[] param) {// 返回数据个数
int resu = 0;
Session s = null;
try
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/C18854805113/article/details/103875053
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!