Hibernate+C3P0+Log4j 开发时所遇到的点点滴滴,求解!
今天刚在网上找资料把 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
1、Hibernate简化了对象模型和关系模型之间的转换,使得开发者不需要太多的关心数据库模型,只要从对象的角度出发,把更多的精力放到业务上就可以了。
2、Hibernate可以通过简单的配置,利用第三方组件,快速的实现数据连接池(如C3P0)功能、数据缓存能力(如EHCACHE、OSCACHE等).
3、使用Hibernate开发,可实现高度的可抑制性能,可以用同一份代码在不同类型的数据库之间使用。
暂时只想到这么多,呵呵。
刚回到学校,不好意思这么久才回你呀!你能具体点吗?我也是新手,怕误了你,你想要啥可以直接说的~~
能否给你这项目的源码我看看 我也在学