﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Kelven Cheung-文章分类-Hibernate</title><link>http://www.blogjava.net/zhangrenquan/category/6017.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:10:21 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:10:21 GMT</pubDate><ttl>60</ttl><item><title>MyEclipse + Struts+Spring+hibernate 学习笔记 之applicationContext解析 </title><link>http://www.blogjava.net/zhangrenquan/articles/85594.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Tue, 05 Dec 2006 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/85594.html</guid><wfw:comment>http://www.blogjava.net/zhangrenquan/comments/85594.html</wfw:comment><comments>http://www.blogjava.net/zhangrenquan/articles/85594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangrenquan/comments/commentRss/85594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangrenquan/services/trackbacks/85594.html</trackback:ping><description><![CDATA[<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;</p>
		<p>&lt;beans&gt;</p>
		<p>
				<font color="#0000ff" size="3">  建立一个数据源</font>
				<font color="#3366ff">
						<br />
				</font> &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;<br />  &lt;property name="driverClassName"&gt;<br />   &lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="url"&gt;<br />   &lt;value&gt;jdbc:microsoft:sqlserver://192.168.0.6:1433&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="username"&gt;<br />   &lt;value&gt;sa&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="password"&gt;<br />   &lt;value&gt;&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</p>
		<p>
				<font color="#0000ff" size="3">  建立会话工厂类，这个类使用spring专门为hibernate3提供LocalSessionFactoryBean</font>
				<br /> <br /> &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br />  &lt;property name="dataSource"&gt;<br />   &lt;ref local="dataSource" /&gt;<font color="#0000ff">  --引用上面的数据源</font><br />  &lt;/property&gt;<br />  &lt;property name="mappingResources"&gt;  <font color="#0000ff">--调入映射文档<br /></font>   &lt;list&gt;<br />    &lt;value&gt;com/yourcompany/User.hbm.xml&lt;/value&gt;  <br />   &lt;/list&gt;<br />  &lt;/property&gt;<br />  &lt;property name="hibernateProperties"&gt; <font color="#0000ff"> --相关设置</font><br />   &lt;props&gt;<br />    &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.SQLServerDialect&lt;/prop&gt;<br />    &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;<br />   &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br />  </p>
		<p>
				<font color="#0000ff" size="2">    定义事务管理器，这个也是 spring专门为hibernate3提供的HibernateTransactionManager 事务管理器<br /></font> &lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref local="sessionFactory" /&gt;   <font color="#0000ff">--引用会话工厂类<br /></font>  &lt;/property&gt;<br /> &lt;/bean&gt;<br /></p>
		<p>
				<font color="#0000ff">
						<font size="3"> 定义实体DAO</font>
						<br />
				</font> &lt;bean id="userDAO" class="com.yourcompany.UserDAOImp"&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref local="sessionFactory" /&gt;<font color="#0000ff">--引用会话工厂类</font><br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> </p>
		<p>
				<font color="#0000ff" size="2"> 为上面的实体DAO定义一个代理(proxy)类，这是spring为解决事务问题而提供TransactionProxyFactoryBean动态事务代理类<br /></font> &lt;bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />  &lt;property name="transactionManager"&gt;<br />   &lt;ref bean="transactionManager" /&gt;  <font color="#0000ff" size="1">--指定事务管理器(需要是spring专用的)<br /></font>  &lt;/property&gt;<br />  &lt;property name="target"&gt;<font color="#0000ff"> --目标实体DAO类</font><br />   &lt;ref local="userDAO" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="transactionAttributes"&gt; <font color="#0000ff">--定义要使用事务的方法</font><br />   &lt;props&gt;<br />    &lt;prop key="insert*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;  <font color="#0000ff">--所有insert开头的方法都使用事务，出错要回滚</font><br />    &lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt; <font color="#0000ff">--所有get开头的方法都使用只读事务<br /></font>    &lt;prop key="is*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<font color="#0000ff">--所有ist开头的方法都使用只读事务</font><br />   &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /></p>
		<p>
				<font color="#0000ff">
						<font size="2">  为 path="/login" 的struts action 定义实际的action类,该action 已经进行 type="org.springframework.web.struts.DelegatingActionProxy"设置</font>
						<br />
				</font>  &lt;bean name="/login" class="com.yourcompany.struts.action.LoginAction" singleton="false"&gt;<br />    &lt;property name="userDAO"&gt;<br />    &lt;ref bean="userDAOProxy" /&gt;  <font color="#0000ff">--注意，这里指定的userDAO是上面定义的代理类<br /></font>  &lt;/property&gt;<br /> &lt;/bean&gt;<br />&lt;/beans&gt; </p><img src ="http://www.blogjava.net/zhangrenquan/aggbug/85594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-05 15:40 <a href="http://www.blogjava.net/zhangrenquan/articles/85594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>css技巧十条（转）</title><link>http://www.blogjava.net/zhangrenquan/articles/62163.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Mon, 07 Aug 2006 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/62163.html</guid><wfw:comment>http://www.blogjava.net/zhangrenquan/comments/62163.html</wfw:comment><comments>http://www.blogjava.net/zhangrenquan/articles/62163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangrenquan/comments/commentRss/62163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangrenquan/services/trackbacks/62163.html</trackback:ping><description><![CDATA[当使用css定义字体时你可能会这样做：<br />font-size: 1em;<br />line-height: 1.5em;<br />font-weight: bold;<br />font-style: italic;<br />font-variant: small-caps;<br />font-family: verdana,serif; <br />事实上你可以简写这些属性：<br />font: 1em/1.5em bold italic small-caps verdana,serif <br />现在好多了吧，不过有一点要注意：使用这一简写方式你至少要指定font-size和font-family属性，其他的属性（如font-weight, font-style,font-varient）如未指定将自动使用默认值。<br /><br /><br />2.同时使用两个class<br />通常我们只为属性指定一个class,但这并不等于你只能指定一个，实际上，你想指定多少就可以指定多少，例如：<br />&lt;p class="text side"&gt;...&lt;/p&gt;<br />通过同时使用两个class（使用空格而不是逗号分割）,这个段落将同时应用两个class中制定的规则。如果两者中有任何规则重叠，那么后一个将获得实际的优先应用。<br /><br /><br />3.css中边框（border)的默认值<br />当编写一条边框的规则时，你通常会指定颜色、宽度以及样式（任何顺序均可）。例如：border: 3px solid #000（3像素宽的黑色实线边框），其实这个例子中唯一需要指定的值只是样式。假如你指定样式为实线（solid),那么其余的值将使用默认值：默认的宽度为中等（相当于3到4像素）；默认的颜色为边框里的文字颜色。如果这正是你想要的效果，你完全可以不在css里指定。<br /><br /><br />4.!important会被IE忽略<br />在css中，通常最后指定的规则会获得优先权。然而对除了IE以外的浏览器来说，任何后面标有!important的语句将获得绝对的优先权，例如：<br />margin-top: 3.5em !important; margin-top: 2em <br />除IE以外所有浏览器中的顶部边界都是3.5em，而IE为2em，有时候这一点很有用，尤其在使用相对边界值时（就像这个例子），可以显示出IE与其他浏览器的细微差别。<br />（很多人可能还注意到了css的子选择器也是会被IE忽略的）<br /><br /><br />5.图片替换的技巧<br />使用标准的html而不是图片来显示文字通常更为明智，除了加快下载还可以获得更好的可用性。但是如果你决心使用访问者的机器中可能没有的字体时，你只能选择图片。<br />举例来说，你想在每一页的顶部使用“Buy widgets”的标题，但你同时又希望这是能被搜索引擎发现的，为了美观你使用了少见的字体那么你就得用图片来显示了：<br />&lt;h1&gt;&lt;img src="widget-image.gif" alt="Buy widgets" /&gt;&lt;/h1&gt;<br />这样当然没错，但是有证据显示搜索引擎对真实文本的重视远超过alt文本（因为已经有太多网站使用alt文本充当关键字），因此，我们得用另一种方法： &lt;h1&gt;&lt;span&gt;Buy widgets&lt;/span&gt;&lt;/h1&gt; ，那你的漂亮字体怎么办呢？下面的css可以帮上忙：<br />h1<br />{<br />background: url(widget-image.gif) no-repeat;<br />}<br /><br />h1 span<br />{<br />position: absolute;<br />left:-2000px;<br />}<br />现在你既用上了漂亮的图片又很好的隐藏了真实文本——借助css，文本被定位于屏幕左侧-2000像素处。<br /><br /><br />6.css盒模型hack的另一选择<br />css盒模型hack被用来解决IE6之前的浏览器显示问题，IE6.0之前的版本会把某元素的边框值和填充值包含在宽度之内（而不是加在宽度值上）。例如，你可能会使用以下css来指定某个容器的尺寸：<br />#box<br />{<br />width: 100px;<br />border: 5px;<br />padding: 20px;<br />}<br />然后在html中应用：&lt;div id="box"&gt;...&lt;/div&gt; <br />盒的总宽度在几乎所有浏览器中为150像素（100像素宽度+两条5像素的边框+两个20像素的填充），唯独在IE6之前版本的浏览器中仍然为100像素（边框值和填充值包含在宽度值中），盒模型的hack正是为了解决这一问题，但是也会带来麻烦。更简单的办法如下：<br />css:<br />#box<br />{<br />width: 150px;<br />}<br /><br />#box div {<br />border: 5px;<br />padding: 20px;<br />}<br />html:<br />&lt;div id="box"&gt;&lt;div&gt;...&lt;/div&gt;&lt;/div&gt;<br />这样一来在任何浏览器中盒的总宽度都将是150像素。<br /><br /><br />7.将块元素居中<br />假设你的网站使用了固定宽度的布局，所有的内容置于屏幕中央，可以使用以下的css：<br />#content<br />{<br />width: 700px;<br />margin: 0 auto;<br />}<br />你可以把html的body之内任何项目置于&lt;div id="content"&gt;&lt;/div&gt;中，该项目将自动获得相等的左右边界值从而保证了居中显示。不过，这在IE6之前版本的浏览器中仍然有问题，将不会居中，因此必须修改如下：<br />body<br />{<br />text-align: center;<br />}<br /><br />#content<br />{<br />text-align: left;<br />width: 700px;<br />margin: 0 auto;<br />}<br />对body的设定将导致主体内容居中，但是连所有的文字也居中了，这恐怕不是你想要的效果，为此#content 的div还要指定一个值：text-align: left<br /><br />8.使用css实现垂直居中<br />垂直居中对表格来说是小菜一碟，只需指定单元格为vertical-align: middle即可，但这在css布局中不管用。假设你将一个导航菜单的高度设为2em，然后在css中指定垂直对齐的规则，文字还是会被排到盒的顶部，根本没有什么区别。<br />要解决这一问题，只需将盒的行高设为与盒的高度相同即可，以这个例子来说，盒高2em,那么只需在css中再加入一条：line-height: 2em 就可实现垂直居中了！<br /><br />9. 容器内的css定位<br />css的最大优点之一就是可以将对象定位在文档的任何位置，同样的也可以将对象在某容器内进行定位。只需要为该容器添加一条css规则：<br />#container<br />{<br />position: relative;<br />} <br />则容器内的任何元素的定位都是相对于该容器的。假定你使用以下html结构：<br />&lt;div id="container"&gt;&lt;div id="navigation"&gt;...&lt;/div&gt;&lt;/div&gt;<br />如果想将navigation定位在容器内离左边界30像素，离顶部5像素，可以使用以下css语句：<br />#navigation<br />{<br />position: absolute;<br />left: 30px;<br />top: 5px;<br />} <br /><br />10.延伸至屏幕底部的背景色<br />css的缺点之一是缺乏垂直方向的控制，从而导致了一个表格布局不会遇到的问题。假设你在页面的左侧设定了一列用于放置网站的导航。页面为白色背景，但你希望导航所在的列为蓝色背景，使用以下css即可：<br />#navigation<br />{<br />background: blue;<br />width: 150px;<br />} <br />问题在于导航项不会一直延伸到页面的底部，自然它的背景色也不会延伸到底部。于是左列的蓝色背景在页面上被半路截断，浪费了你的一番设计。怎么办呢？很不幸我们现在只能用欺骗的办法，即将body的背景指定为与左列同颜色同宽度的图片，css如下：<br />body<br />{<br />background: url(blue-image.gif) 0 0 repeat-y;<br />} <br />背景图应为宽150像素的蓝色图片。这一办法的缺点是没法使用em来指定左列的宽度，当用户改变文字的大小导致内容的宽度扩张时，背景色的宽度不会随之改变。<br />到写这篇文章为止这是对这类问题的唯一解决办法，因此你只能为左列使用像素值来获得能够自动延伸的不同的背景色。<img src ="http://www.blogjava.net/zhangrenquan/aggbug/62163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-08-07 14:09 <a href="http://www.blogjava.net/zhangrenquan/articles/62163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate中的ThreadLocal</title><link>http://www.blogjava.net/zhangrenquan/articles/28388.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Tue, 17 Jan 2006 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/28388.html</guid><wfw:comment>http://www.blogjava.net/zhangrenquan/comments/28388.html</wfw:comment><comments>http://www.blogjava.net/zhangrenquan/articles/28388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangrenquan/comments/commentRss/28388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangrenquan/services/trackbacks/28388.html</trackback:ping><description><![CDATA[<P>Java中ThreadLocal的设计和使用：<A href="http://www.huawei.org.cn/news/article_show.asp?id=27413">http://www.huawei.org.cn/news/article_show.asp?id=27413</A></P>
