Spring中数据源和数据库连接池配置的两种艺术

经过sping3 +Hibernate4+StrutsMVC落成 考试管理种类 逻辑 二,sping3hibernate4

hibernate使用须要配置以下多少个地点。

1.安插数据源

<bean id=”dataSource”
class=”org.apache.commons.dbcp.BasicDataSource”>
<property name=”driverClassName”
value=”com.mysql.jdbc.Driver”></property>
<property name=”url”
value=”jdbc:mysql://localhost:3306/testroom?useUnicode=true&characterEncoding=UTF-8″></property>
<property name=”username” value=”root”></property>
<property name=”password” value=”root”></property>
</bean>

2.配置sessionFactory工厂

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.connection.autocommit">true</prop>
            </props>
        </property>
     <!-- 配置 hibernate模型对象映射文件-->
        <property name="mappingResources">
            <list>
                <value>cn/lt/entity/User.hbm.xml</value>
                <value>cn/lt/entity/Questions.hbm.xml</value>
                <value>cn/lt/entity/fraction.hbm.xml</value>
            </list>
        </property>
    </bean>

3.配备事务管理

<bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <!--配置 注解-->
    <tx:annotation-driven transaction-manager="transactionManager" /></beans>

 

+Hibernate4+StrutsMVC完毕 考试管理类别逻辑 二,sping3hibernate4 hibernate使用须求安插以下多少个方面。
1.安排数据源 bean id=”dataSource” cl…

Spring 中数据源和数据库连接池配置的两种方法

一、序言

      
最近径直用mybatis做开采,此前用过hibernate,能感受到某个它们在利用上的分别,可是总想抽取时间来好好相比比较弄弄明白它们各自的上下,以便越来越好举办精选和深入的摸底。

      
网络也看了众多质地,结合自身的利用体会,粗率地包涵和总计了刹那间,以供大家仿照效法。

一、           数据源的安顿:

二、具体接纳上的不如

*    与 Hibernate 集成最普及的一种:

1、所需的jar包

Mybatis:只需要3个(mybatis-3.1.1.jar,mybatis-3.1.1-javadoc.jar,mybatis-3.1.1-sources.jar)      

Hibernate:依据效益不一大约要求十多个

<!– 配置 sessionFactory –>

2、映射关系

 Mybatis:实体类与sql之间的炫彩

Hibernate:实体类与数据库之间隐射

       < bean id = “sessionFactory” class = “org.springframework.orm.hibernate3.LocalSessionFactoryBean” >

3、配置文件

Student:

属性:int  id,String name,String password;

艺术配置:

 getStudentByName;   //通过name查找

getStudentById       //通过id查找

insertStudent        //添加Student 

updateStudent        //更改Student

deleteStudent        //通过id删除Student

deleteStudentById   //通过name伤处Student

selectStudentmohu   //通过name模糊查询

              < property name = “configLocation” >

Mybatis:

总布署文件:mybatisConfig.xml

<configuration>

<typeAliases>

<typeAlias alias=”Student” type=”com.niit.model.Student”/>

</typeAliases>

<environments default=”development”>

<environment id=”development”>

<transactionManager type=”JDBC”/>

<dataSource type=”POOLED”>

<property name=”driver” value=”com.mysql.jdbc.Driver”/>

<property name=”url” value=”jdbc:mysql://127.0.0.1:3306/mybatis”/>

<property name=”username” value=”root”/>

<property name=”password” value=”root”/>

</dataSource>

</environment>

</environments>

<mappers>

<mapper resource=”com/niit/model/StudentMap.xml”/>

</mappers>

</configuration>

 

l 实体类映射文件:StudentMap.xml(贰个或三个)

<mapper namespace=”com.niit.model.StudentMap”>

<select id=”getStudentByName” resultType=”Student”

parameterType=”string”>

select * from student where name=#{name}

</select>

 

<select id=”getStudentById” resultType=”Student” parameterType=”int”>

select * from student where id=#{id}

</select>

 

<insert id=”insertStudent” parameterType=”Student”>

