hibernate mysql 连接配置_配置hibernate数据库连接

第一步:右键项目->MyEclipse->添加Hibernate组件,指定数据库连接配置如下(src/hibernate.cfg.xml)

MySQL对连接的有效期是28800s,一个连接8小时没任何操作就会自动断开;而hibernate的默认连接池不对链接的状态进行检查,所以超过8小时候链接就不在可用,从而导致查询出错;虽然可以增大MySQL的连接有效时间,但是不是终极解决办法。Hibernate共支持5种连接池,可以用c3p0替换默认的连接池可以有很好的效果,此外proxool也是不错的选择,在稳定性、易用性以效率方面都比较优越。

/p>

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

update

org.hibernate.dialect.MySQLDialect

jdbc:mysql://127.0.0.1:3306/test

org.hibernate.connection.C3P0ConnectionProvider

20

5

120

100

1800

2

true

3600

false

false

root

rootpwd

com.mysql.jdbc.Driver

tiaowuban

src/applicationContext.xml自动添加配置如下,需要将mysql-connector-{version}-java-bin.jar添加到项目的classpath中

第二步:创建ORM映射(可使用MyEclipse Hibernate Tool生成持久化类,工具可以自行处理表内自增主键,表间的外键关联,一对多/一对一/多对一/多对多等关系。,可参照这里),src/com/smartecs/dao里的文件如下

packagecom.smartecs.dao;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.Id;

@Entitypublic classAccount {

@Id

@GeneratedValueprivate intid;privateString username;privateString password;protectedAccount() {

}publicAccount(String username, String password) {super();this.username =username;this.password =password;

}public intgetId() {returnid;

}public void setId(intid) {this.id =id;

}publicString getUsername() {returnusername;

}public voidsetUsername(String username) {this.username =username;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}

}

Account.hbm.xml文件如下

/p>

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

第三步:测试代码:

Session session =HibernateSessionFactory.getSession();

Transaction tx=session.beginTransaction();

Account account= new Account("ciaos", "ciaospwd");try{

session.save(account);

tx.commit();

}catch(Exception e) {

tx.rollback();

e.printStackTrace();

}finally{

session.close();

}

附,Hibernate Tool反转设置如下(使用xml映射方式)

d08a1c52d91e47f31fa2f3eddc7d4162.png

如果hibernate 3支持注解方式映射数据库,不需要维护xml文件,方便很多(Spring3.1.1+Hibernate3.3.2测试通过,Spring3.0.5未测试通过,提示AnnotationSessionFactoryBean的属性configurationClass配置错误,不过Hibernate4已经废弃掉此属性,就无所谓了)

src/applicationContext.xml配置如下(更换bean为annotation):

1

10

604800

src/hibernate.cfg.xml将更换为

-->

添加依赖库(hibernate-annotations.jar,hibernate-commons-annotations.jar,ejb3-persistence.jar,hibernate-core.jar),反转后数据表实体映射关系直接在POJO里面组织了。注解方式的反转配置如下:

d812814b8d3f1f07436453661e913a29.png

hibernate 3增加DAO层封装了实体类的基本操作(功能比较弱,可以通过泛型扩展增加功能),使用起来更加方便,反转时需要配置如下(注意选择默认DAO),代码中会生成BaseHibernateDAO父类封装连接获取方法。

TbAccountDAO adao = newTbAccountDAO();

TbAccount account= adao.findById(1);

BaseHibernateDAO及接口方法如下:

packagecom.tiaowuban.api.ndao;importorg.hibernate.Session;/*** Data access interface for domain model

*@authorMyEclipse Persistence Tools*/

public interfaceIBaseHibernateDAO {publicSession getSession();

}packagecom.tiaowuban.api.ndao;importcom.tiaowuban.api.dao.HibernateSessionFactory;importjavax.persistence.Entity;importorg.hibernate.Session;/*** Data access object (DAO) for domain model

*@authorMyEclipse Persistence Tools*/@Entitypublic class BaseHibernateDAO implementsIBaseHibernateDAO {publicSession getSession() {returnHibernateSessionFactory.getSession();

}

}

如下可通过泛型扩展增加多个属性查询方法(可举一反三增加删除,搜索等更丰富的方法)

packagecom.tiaowuban.api.dao;importjava.util.List;importorg.hibernate.Session;/*** Data access interface for domain model

*@authorMyEclipse Persistence Tools

*@param*/

