Hibernate+C3P0+Log4j 开发时所遇到的点点滴滴,求解!

发布于 2021-11-15 15:42:27 字数 4102 浏览 842 评论 3

今天刚在网上找资料把 C3p0 + Hibernate 搭建完全,体验了 Hibernate 在数据存储方面直接存储对像的思想,很受启发!

 

因为Hibernate提供的数据库连接池性能不是太好,坛子里有很多大牛推荐用C3P0,故今就整合了一下.在整合的过程中我遇到一个问题

 

需要大牛帮我解释一下:

 

1.在对数据操作时,使用Hibernate本身的功能直接操作一个对象 与 使用数据库连接池操作数据库有什么不同?哪种方法更好?

 

(1)Hibernate操作对象方法

 

Session session=HibernateUtils.getSession();

try {

session=HibernateUtils.getSession();

session.beginTransaction();

User user=new User();

user.setName("aaa");

user.setPassword("bbb");

session.save(user);

//user.setName("cccccc");

session.getTransaction().commit();

} catch (HibernateException e) {

  e.printStackTrace();

  session.getTransaction().rollback();

}finally{

HibernateUtils.closeSession(session);

 

(2)数据库连接池执行SQL语句

 

Connection conn=DBAppender.getInstance().getConnection();

User user=new User();

user.setName("aaa");

user.setPassword("bbb");

String sql="INSERT INTO USER (name,password) VALUES('"+user.getName()+"','"+user.getPassword()+"')";

try {

Statement statement=conn.createStatement();

statement.executeUpdate(sql);

} catch (SQLException e) {

e.printStackTrace();

}finally{

DBAppender.getInstance().closeConnection(conn);

}

 

    注:以上的 HibernateUtils、DBAppender是分别对Hibernate中的SessionFactory 和 c3p0中的ComboPooledDataSource 进行简单

 

的封装(个人理解相当于Servlet中DAO层的单列模式吧)。

 

问题:以上2个列子分别从不同的方面给出了操作数据的方式,但究竟哪一种更好、更灵活呢?

 

如果您您认为方法(1)好,那是不是 SessionFactory 在获取 hibernate.cfg.xml 配置信息时已经根据配置信息实现了数据库连接池功

 

能,我们只要使用 SessionFactory、Session 就可以了?

 

如果您认为方法(2)好些,那请问,既然直接用数据库连接池对象更好,那我们还要Hibernate做什么?

 

 

2.使用log4j记录日志,输入到数据库中不成功

问题描述:我想使用log4j对同一个操作分别记录信息在文本中和保存到数据库中,但抛出:

log4j:WARN No such property [maxFileSize] in org.apache.log4j.ConsoleAppender.

log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.ConsoleAppender.

log4j:WARN No such property [file] in org.apache.log4j.ConsoleAppender.

 

 

 

log4j配置信息:

log4j.logger.user_login_info =INFO,U1,Udb

#log4j.logger.org.springframework=ERROR 

log4j.appender.U1=org.apache.log4j.PatternLayout  

log4j.appender.U1.File=E:/EclipseJava/logDoc/user_login_info.log   

log4j.appender.U1.MaxFileSize=10KB   

# Keep three backup files.   

log4j.appender.U1.MaxBackupIndex=1  

# Pattern to output: date priority [category] - message   

log4j.appender.U1.layout=org.apache.log4j.PatternLayout 

log4j.appender.U1.threshold=INFO   

log4j.appender.U1.layout.ConversionPattern=%d [%X{user_id}/%X{log_ip}/%X{req.id} - %X{entranceMethod} - %X{req.requestURIWithQueryString}] %-5p %c - %m%n 

 

#Save to Database

log4j.appender.Udb=com.log.DBAppender

log4j.appender.Udb.BufferSize = 40

log4j.appender.Udb.threshold=INFO

log4j.appender.Udb.File=E:/EclipseJava/logDoc/sql_user_login_info.log  

log4j.appender.Udb.MaxFileSize=10KB   

log4j.appender.Udb.MaxBackupIndex=1  

log4j.appender.Udb.sql=INSERT INTO tb_user_login_log (user_id,log_title,log_type,log_datetime,log_ip,log_host_name) VALUES ('%X{user_id}','%X{log_title}','%X{log_type}','%X{log_datetime}','%X{log_ip}','%X{log_host_name}') 

 

Log测试类:

 

public class LogTest {

static Log log = LogFactory.getLog(LogTest.class);

public void log() {

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

深巷少女 2021-11-17 11:56:15

1、Hibernate简化了对象模型和关系模型之间的转换,使得开发者不需要太多的关心数据库模型,只要从对象的角度出发,把更多的精力放到业务上就可以了。

2、Hibernate可以通过简单的配置,利用第三方组件,快速的实现数据连接池(如C3P0)功能、数据缓存能力(如EHCACHE、OSCACHE等).

3、使用Hibernate开发,可实现高度的可抑制性能,可以用同一份代码在不同类型的数据库之间使用。

暂时只想到这么多,呵呵。

嘦怹 2021-11-16 21:35:16

刚回到学校,不好意思这么久才回你呀!你能具体点吗?我也是新手,怕误了你,你想要啥可以直接说的~~

一个人的旅程 2021-11-15 23:03:29

能否给你这项目的源码我看看  我也在学

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文