<P>Hibernate中的ThreadLocal 转载地址：<A href="http://blog.blogchina.com/refer.393753.html">http://blog.blogchina.com/refer.393753.html</A><BR><BR>Hibernate的文档时看到了关于使ThreadLocal管理多线程访问的部分。具体代码如下 <BR><BR>1.&nbsp;&nbsp;public static final ThreadLocal session = new ThreadLocal(); <BR>2.&nbsp;&nbsp;public static Session currentSession() { <BR>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session s = (Session)session.get(); <BR>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//open a new session,if this session has none <BR>5.&nbsp;&nbsp; if(s == null){ <BR>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = sessionFactory.openSession(); <BR>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.set(s); <BR>8.&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return s; <BR>9. } <BR><BR>我们逐行分析 <BR>1。 初始化一个ThreadLocal对象，ThreadLocal有三个成员方法 get()、set()、initialvalue()。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;如果不初始化initialvalue，则initialvalue返回null。 <BR>3。session的get根据当前线程返回其对应的线程内部变量，也就是我们需要的net.sf.hibernate.Session（相当于对应每个数据库连接）.多线程情况下共享数据库链接是不安全的。ThreadLocal保证了每个线程都有自己的s（数据库连接）。 <BR>5。如果是该线程初次访问，自然，s（数据库连接）会是null，接着创建一个Session，具体就是行6。 <BR>6。创建一个数据库连接实例 s <BR>7。保存该数据库连接s到ThreadLocal中。 <BR>8。如果当前线程已经访问过数据库了，则从session中get()就可以获取该线程上次获取过的连接实例。 <BR><BR>通过ThreadLocal，我们既实现了多线程并发，同时，也实现了SingleTon模式。一举两得。</P><img src ="http://www.blogjava.net/zhangrenquan/aggbug/28388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-01-17 23:35 <a href="http://www.blogjava.net/zhangrenquan/articles/28388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>