insert into student(id, name, password) value(#{id}, #{name}, #{password})

</insert>

 

<update id=”updateStudent” parameterType=”Student”>

update student set name=#{name}, password=#{password} where id=#{id}

</update>

 

<delete id=”deleteStudent” parameterType=”String”>

delete from student where name=#{name}

</delete>

 

<delete id=”deleteStudentById” parameterType=”int”>

delete from student where id=#{id}

</delete>

 

<select id=”selectStudentmohu” parameterType=”String”

resultType=”Student”>

select * from student where name like “%”#{name}”%”

</select>

</mapper>  

                     < value > classpath:hibernate.cfg .xml </ value >

Hibernate:

l 总布局文件:hibernate.cfg.xml

              <hibernate-configuration>

  <session-factory>

  <property name=”connection.username”>root</property>

  <property name=”connection.url”>jdbc:mysql://127.0.0.1:3306/sample</property>

  <property name=”dialect”>org.hibernate.dialect.MySQLDialect </property>

  <property name=”connection.password”>123</property>

  <property name=”connection.driver_class”>com.mysql.jdbc.Driver</property>

  <property name=”hibernate.show_sql”>True</property>

  <mapping resource=”com/niit/model/Student.hbm.xml” />

  </session-factory>

  </hibernate-configuration>

 

l 实体类配置文件:Student.hbm.xml(贰个或四个)

<hibernate-mapping package=”com.niit.model.”>

    <class name=”Student” table=”student”>

       <id name=”id” column=”id” type=”int”><generator class=”identity”/> </id>

       <property name=”name” type=”java.lang.String”>  

           <column name=”name” length=”20″ not-null=”true” />

       </property>      

       <property name=”password” type=”java.lang.String”> 

           <column name=”password” length=”20″ not-null=”true” />

       </property>  

   </class>

</hibernate-mapping>

              </ property >

4、基本用法(增加和删除改查模糊)

              <!– < property name = “configLocation” value = “classpath:hibernate.cfg.xml” >

Mybatis:

    @Test

l select by name 

public void test() throws IOException

{

String resource = “mybatisConfig.xml”;

Reader reader = Resources.getResourceAsReader(resource);  

SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);  

SqlSession session = sessionFactory.openSession();  

        session.selectOne(“com.niit.model.StudentMap.getStudentByName”,”b”);

}

l select by id 

 session.selectOne(“com.niit.model.StudentMap.getStudentById”,2);        

                 

l insert  

          session.insert(“com.niit.model.StudentMap.insertStudent”, student);          

l //update

           session.insert(“com.niit.model.StudentMap.updateStudent”, student);

                       

l //delete by name

   session.insert(“com.niit.model.StudentMap.deleteStudent”, “wl”);

                  

l //delete by id

   session.insert(“com.niit.model.StudentMap.deleteStudentById”, 3);

          

l //select muhu(模糊查询)

   session.selectList(“com.niit.model.StudentMap.selectStudentmohu”, “b”);

              </ property > –>

Hibernate:

l //select by id 

Configuration cfg = new Configuration().configure(); 
    SessionFactory sf = cfg.buildSessionFactory();  
    Session session = sf.openSession(); 

Session.get(Student.class,id); 

l //select by name 

session.createQuery(“from Student as s where s.name =’a’”).list();

l //insert  

session.save(Student); 

l //update  

Session.update(Student) ;

 

l //delete by name

Session.delete (Student) ;

 

l //delete by id

User user = new User(); 
    user.setId(1);

    session.delete(user); 