public interface IBaseHibernateDAO{publicSession getSession();public abstract ListfindByPropertys(String[] propertyNames,Object[] values);/*** 通过多个属性查找,并分页,

* 属性名称数组和属性值数组的序列要对应

*

*@parampropertyNames 属性名称数组

*@paramvalues 属性值数组

*@parampage 页码

*@parampageSize 每页内容条数

*@return

*/

public List findByPropertys(String[] propertyNames,Object[] values,int page,intpageSize);/*** 通过属性查找,并分页,

* 属性名称数组和属性值数组的序列要对应

*

*@parampropertyNames 属性名称

*@paramvalues 属性值

*@parampage 页码

*@parampageSize 每页内容条数

*@return

*/

public List findByProperty(String propertyName,Object value,int page,intpageSize);

}packagecom.tiaowuban.api.dao;importjava.util.List;importorg.hibernate.Query;importorg.hibernate.Session;importorg.springframework.transaction.annotation.Transactional;/*** Data access object (DAO) for domain model

*@authorMyEclipse Persistence Tools*/@Transactionalpublic class BaseHibernateDAO implements IBaseHibernateDAO{publicSession getSession() {returnHibernateSessionFactory.getSession();

}private ClasspersistentClass;

@SuppressWarnings("unchecked")publicBaseHibernateDAO()

{//获取持久化对象的类型

this.persistentClass = (Class)getClass();

}public ClassgetPersistentClass()

{returnpersistentClass;

}/*** 通过多个属性组合查询

*

*@parampropertyNames

* 属性名称数组

*@paramvalues

* 对应于propertyNames的值 return 匹配的结果*/

public ListfindByPropertys(String[] propertyNames, Object[] values)

{int i = 0;

StringBuffer strBuffer= newStringBuffer();

strBuffer.append("from " + getPersistentClass().getName().replaceAll("DAO$", ""));

strBuffer.append(" as model where");for (i = 0; i < propertyNames.length; i++)

{if (i != 0)

strBuffer.append(" and");

strBuffer.append(" model.");

strBuffer.append(propertyNames[i]);

strBuffer.append("=");

strBuffer.append("? ");

}

String queryString=strBuffer.toString();

System.err.println(queryString);

Query query=getSession().createQuery(queryString);for (i = 0; i < values.length; i++)

{

query.setParameter(i, values[i]);

}returnquery.list();

}/*** 通过属性查找并分页

*

*@parampropertyName

* 属性名称

*@paramvalue

* 属性值

*@parampage

* 页数

*@parampageSize

* 每页显示条数*/

public List findByProperty(String propertyName, Object value, intpage,intpageSize)

{return this.findByPropertys(newString[]

{

propertyName

},newObject[]

{

value

}, page, pageSize);

}/*** 通过多个属性组合查询

*

*@parampropertyNames

* 属性名称数组

*@paramvalues

* 对应于propertyNames的值

*@parampage

* 页数

*@parampageSize

* 每页显示数 return 匹配的结果 return 匹配的结果*/

public ListfindByPropertys(String[] propertyNames, Object[] values,int page, intpageSize)

{

StringBuffer strBuffer= newStringBuffer();

strBuffer.append("from " +getPersistentClass().getName());

strBuffer.append(" as model where");for (int i = 0; i < propertyNames.length; i++)

{if (i != 0)

strBuffer.append(" and");

strBuffer.append(" model.");

strBuffer.append(propertyNames[i]);

strBuffer.append("=");

strBuffer.append("? ");

}

String queryString=strBuffer.toString();int firstResult = (page - 1) *pageSize;

Query query= this.getSession().createQuery(queryString);

query.setFirstResult(firstResult);

query.setMaxResults(pageSize);for (int i = 0; i < values.length; i++)

{

query.setParameter(i, values[i]);

}returnquery.list();

}

}

使用方法如下

TbAccountDAO adao = newTbAccountDAO();

List accountlist = adao.findByPropertys(new String[]{"id","username"}, new Object[]{3,"ciaos"});

反转配置如下:

8673206c4f9e56160cc8fbe7904ddfc6.png

数据库中表结构如下:

CREATE TABLE`account` (

`id`int(11) NOT NULLAUTO_INCREMENT,

`username`varchar(100) DEFAULT NULL,

`passwd`varchar(100) DEFAULT NULL,PRIMARY KEY(`id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值