`

Hibernate高级配置

阅读更多
1. 配置数据库连接池

反问数据库,需要不断的创建和释放连接,假如访问量大的话,效率比较低级,服务器消耗大;
使用数据库连接池,我们可以根据实际项目的情况,定义连接池的连接个数,从而可以实现从连接池获取连接,用户放回到连接池。从而有效的提高的系统的执行效率;
Hibernate自带的连接池不是很好,有bug;
推荐使用C3P0,proxool等;

新建项目Hibernate11


导入C3P0 jar包,右键buildPath

c3p0-0.9.2.1.jar
hibernate-c3p0-4.3.5.Final.jar
mchange-commons-java-0.2.3.4.jar

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.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate4</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>
        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 最小连接数 --> 
        <property name="c3p0.min_size">7</property> 
        <!-- 最大连接数 -->   
        <property name="c3p0.max_size">42</property> 
        <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->  
        <property name="c3p0.timeout">1800</property> 
        <!-- 最大的PreparedStatement的数量 -->   
        <property name="c3p0.max_statements">50</property>
        <!-- Mapper -->
        <mapping resource="com/andrew/model/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

HibernateUtil.java

package com.andrew.util;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();
    private static SessionFactory buildSessionFactory() {
        // 1. 实例化配置文件
        Configuration configuration = new Configuration().configure();
        // 2. 实例化服务登记
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties()).build();
        // 3. 获取Session工厂
        return configuration.buildSessionFactory(serviceRegistry);
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

Student.java

package com.andrew.model;
public class Student {
    private int id;
    private String name;
    private int age;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
}

Student.hbm.xml

<?xml version="1.0"?>
<!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.andrew.model">
    <class name="Student" table="t_student">
        <id name="id" column="stuId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="stuName"></property>
        <property name="age" column="stuAge"></property>
    </class>
</hibernate-mapping>

StudentTest.java

package com.andrew.service;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.andrew.model.Student;
import com.andrew.util.HibernateUtil;
public class StudentTest {
    private SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    private Session session;
    @Before
    public void setUp() throws Exception {
        session = sessionFactory.openSession(); // 1. 生成一个session
        session.beginTransaction(); // 2. 开启事务
    }
    @After
    public void tearDown() throws Exception {
        session.getTransaction().commit(); // 3. 提交事务
        session.close(); // 4. 关闭session
    }
    @Test
    public void testSQLQuery() {
        String sql = "select * from t_student";
        Query query = session.createSQLQuery(sql).addEntity(Student.class);
        List studentList = query.list();
        Iterator it = studentList.iterator();
        while (it.hasNext()) {
            Student s = (Student)it.next();
            System.out.println(s);
        }        
    }
}

运行结果:
Hibernate: select * from t_student
Student [id=1, name=张三, age=10]
Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]


2.  配置日志框架Log4J

Log4J作为一个开源的优秀日志框架,被广泛使用,Hibernate4必须包中直接支持Log4J日志框架;我们只需要引入Log4jjar包,即可使用;

导入log4j jar包,邮件buildPath

log4j-1.2.17.jar

log4j.properties

log4j.rootLogger=info,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender 
log4j.appender.appender2=org.apache.log4j.FileAppender 
log4j.appender.appender2.File=E:/hibernate4_logFile.txt
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout  

StudentTest.java

private Logger logger = Logger.getLogger(StudentTest.class);
@Test
public void testSQLQuery() {
    String sql = "select * from t_student";
    Query query = session.createSQLQuery(sql).addEntity(Student.class);
    List studentList = query.list();
    Iterator it = studentList.iterator();
    while (it.hasNext()) {
        Student s = (Student)it.next();
        System.out.println(s);
    }
    logger.debug("这是一个debug信息");
    logger.info("这是一个info信息");
    logger.error("这是一个错误信息");
}

运行结果:
Hibernate: select * from t_student
Student [id=1, name=张三, age=10]
Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]
[main] INFO com.andrew.service.StudentTest - 这是一个info信息
[main] ERROR com.andrew.service.StudentTest - 这是一个错误信息
生成文件:
hibernate4_logFile.txt


3. 配置Hibernate二级缓存

新建项目Hibernate11-02


3.1) 缓存的概念

缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存或者硬盘中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能。Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们把这称做"缓存命中"),则就直接把命中的数据作为结果加以利用,避免了大量发送SQL语句到数据库查询的性能损耗。


3.2) Hibernate缓存的分类

3.2.1) Session缓存(又称作事务缓存):Hibernate内置的,不能卸除。

缓存范围:缓存只能被当前Session对象访问。缓存的生命周期依赖于Session的生命周期,当Session被关闭后,缓存也就结束生命周期。


3.2.2) SessionFactory缓存(又称作应用缓存):使用第三方插件,可插拔。

缓存范围:缓存被应用范围内的所有session共享,不同的Session可以共享。这些session有可能是并发访问缓存,因此必须对缓存进行更新。缓存的生命周期依赖于应用的生命周期,应用结束时,缓存也就结束了生命周期,二级缓存存在于应用程序范围。


3.3) 二级缓存策略提供商

提供了HashTable缓存,EHCache,OSCache,SwarmCache,jBossCathe2,这些缓存机制,其中EHCache,OSCache是不能用于集群环境(ClusterSafe)的,而SwarmCache,jBossCathe2是可以的。HashTable缓存主要是用来测试的,只能把对象放在内存中,EHCache,OSCache可以把对象放在内存(memory)中,也可以把对象放在硬盘(disk)上。


3.4) 什么数据适合放二级缓存中

(1) 经常被访问
(2) 改动不大
(3) 数量有限
(4) 不是很重要的数据,允许出现偶尔并发的数据。
比如组织机构代码,列表信息等;


4) 配置EHCache二级缓存

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.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate4</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>
        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- Mapper -->
        <mapping resource="com/andrew/model/Student.hbm.xml"/>
        <mapping resource="com/andrew/model/Class.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

HibernateUtil.java

package com.andrew.util;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();
    private static SessionFactory buildSessionFactory() {
        // 1. 实例化配置文件
        Configuration configuration = new Configuration().configure();
        // 2. 实例化服务登记
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties()).build();
        // 3. 获取Session工厂
        return configuration.buildSessionFactory(serviceRegistry);
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

Class.java

package com.andrew.model;
public class Class {
    private long id;
    private String name;
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Class.hbm.xml

<?xml version="1.0"?>
<!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.andrew.model">
    <class name="Class" table="t_class">
        <id name="id" column="classId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="className"></property>
    </class>
</hibernate-mapping>

Student.java

package com.andrew.model;
public class Student {
    private long id;
    private String name;
    private Class c;
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Class getC() {
        return c;
    }
    public void setC(Class c) {
        this.c = c;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }
}

Student.hbm.xml

<?xml version="1.0"?>
<!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.andrew.model">
    <class name="Student" table="t_student">
        <id name="id" column="stuId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="stuName"></property>
        <many-to-one name="c" column="classId" class="com.andrew.model.Class" cascade="save-update"></many-to-one>
    </class>
</hibernate-mapping>

insert into t_class values(1, '10级1班');

StudentTest.java

package com.andrew.service;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.andrew.model.Class;
import com.andrew.model.Student;
import com.andrew.util.HibernateUtil;
public class StudentTest {
    private SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    private Session session;
    @Before
    public void setUp() throws Exception {
        session = sessionFactory.openSession(); // 1. 生成一个session
        session.beginTransaction(); // 2. 开启事务
    }
    @After
    public void tearDown() throws Exception {
        session.getTransaction().commit(); // 3. 提交事务
        session.close(); // 4. 关闭session
    }
    @Test
    public void testCache1() {
        Class c1 = (Class)session.get(Class.class, Long.valueOf(1));
        System.out.println(c1.getName());
        Class c2 = (Class)session.get(Class.class, Long.valueOf(1));
        System.out.println(c2.getName());
        System.out.println(c1==c2);
    }
    
    @Test
    public void testCache2(){
        Session session1 = sessionFactory.openSession();
        session1.beginTransaction();
        Class c1 = (Class)session1.get(Class.class, Long.valueOf(1));
        System.out.println(c1.getName());
        session1.getTransaction().commit();
        session1.close();
        
        Session session2 = sessionFactory.openSession();
        session2.beginTransaction();
        Class c2 = (Class)session2.get(Class.class, Long.valueOf(1));
        System.out.println(c2.getName());
        session2.getTransaction().commit();
        session2.close();
        
        System.out.println(c1==c2);
    }
}

运行结果:
Hibernate: select class0_.classId as classId1_0_0_, class0_.className as classNam2_0_0_ from t_class class0_ where class0_.classId=?
10级1班
10级1班
true
运行结果:
Hibernate: select class0_.classId as classId1_0_0_, class0_.className as classNam2_0_0_ from t_class class0_ where class0_.classId=?
10级1班
Hibernate: select class0_.classId as classId1_0_0_, class0_.className as classNam2_0_0_ from t_class class0_ where class0_.classId=?
10级1班
false


5) 配置二级缓存

新建项目Hibernate12-02


导入ehcache jar包,右键buildPath

ehcache-core-2.4.3.jar
hibernate-ehcache-4.3.5.Final.jar
slf4j-api-1.6.1.jar

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.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate4</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>
        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 启用二级缓存 -->
        <property name="cache.use_second_level_cache">true</property>
        <!-- 配置使用的二级缓存的产品 -->
        <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
        <!-- 配置启用查询缓存 -->
        <property name="cache.use_query_cache">true</property>
        <!-- Mapper -->
        <mapping resource="com/andrew/model/Class.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

ehcache.xml

<ehcache>
    <!-- 指定一个文件目录,当EHCache把数据写到硬盘上时,将把数据写到这个目录下 -->
    <diskStore path="e:\\ehcache"/>
    <!--  
        设置缓存的默认数据过期策略 
    -->    
    <defaultCache
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
        />
    <!-- 
        name 设置缓存的名字,他的取值为类的完整名字或者类的集合的名字;
        maxElementsInMemory 设置基于内存的缓存可存放的对象的最大数目
        eternal 如果为true,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds,默认为false;
        timeToIdleSeconds 设定允许对象处于空闲状态的最长时间,以秒为单位;
        timeToLiveSeconds 设定对象允许存在于缓存中的最长时间,以秒为单位;
        overflowToDisk 如果为true,表示当基于内存的缓存中的对象数目达到maxElementsInMemory界限,会把溢出的对象写到基于硬盘的缓存中;
     -->
    <!-- 设定具体的第二级缓存的数据过期策略 -->
    <cache name="com.andrew.model.Class"
        maxElementsInMemory="1"
        eternal="false"
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"
        overflowToDisk="true"
        />
</ehcache>

HibernateUtil.java

package com.andrew.util;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();
    private static SessionFactory buildSessionFactory() {
        // 1. 实例化配置文件
        Configuration configuration = new Configuration().configure();
        // 2. 实例化服务登记
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties()).build();
        // 3. 获取Session工厂
        return configuration.buildSessionFactory(serviceRegistry);
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

Class.java

package com.andrew.model;
public class Class {
    private long id;
    private String name;
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Class.hbm.xml

<?xml version="1.0"?>
<!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.andrew.model">
    <class name="Class" table="t_class">
        <cache usage="read-only"/>
        <id name="id" column="classId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="className"></property>
    </class>
</hibernate-mapping>

StudentTest.java

package com.andrew.service;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
import com.andrew.model.Class;
import com.andrew.util.HibernateUtil;
public class StudentTest {
    private SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    private Session session;    
    @Test
    public void testCache() {
        Session session1 = sessionFactory.openSession();
        session1.beginTransaction();
        Class c1 = (Class)session1.get(Class.class, Long.valueOf(1));
        System.out.println(c1.getName());
        session1.getTransaction().commit();
        session1.close();
        
        Session session2 = sessionFactory.openSession();
        session2.beginTransaction();
        Class c2 = (Class)session2.get(Class.class, Long.valueOf(1));
        System.out.println(c2.getName());
        session2.getTransaction().commit();
        session2.close();
        
        System.out.println(c1==c2);
    }
}

运行结果:
Hibernate: select class0_.classId as classId1_0_0_, class0_.className as classNam2_0_0_ from t_class class0_ where class0_.classId=?
10级1班
10级1班
false
分享到:
评论

相关推荐

    Hibernate XML配置表映射实例

    在本实例中,我们将深入探讨如何使用XML配置文件来实现Hibernate的表映射。 首先,Hibernate的XML配置文件通常被称为`hibernate.cfg.xml`,它是连接数据库、定义SessionFactory等核心设置的地方。在这个文件中,...

    Hibernate之配置使用案例hibernate001

    在实际项目中,还需要根据具体需求进行事务管理、缓存配置、性能优化等更高级的应用。对于`hibernate001`这个案例,它可能是进一步展示了这些概念的实际应用,包括实体的配置、数据库交互以及查询操作等。 总之,...

    hibernate--5.Hibernate配置文件详解-2

    此外,还有其他的高级配置,如查询语言(HQL)的设置、是否启用自动更新或创建数据库结构等: ```xml &lt;property name="hibernate.hbm2ddl.auto"&gt;update ``` 这个属性可以设置为`create`、`create-drop`、`update`或`...

    MyEclipse中hibernate的配置

    ### MyEclipse中Hibernate的基本配置步骤与理解 #### 一、引言 随着软件开发行业的不断发展,ORM(Object-Relational Mapping,对象关系映射)技术已成为连接对象模型与关系型数据库的重要桥梁之一。其中,...

    Hibernate高级教程

    《Hibernate高级教程》是一份深度探索Java对象关系映射(ORM)框架Hibernate的教程,它包含14个精心设计的章节,旨在帮助开发者深入理解并掌握Hibernate的核心特性和高级用法。以下是对这些章节可能涉及的主要知识点...

    hibernate完整配置文件

    在这个“hibernate完整配置文件”中,我们将深入探讨如何配置`hibernate.cfg.xml`文件以及相关的应用设置。 `hibernate.cfg.xml`是Hibernate的核心配置文件,它包含了连接数据库所需的所有信息,如数据库URL、...

    Hibernate配置文件

    它不仅包含了数据库连接的基本信息,还包含了诸如方言设置、缓存策略等一系列高级配置项。通过合理配置这些选项,可以显著提升Hibernate应用的性能和稳定性。在实际项目开发中,根据需求对这些配置进行适当的调整是...

    Spring-hibernate结合使用全xml配置方式

    这涉及到Hibernate的配置属性,如实体扫描路径、方言、缓存策略等。示例配置如下: ```xml &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&gt; &lt;prop key="...

    配置hibernate数据源

    配置Hibernate数据源是一项基础而重要的任务,涉及在Java应用程序中集成和使用Hibernate框架以及MySQL数据库。以下内容旨在详细介绍如何在MyEclipse开发环境中配置Hibernate数据源,同时解释相关概念和步骤。 首先...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第19章 Hibernate高级配置  19.1 配置数据库连接池  19.1.1 使用默认的数据库连接池  19.1.2 使用配置文件指定的数据库连接池  19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置...

    Hibernate可选配置大全

    ### Hibernate可选配置详解 #### 一、Hibernate配置项概览 Hibernate作为一款优秀的Java持久层框架,提供了丰富的配置选项,以适应不同场景下的需求。本文档将详细解析Hibernate的各种可选配置,帮助开发者深入...

    Hibernate配置数据库连接

    为了进一步提升开发效率和优化性能,以下是一些高级配置技巧: - **连接池配置**:合理配置连接池参数可以有效提高系统性能。常用的连接池有 C3P0 和 DBCP。 - **事务管理**:使用 Hibernate 的本地事务管理器或...

    java+hibernate双数据源配置

    总的来说,Java+Hibernate双数据源配置是一项关键技能,它使得开发者能够在同一个应用中管理和操作多个数据库,实现读写分离、负载均衡等高级功能。结合SpringBoot的自动化配置和AOP特性,能够简化配置过程,提升...

    spring和hibernate整合的优化配置

    - **Hibernate**:是一个全功能的对象关系映射(ORM)解决方案,它简化了数据库访问层的开发工作,并提供了一系列高级特性,如缓存管理、事务处理等。 #### 二、Spring与Hibernate整合的意义 将Spring与Hibernate...

    Hibernate 中配置C3P0连接池

    C3P0就是一种广泛使用的第三方JDBC连接池实现,它被集成在Hibernate框架中,可以便捷地进行配置。 **1. 为什么选择C3P0连接池** Hibernate自带的连接池算法并不成熟,主要适用于快速开发和学习,而不适合在生产...

    Hibernate配置数据源.

    ### Hibernate配置数据源详解 #### 一、引言 在软件开发过程中,特别是涉及大量数据库交互的应用场景下,选择合适的数据源配置对于提高系统性能、稳定性具有重要意义。Hibernate作为Java领域内广泛使用的对象关系...

    Hibernate通过配置文件自动生成表

    在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者...同时,利用Hibernate的其他高级特性,如懒加载、缓存策略、查询语言HQL等,可以进一步提高开发效率和应用性能。

Global site tag (gtag.js) - Google Analytics