l //select muhu(模糊查询)

     session.createQuery(“from Student as s where s.name like ‘%”+str+”%'”).list();

       </ bean >      

5、与Spring的整合

      

Mybatis:

       <!– 配置事务管理器 –>   

安顿数据源文件

  <bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”>
        <property name=”driverClassName” value=”com.mysql.jdbc.Driver”></property>
        <property 

             name=”url” value=”jdbc:mysql://127.0.0.1:3306/spring?useUnicode=true&characterEncoding=UTF-8>

        </property>
        <property name=”username” value=”root”></property>
        <property name=”password” value=”1234″></property>
        <property name=”maxActive” value=”100″></property>
        <property name=”maxIdle” value=”30″></property>
        <property name=”maxWait” value=”500″></property>
        <property name=”defaultAutoCommit” value=”true”></property>
 </bean>

 

       < bean id = “transactionManager” class = “org.springframework.orm.hibernate3.HibernateTransactionManager” >

配置sqlsessionfactory(将数据源注入)

 

<bean id=”sqlSessionFactory” class=”org.mybatis.spring.SqlSessionFactoryBean”>
        <property name=”configLocation” value=”classpath:MyBatis-Configuration.xml”></property>
        <property name=”dataSource” ref=”dataSource” />
    </bean>

 

              < property name = “sessionFactory” >

在Dao达成层中通过spring Ioc 欢腾使用SqlSessionFactory

    <bean id=”userDao” class=”org.mybatis.spring.mapper.MapperFactoryBean”>
        <property name=”mapperInterface” value=”com.mybatis.UserDao”></property>
        <property name=”sqlSessionFactory” ref=”sqlSessionFactory”></property>
    </bean>
spring整合mybatis需要的jar包

 

 

                     < ref local = “sessionFactory” />

Hibernate:

              </ property >

安顿数据源文件

      <bean

class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>

    <property name=”locations”>

    <value>classpath:jdbc.properties</value>

   </property>

 </bean>

 

<bean id=”dataSource” destroy-method=”close”

class=”org.apache.commons.dbcp.BasicDataSource”>

<property name=”driverClassName” value=”${jdbc.driverClassName}” />

<property name=”url” value=”${jdbc.url}” />

<property name=”username” value=”${jdbc.username}” />

<property name=”password” value=”${jdbc.password}” />

</bean>

       </ bean >

配备sessionfactory(将数据源注入)

  <bean id=”sf”

class=”org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean”>

<property name=”dataSource” ref=”dataSource” />

<property name=”packagesToScan”>

<list>

<value>com.niit.model</value></list>

</property>

<property name=”hibernateProperties”>

<props>

<prop key=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</prop>

<prop key=”hibernate.show_sql”>true</prop>

</props>

</property>

</bean>

*    DataSource 单独安插:

配置hibernatetemplete(将SessionFactory注入)

<bean id=”hibernateTemplate” class=”org.springframework.orm.hibernate3.HibernateTemplate”>

<property name=”sessionFactory” ref=”sf”></property>

</bean>

  < bean id = “dataSource” class = “org.apache.commons.dbcp.BasicDataSource” >

6、表明协助

mybatis:

启用申明并流入testMapper

      1.@Repository(“testBaseDAO”)  

2. @Autowired  

public void setTestMapper(@Qualifier(“testMapper”) TestMapper testMapper) 

{  

        this.testMapper = testMapper;   

    }  

 

@SelectProvider(type = TestSqlProvider.class, method = “getSql”)或@Select(“select * from ….”)(SelectBuilder/SqlBuilder)

@InsertProvider(type = TestSqlProvider.class, method = “insertSql”) 

@DeleteProvider(type = TestSqlProvider.class, method = “deleteSql”) 

@Options(flushCache = true, timeout = 20000) 

@UpdateProvider(type = TestSqlProvider.class, method = “updateSql”) 

@Param(“id”) 

@Result(id = true, property = “id”, column = “test_id”)

          < property name = “driverClassName” value = “com.mysql.jdbc.Driver” />

Hibernate:

正如基础不解释

              < property name = “url” value = “jdbc:mysql://127.0.0.1/test” />

三、各个“效果”上的两样(10点)

1. Hibernate是机关ORM框架,而Mybatis是半自动的。hibernate完全能够经过对象关系模型达成对数据库的操作,具有完整的JavaBean对象与数据库的照耀结构来自动生成sql。而mybatis独有基本的字段映射,对象数据以及对象实际关系依旧必要经过手写sql来贯彻和管制。

2. hibernate数据库移植性远高于mybatis。 hibernate通过它庞大的投射结交涉hql语言,大大减少了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于须求手写sql,因此与数据库的耦合性直接取决于程序员写sql的秘籍,假设sql不具通用性而用了成都百货上千某数据库个性的sql语句的话,移植性也会随着回落相当多,成本相当高。

3. hibernate负有完全的日记系统,mybatis则不足一些。hibernate日志系统十一分健全,涉及常见,包蕴:sql记录、关系十二分、优化警告、缓存提醒、脏数据警告等;而mybatis则除此之外大旨记录功用外,作用软弱非常多。

4. 缓存方面都足以使用第三方缓存,但是Hibernate的二级缓存配置在SessionFactory生成的配置文件中开始展览详细安顿,然后再在切切实实的表-对象映射中安排是这种缓存,而Mybatis的二级缓存配置都以在各类具体的表-对象映射中开始展览详尽布署,那样针对性分化的表可以自定义差异的缓存机制。并且Mybatis能够在命名空间中国共产党享相同的缓存配置和实例,通过Cache-ref来兑现。

4.Mybatis极其轻松命理术数,hibernate绝对较复杂,门槛较高。 
5.二者都以比较完美的开源产品 
6.当系统属于三次开荒,不或然对数据库结构达成调节和改变,那Mybatis的油滑将比hibernate更适合 
7.系统数码管理量巨大,品质供给颇为苛刻,那往往意味着我们不可能不经过通过中度优化的sql语句(或存款和储蓄进程)技术达到规定的标准系统品质设计指标,在这种情景下Mybatis会有更加好的可控性和显现,能够开展细粒度的优化。 
8.Mybatis索要手写sql语句,也得以生成一部分,hibernate则比非常多能够自动生成,不常会写一些hql。同样的必要,Mybatis的专门的学业量比hibernate要大过多。类似的,如果涉嫌到数据库字段的修改,hibernate修改的地点比非常少,而Mybatis要把那个sql mapping的地方相继修改。 
9.以数据库字段一一对应映射获得的po和hibernte这种对象化映射获得的po是完全分化的,本质不一致在于Mybatis这种po是扁平化的,不像hibernate映射的po是能够发挥立体的对象承接,聚合等等关系的,那将会直接影响到你的全套软件系统的陈设思路。 
10.hibernate现行反革命早已是主流o/r mapping框架,从文书档案的足够性,产品的完善性,版本的开支速度都要强于Mybatis。

              < property name = “username” value = “root” />

四、总结

mybatis:小巧、方便、高效、简单、直接、半自动

hibernate:强大、方便、高效、复杂、绕弯子、全自动

转发请表明—小编:Java我人生(Chen Lei兴)   原著出处:

 

 

              < property name = “password” value = “root” />

    </ bean >

   

       <!– 配置 sessionFactory –>

       < bean id = “sessionFactory” class = “org.springframework.orm.hibernate3.LocalSessionFactoryBean” >

              < property name = “dataSource” ref = “dataSource” ></ property >

              < property name = “configLocation” value = “classpath:hibernate.cfg.xml” >

              </ property >

       </ bean >      

      

       <!– 配置事务管理器 –>   

       < bean id = “transactionManager” class = “org.springframework.jdbc.datasource.DataSourceTransactionManager” >

       < property name = “dataSource” >

              < ref local = “dataSource” />

       </ property >

              <!–<property
name=”sessionFactory”>

                     <ref
local=”sessionFactory”/>

             
</property>

       –> </ bean >

*撤消掉 hibernate.cfg.xml 的布局文件一贯配备在 Spring 中

<!– 配置 sessionFactory –>

       <bean id=”sessionFactory”
class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>

              <property name=”dataSource” ref=”dataSource”/>

              <property name=”hibernateProperties”>

                     <props>

                            <prop
key=”dialect”>org.hibernate.dialect.MySQLDialect</prop>

                            <prop
key=”hibernate.hbm2ddl.auto”>true</prop>

                            <prop
key=”hibernate.show_sql”>true</prop>

                     </props>

              </property>

              <property name=”mappingResources”>

                     <list>

                           
<value>com/bjsxt/model/Dictionary.hbm.xml</value>

                           
<value>com/bjsxt/model/User.hbm.xml</value>

                           
<value>com/bjsxt/model/Customer.hbm.xml</value>

                           
<value>com/bjsxt/model/ContactPerson.hbm.xml</value>

                     </list>

              </property>

              <!–<property name=”configLocation”>

                    
<value>classpath:hibernate.cfg.xml</value>

              </property>

       –></bean>

       <bean id=”transactionManager”
class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>

              <property name=”dataSource”>

                     <ref local=”dataSource”/>

              </property>

       </bean>

二、           数据库连接池的配备 :

在理念的两层结构中,客户端程序在运行时张开数据库连接,在退出程序时关闭数据库连接。那样,在全路程序运营中,每种客户端始终占用叁个数据库连接,就算在多量从未数据库操作的悠闲时间,如用户输入数据时,进而变成数据库连接的行使频率低下。

在三层结构形式中,数据库连接通过中间层的连接池管理。唯有当用户真正须求开始展览数据库操作时,中间层才从连接池申请二个接连,数据库操作截至,连接立时释放到连接池中,以供别的用户使用。那样,不唯有大大升高了数据库连接的应用频率,使得大批量用户能够分享很少的数据库连接,何况节省了建设构造连接的光阴。

 

有关数据库连接池几本个性的注明 :

△        最小连接数是连接池一向保持的数据库连接,所以要是应用程序对数据库连接的使用量比异常的小,将会有大气的数据库连接能源被浪费;

△        最地拉那接数是三翻五次池能申请的最地拉那接数,假若数据库连接央求超越此数,前面包车型客车数据库连接哀告将被出席到等候队列中,那会耳熟能详之后的数据库操作。

△        借使最小连接数与最浦那接数相差太大,那么起先的一连诉求将会赚钱,之后超越最小连接数量的连天诉求等价于创设三个新的数据库连接。不过,那一个越过最小连接数的数据库连接在采取完不会立马被假释,它将被平放连接池中等待重复使用或是悠闲超时后被放出。

Xml 代码

1.      <!– JDBC 驱动程序 –>   

2.      <property name = “connection.driver_class” com.mysql.jdbc.Driver </property>

3.      <property name = “connection.url” jdbc:mysql://localhost:3306/struts? useUnicode = true & characterEncoding = GBK</property> <!– 数据库用户名 –>   

1.      <property name = “connection.username” root </property> <!– 数据库密码 –>   

发表评论

电子邮件地址不会被公开。 必填项已用*标注