-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
227 lines (194 loc) · 49.4 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<!DOCTYPE html><html lang="zh-CN"><head><meta name="generator" content="Hexo 3.9.0"><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="欢迎来到晋的博客,本博客用来收录平时学习笔记,欢迎访问"><title>Hibernate配置以及实体映射配置 | ZJ_BLOG</title><link rel="stylesheet" type="text/css" href="/css/style.css?v=0.0.1"><link rel="stylesheet" type="text/css" href="//cdn.bootcss.com/normalize/7.0.0/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.bootcss.com/pure/1.0.0/pure-min.css"><link rel="stylesheet" type="text/css" href="//cdn.bootcss.com/pure/1.0.0/grids-responsive-min.css"><link rel="stylesheet" href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css"><script type="text/javascript" src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><link rel="Shortcut Icon" type="image/x-icon" href="/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="apple-touch-icon-precomposed" href="/apple-touch-icon.png"><script type="text/javascript" src="http://p18j2ow6f.bkt.clouddn.com/static/css/instantclick.min.js"></script><script>InstantClick.init();
InstantClick.on('change', function (isInitialLoad) {
if (isInitialLoad === false) {
if (typeof MathJax !== 'undefined') // support MathJax
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
if (typeof prettyPrint !== 'undefined') // support google code prettify
prettyPrint();
if (typeof _hmt !== 'undefined') // support 百度统计
_hmt.push(['_trackPageview', location.pathname + location.search]);
if (typeof ga !== 'undefined') // support google analytics
ga('send', 'pageview', location.pathname + location.search);
}
});
</script><link rel="alternate" type="application/atom+xml" href="/atom.xml"></head><body><div class="body_container"><div id="header"><div class="site-name"><h1 class="hidden">Hibernate配置以及实体映射配置</h1><a id="logo" href="/.">ZJ_BLOG</a><p class="description">Silence的博客</p></div><div id="nav-menu"><a class="current" href="/."><i class="fa fa-home"> 首页</i></a><a href="/archives/"><i class="fa fa-archive"> 归档</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title">Hibernate配置以及实体映射配置</h1><div class="post-meta">Feb 27, 2017<span> | </span><span class="category"><a href="/categories/框架相关/">框架相关</a></span></div><div class="post-content"><h1 id="Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装-,它将POJO与数据库表建立映射关系"><a href="#Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装-,它将POJO与数据库表建立映射关系" class="headerlink" title="Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,,它将POJO与数据库表建立映射关系"></a><strong>Hibernate</strong>是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,,它将POJO与数据库表建立映射关系</h1><h1 id="Hibernate是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库"><a href="#Hibernate是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库" class="headerlink" title="Hibernate是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库"></a><strong>Hibernate</strong>是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库</h1><hr>
<h2 id="下面是测试用实体1—Student-java"><a href="#下面是测试用实体1—Student-java" class="headerlink" title="下面是测试用实体1—Student.java"></a>下面是测试用实体1—Student.java</h2><a id="more"></a>
<pre><code>package com.em.entity;
/**
* Created by zhangjin on 2017/2/27.
*/
public class Student {
private Integer id;
private String name;
private Integer age;
private Double score;
private Course course;
public Student() {
}
public Student(String name, Integer age, Double score) {
this.name = name;
this.age = age;
this.score = score;
}
public Student(String name, Integer age, Double score, Course course) {
this.name = name;
this.age = age;
this.score = score;
this.course = course;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", course=" + course +
'}';
}
}
</code></pre><h2 id="其所对应的Hibernate映射文件为-Student-hbm-xml"><a href="#其所对应的Hibernate映射文件为-Student-hbm-xml" class="headerlink" title="其所对应的Hibernate映射文件为 Student.hbm.xml"></a>其所对应的Hibernate映射文件为 Student.hbm.xml</h2><pre><code><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- package:包名-->
<hibernate-mapping package="com.em.entity">
<class name="Student" table="STUDENT">
<!--表的主键-->
<id name="id" type="java.lang.Integer">
<column name="ID"/>
<!--主键的生成方式-->
<!-- antive:数据库本地的方式(数据库自己生成主键的方式) increment:Hiernate以递增的方式生成(只测试时候用 因为有并发的问题)
identity:由底层数据库负责生成标识符(数据库必须支持主键自增) sequence:利用底层数据库提供的序列生成标识符
hilo:Hibernate通过高低算法生成标识符
-->
<generator class="native"/>
</id>
<!--属性映射 name:实体属性名-->
<!--length:限制长度 但是我测试了好几次都不起作用 无论是String还是Integer-->
<property name="name" type="java.lang.String" length="100">
<!--column: 数据库中列名-->
<column name="NAME"/>
</property>
<property name="age" type="java.lang.Integer" length="10">
<column name="AGE"/>
</property>
<!--index: 为SCORE列添加索引 索引名:score_index-->
<property name="score" type="java.lang.Double" index="score_index">
<column name="SCORE"/>
</property>
<!--映射关联关系(即外键) class:外键对应的类名 column:外键列名-->
<many-to-one name="course" class="Course" column="COURSE_ID"/>
<!--匿名查询使用的查询语句(可以把部分查询语句配置在配置文件中 方便修改)-->
<query name="findByName"><![CDATA[from Student where name like :name and score > :score]]></query>
</class>
</hibernate-mapping>
</code></pre><hr>
<h2 id="下面是测试用实体2—Course-java"><a href="#下面是测试用实体2—Course-java" class="headerlink" title="下面是测试用实体2—Course.java"></a>下面是测试用实体2—Course.java</h2><pre><code>package com.em.entity;
import java.sql.Timestamp;
import java.util.HashSet;
import java.util.Set;
/**
* Created by zhangjin on 2017/2/27.
*/
public class Course {
private Integer id;
private String courseName;
private Timestamp courseTime;
Set<Student> stuSet = new HashSet<>();
public Course() {
}
public Course(String courseName, Timestamp courseTime) {
this.courseName = courseName;
this.courseTime = courseTime;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public Timestamp getCourseTime() {
return courseTime;
}
public void setCourseTime(Timestamp courseTime) {
this.courseTime = courseTime;
}
public Set<Student> getStuSet() {
return stuSet;
}
public void setStuSet(Set<Student> stuSet) {
this.stuSet = stuSet;
}
@Override
public String toString() {
return "Course{" +
"id=" + id +
", courseName='" + courseName + '\'' +
", courseTime=" + courseTime +
'}';
}
}
</code></pre><h2 id="其所对应的Hibernate映射文件为-Course-hbm-xml"><a href="#其所对应的Hibernate映射文件为-Course-hbm-xml" class="headerlink" title="其所对应的Hibernate映射文件为 Course.hbm.xml"></a>其所对应的Hibernate映射文件为 Course.hbm.xml</h2><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta"><?xml version="1.0" encoding="UTF-8"?></span></span><br><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">hibernate-mapping</span> <span class="meta-keyword">PUBLIC</span></span></span><br><span class="line"><span class="meta"> <span class="meta-string">"-//Hibernate/Hibernate Mapping DTD 3.0//EN"</span></span></span><br><span class="line"><span class="meta"> <span class="meta-string">"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">hibernate-mapping</span> <span class="attr">package</span>=<span class="string">"com.em.entity"</span>></span></span><br><span class="line"> <span class="comment"><!--</span></span><br><span class="line"><span class="comment"> dynamic-insert:动态插入: 设置插入只插入非空的属性(默认为false)</span></span><br><span class="line"><span class="comment"> 设置之后insert语句只包含非空的参数,</span></span><br><span class="line"><span class="comment"> 没有值的字段不会出现在insert语句中</span></span><br><span class="line"><span class="comment"> dynamic-update:动态更新: 同上,换成更新(默认false)</span></span><br><span class="line"><span class="comment"> 动态update对性能有一个重大的影响,就是打开了以后,不同的对象的sql语句会不一样,</span></span><br><span class="line"><span class="comment"> 如果你一次更新多条记录,hibernate将不能使用 executeBatch进行批量更新,这样效率降低很多。</span></span><br><span class="line"><span class="comment"> 同时,在这种情况下,多条sql意味着数据库要做多次sql语句编译。</span></span><br><span class="line"><span class="comment"> select-before-update 设置在每次更新操作前都查询一次,(默认false)</span></span><br><span class="line"><span class="comment"> 如果查询的数据库中数据与要更新的实体相同就不会执行更新语句,但是无论是否更新都会先执行查询,效率低</span></span><br><span class="line"><span class="comment"> --></span></span><br><span class="line"> <span class="tag"><<span class="name">class</span> <span class="attr">name</span>=<span class="string">"Course"</span> <span class="attr">table</span>=<span class="string">"COURSE"</span> <span class="attr">dynamic-insert</span>=<span class="string">"true"</span> <span class="attr">dynamic-update</span>=<span class="string">"false"</span> <span class="attr">select-before-update</span>=<span class="string">"false"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">id</span> <span class="attr">name</span>=<span class="string">"id"</span> <span class="attr">type</span>=<span class="string">"java.lang.Integer"</span> <span class="attr">length</span>=<span class="string">"10"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">column</span> <span class="attr">name</span>=<span class="string">"ID"</span>/></span></span><br><span class="line"> <span class="tag"><<span class="name">generator</span> <span class="attr">class</span>=<span class="string">"native"</span>/></span></span><br><span class="line"> <span class="tag"></<span class="name">id</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"courseName"</span> <span class="attr">type</span>=<span class="string">"java.lang.String"</span> <span class="attr">length</span>=<span class="string">"100"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">column</span> <span class="attr">name</span>=<span class="string">"COURSE_NAME"</span>/></span></span><br><span class="line"> <span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"courseTime"</span> <span class="attr">type</span>=<span class="string">"java.sql.Timestamp"</span> <span class="attr">index</span>=<span class="string">"time_index"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">column</span> <span class="attr">name</span>=<span class="string">"COURSE_TIME"</span>/></span></span><br><span class="line"> <span class="tag"></<span class="name">property</span>></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!--映射一对多的集合属性--></span></span><br><span class="line"> <span class="comment"><!--属性:fetch</span></span><br><span class="line"><span class="comment"> select(默认): 延迟检索</span></span><br><span class="line"><span class="comment"> join : 迫切采用做外连接的方式初始化n关联的1的一端的属性</span></span><br><span class="line"><span class="comment"> 属性:lazy</span></span><br><span class="line"><span class="comment"> proxy : 延迟检索</span></span><br><span class="line"><span class="comment"> false : 立即检索</span></span><br><span class="line"><span class="comment"> 属性:inverse:设置true的一方(Set端设置)放弃维护关联关系,可减少维护次数,减少内存消耗</span></span><br><span class="line"><span class="comment"> 属性:cascade:设置级联操作(默认none)</span></span><br><span class="line"><span class="comment"> --></span></span><br><span class="line"> <span class="tag"><<span class="name">set</span> <span class="attr">name</span>=<span class="string">"stuSet"</span> <span class="attr">inverse</span>=<span class="string">"true"</span> <span class="attr">fetch</span>=<span class="string">"select"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">key</span> <span class="attr">column</span>=<span class="string">"COURSE_ID"</span>/></span><span class="comment"><!--多的一端的数据库外键名--></span></span><br><span class="line"> <span class="tag"><<span class="name">one-to-many</span> <span class="attr">class</span>=<span class="string">"Student"</span>/></span><span class="comment"><!--一对多对应的类--></span></span><br><span class="line"> <span class="tag"></<span class="name">set</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">class</span>></span></span><br><span class="line"><span class="tag"></<span class="name">hibernate-mapping</span>></span></span><br></pre></td></tr></table></figure>
<hr>
<h2 id="hibernate-cfg-xml"><a href="#hibernate-cfg-xml" class="headerlink" title="hibernate.cfg.xml"></a>hibernate.cfg.xml</h2><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta"><?xml version="1.0" encoding="UTF-8"?></span></span><br><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">hibernate-configuration</span> <span class="meta-keyword">PUBLIC</span></span></span><br><span class="line"><span class="meta"> <span class="meta-string">"-//Hibernate/Hibernate Configuration DTD 3.0//EN"</span></span></span><br><span class="line"><span class="meta"> <span class="meta-string">"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">hibernate-configuration</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">session-factory</span>></span></span><br><span class="line"> <span class="comment"><!--连接数据库配置--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"hibernate.connection.username"</span>></span>root<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"hibernate.connection.password"</span>></span>fangshuoit<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"hibernate.connection.driver_class"</span>></span>com.mysql.jdbc.Driver<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"hibernate.connection.url"</span>></span>jdbc:mysql://127.0.0.1:3306/test<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!--hibernate信息配置--></span></span><br><span class="line"> <span class="comment"><!--hibernate使用的数据库方言--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"hibernate.dialect"</span>></span>org.hibernate.dialect.MySQL57InnoDBDialect<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--操作时是否在控制台打印sql--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"show_sql"</span>></span>true<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--是否对sql进行格式化--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"format_sql"</span>></span>false<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--指定自动生成数据表的策略--></span></span><br><span class="line"> <span class="comment"><!--create:每次重新生成数据表 create-drop:每次重新生成表,SessionFactory关闭就删表</span></span><br><span class="line"><span class="comment"> update:每次只是更新,不改变数据 validate:不一样就抛异常,不修改表--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"hbm2ddl.auto"</span>></span>update<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--设置事务隔离级别--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"connection.isolation"</span>></span>2<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--设置删除对象后 使其OID置为null--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"use_identifier_rollback"</span>></span>true<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!--c3p0连接池配置--></span></span><br><span class="line"> <span class="comment"><!--连接池最大连接数--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"c3p0.max_size"</span>></span>10<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--连接池最小连接数--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"c3p0.min_size"</span>></span>5<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--连接池的连接耗尽时,一次向再获取多少个数据库连接--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"c3p0.acquire_increment"</span>></span>2<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--连接对象在多久未使用,会被销毁 2s--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"c3p0.idle_test_period"</span>></span>2000<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--多久时间检测一次连接超时情况--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"c3p0.timeout"</span>></span>2000<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--缓存Statement对象数量--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"c3p0.max_statements"</span>></span>10<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!--mysql无效 oracle有效--></span></span><br><span class="line"> <span class="comment"><!--设定jdbc的Statement读取数据的时候每次从数据库中取出多少记录条数--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"jdbc.fetch_size"</span>></span>100<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--设定对数据库进行批量操作(增删改)时 一次操作的条数--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"jdbc.batch_size"</span>></span>50<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!--启用二级缓存--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"cache.use_second_level_cache"</span>></span>true<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"hibernate.cache.region.factory_class"</span>></span>org.hibernate.cache.ehcache.EhCacheRegionFactory</span><br><span class="line"> <span class="tag"></<span class="name">property</span>></span></span><br><span class="line"> <span class="comment"><!--启用查询缓存--></span></span><br><span class="line"> <span class="tag"><<span class="name">property</span> <span class="attr">name</span>=<span class="string">"cache.use_query_cache"</span>></span>true<span class="tag"></<span class="name">property</span>></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!--</span></span><br><span class="line"><span class="comment"> 配置管理session的方式 就是配置session绑定到某一运行环境</span></span><br><span class="line"><span class="comment"> (将getCurrentSession()返回的session绑定到当前运行线程中 此session的上下文是thread)</span></span><br><span class="line"><span class="comment"> --></span></span><br><span class="line"> <span class="comment"><!--注意:Spring3.x不能为thread,否则报错:org.hibernate.HibernateException: save is not valid without active transaction ,</span></span><br><span class="line"><span class="comment"> 以上配置在 增加、删除、修改 操作时,都能正确执行,事务也正常执行!</span></span><br><span class="line"><span class="comment"> 当执行 查询 操作时,不需要事务的支持,问题来了,报错:org.hibernate.HibernateException: No Session found for current thread</span></span><br><span class="line"><span class="comment"> 意思是必须在transcation.isActive()条件下才能执行,</span></span><br><span class="line"><span class="comment"> 可以解决办法是:当方法不需要事务支持的时候,使用 Session session = sessionFactory.openSession()来获得Session对象,问题解决!</span></span><br><span class="line"><span class="comment"> --></span></span><br><span class="line"> <span class="comment"><!--<property name="current_session_context_class">thread</property>--></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!--指定关联的.hbm.xml文件--></span></span><br><span class="line"> <span class="tag"><<span class="name">mapping</span> <span class="attr">resource</span>=<span class="string">"com/em/entity/Student.hbm.xml"</span>/></span></span><br><span class="line"> <span class="tag"><<span class="name">mapping</span> <span class="attr">resource</span>=<span class="string">"com/em/entity/Course.hbm.xml"</span>/></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!--设置使用二级缓存的类(类级别的二级缓存) 以及使用二级缓存的策略usage--></span></span><br><span class="line"> <span class="tag"><<span class="name">class-cache</span> <span class="attr">class</span>=<span class="string">"com.em.entity.Student"</span> <span class="attr">usage</span>=<span class="string">"read-write"</span>/></span></span><br><span class="line"> <span class="tag"><<span class="name">class-cache</span> <span class="attr">class</span>=<span class="string">"com.em.entity.Course"</span> <span class="attr">usage</span>=<span class="string">"read-write"</span>/></span></span><br><span class="line"> <span class="comment"><!--设置使用二级缓存的类(集合级别的二级缓存) 以及使用二级缓存的策略usage--></span></span><br><span class="line"> <span class="tag"><<span class="name">collection-cache</span> <span class="attr">collection</span>=<span class="string">"com.em.entity.Course.stuSet"</span> <span class="attr">usage</span>=<span class="string">"read-write"</span>/></span></span><br><span class="line"> <span class="tag"></<span class="name">session-factory</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"></<span class="name">hibernate-configuration</span>></span></span><br></pre></td></tr></table></figure>
<hr>
<h2 id="单元测试"><a href="#单元测试" class="headerlink" title="单元测试"></a>单元测试</h2><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> com.em.hibernate;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.hibernate.Session;</span><br><span class="line"><span class="keyword">import</span> org.hibernate.SessionFactory;</span><br><span class="line"><span class="keyword">import</span> org.hibernate.cfg.Configuration;</span><br><span class="line"><span class="keyword">import</span> org.hibernate.service.ServiceRegistry;</span><br><span class="line"><span class="keyword">import</span> org.hibernate.service.ServiceRegistryBuilder;</span><br><span class="line"><span class="keyword">import</span> org.junit.Test;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Created by zhangjin on 2017/2/27.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">HibernateTest</span> </span>{</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> SessionFactory factory;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">static</span> {</span><br><span class="line"><span class="comment">// .configuere()方法中参数为hibernate.cfg.xml配置文件位置 不填写表示取src目录下</span></span><br><span class="line"> Configuration configuration = <span class="keyword">new</span> Configuration().configure();</span><br><span class="line"> ServiceRegistry serviceRegistry = <span class="keyword">new</span> ServiceRegistryBuilder()</span><br><span class="line"> .applySettings(configuration.getProperties()).buildServiceRegistry();</span><br><span class="line"> factory = configuration.buildSessionFactory(serviceRegistry);</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="function"><span class="keyword">private</span> Session <span class="title">getSession</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> factory.openSession();</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="meta">@Test</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">test</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="comment">//junit运行创建数据库表以及表结构</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</div><script type="text/javascript" src="/js/share.js?v=0.0.1" async></script><a class="article-share-link" data-url="http://zj2626.github.io/2017/02/27/2017_Hibernate/" data-id="ckm3iqtrx008afcuj30rjqy8x" data-qrcode="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMYAAADGCAAAAACs8KCBAAACK0lEQVR42u3aQW4EIQwF0bn/pck2UtSkvk0nAopVNOrQfrPwYOzPB6/xbT19Mn9+vvP8k2VLhgwZ2zLGdM3D4q8cYP3ckzwvQ4aMexjzVMgBPNXOg+axyZAhQwZ/GX+eJFYZMmTI6CdcXuiSA+K//W7IkCFjK0ZaWM534ImbJNzFtbgMGTI2ZNRKzb/5+5X+hgwZMrZijHCRojRNl6O9ZMiQcTajU6CShgEJlxwuUTwyZMi4gJG2AXgzMi16iw1RGTJkHM1IRyvSMYtaq7LWFpUhQ8apjPQwt2o4gxxMi51YGTJkHMRIt66lyFUJ93EHGTJkXMPoDISlfcZOc7SYlWXIkHEco/MCPliWjos9PilDhoyjGRywtojld/v80ClDhowbGGmI6dBYrdyNG58yZMi4gEFaAmmrspZeeZUqQ4aMexi1dMlDJxf9y46bMmTIOIjBx0w5iY+X1ZJv8L3KkCHjCAbfoj/AWgPHMBkyZBzKSK+93mhwdtqfMmTIuIeBrt0bfdE0HcepX4YMGRcwePKtDXXVRtCCnwEZMmRcwODX+sUqGZTNaXfyl98NGTJkHMEY4eqUozzoNK3LkCHjbEYtzfWPdLVjYm3sTIYMGWcw3msx8p07pbIMGTLuYaSJj7+4eH1Wq8VlyJAhA7wyDTotm+PbOxkyZFzJIP+VhsIHNZYlXBkyZGzI6JSaneKTtxCWXbfJkCFjQ0ZtMOKNdExCbDUyZciQsR/jC+q9A/FuEanzAAAAAElFTkSuQmCC">分享</a><div class="tags"><a href="/tags/Hibernate/">Hibernate</a></div><div class="post-nav"><a class="pre" href="/2017/03/01/2017_Mongodb/">Mongodb安装与启动</a><a class="next" href="/2017/02/15/2017_ThreadLocal/">彻底理解ThreadLocal(转载)</a></div><div id="container"></div><link rel="stylesheet" href="/css/default.css?v=0.0.1"><script src="/js/gitment.browser.js?v=0.0.1"></script><script>var gitment = new Gitment({
owner: 'zj2626',
repo: 'zj2626.github.io',
oauth: {
client_id: '22769c7edffa5f05d10d',
client_secret: '7bac8fc03397cb64c178fbdfe3a01d2abb459704',
},
})
gitment.render('container')
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4"><div id="sidebar"><div class="widget"><div class="search-form"><input id="local-search-input" placeholder="Search" type="text" name="q" results="0"><div id="local-search-result"></div></div></div><div class="widget"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/BUG解决/">BUG解决</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/DOM操作/">DOM操作</a><span class="category-list-count">6</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/DOM操作/XML/">XML</a><span class="category-list-count">6</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/Git/">Git</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/JDBC/">JDBC</a><span class="category-list-count">8</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Linux/">Linux</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/java虚拟机/">java虚拟机</a><span class="category-list-count">9</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/java语言基础/">java语言基础</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/python/">python</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/多线程/">多线程</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/数据库/">数据库</a><span class="category-list-count">4</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/数据库连接池/">数据库连接池</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/数据结构和算法/">数据结构和算法</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/机器学习/">机器学习</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/框架相关/">框架相关</a><span class="category-list-count">6</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/框架相关/前端技术/">前端技术</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/框架相关/权限管理/">权限管理</a><span class="category-list-count">1</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/正则/">正则</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/爬虫/">爬虫</a><span class="category-list-count">4</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/程序安装与配置/">程序安装与配置</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/计算机网络/">计算机网络</a><span class="category-list-count">1</span></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/C3P0/" style="font-size: 15px;">C3P0</a> <a href="/tags/深入了解java虚拟机/" style="font-size: 15px;">深入了解java虚拟机</a> <a href="/tags/Hexo优化/" style="font-size: 15px;">Hexo优化</a> <a href="/tags/HTML/" style="font-size: 15px;">HTML</a> <a href="/tags/iframe/" style="font-size: 15px;">iframe</a> <a href="/tags/Maven/" style="font-size: 15px;">Maven</a> <a href="/tags/C语言/" style="font-size: 15px;">C语言</a> <a href="/tags/jenkins/" style="font-size: 15px;">jenkins</a> <a href="/tags/Git/" style="font-size: 15px;">Git</a> <a href="/tags/maven/" style="font-size: 15px;">maven</a> <a href="/tags/junit/" style="font-size: 15px;">junit</a> <a href="/tags/定义/" style="font-size: 15px;">定义</a> <a href="/tags/python/" style="font-size: 15px;">python</a> <a href="/tags/转码/" style="font-size: 15px;">转码</a> <a href="/tags/正则表达式/" style="font-size: 15px;">正则表达式</a> <a href="/tags/Dom4j/" style="font-size: 15px;">Dom4j</a> <a href="/tags/爬虫/" style="font-size: 15px;">爬虫</a> <a href="/tags/常用命令/" style="font-size: 15px;">常用命令</a> <a href="/tags/shell/" style="font-size: 15px;">shell</a> <a href="/tags/XPath/" style="font-size: 15px;">XPath</a> <a href="/tags/Mongodb/" style="font-size: 15px;">Mongodb</a> <a href="/tags/java/" style="font-size: 15px;">java</a> <a href="/tags/mysql/" style="font-size: 15px;">mysql</a> <a href="/tags/存储过程/" style="font-size: 15px;">存储过程</a> <a href="/tags/DBCP/" style="font-size: 15px;">DBCP</a> <a href="/tags/DRUID/" style="font-size: 15px;">DRUID</a> <a href="/tags/工具类/" style="font-size: 15px;">工具类</a> <a href="/tags/Vue/" style="font-size: 15px;">Vue</a> <a href="/tags/jaxp/" style="font-size: 15px;">jaxp</a> <a href="/tags/CRUD/" style="font-size: 15px;">CRUD</a> <a href="/tags/JDBC/" style="font-size: 15px;">JDBC</a> <a href="/tags/Blob/" style="font-size: 15px;">Blob</a> <a href="/tags/sax/" style="font-size: 15px;">sax</a> <a href="/tags/事务/" style="font-size: 15px;">事务</a> <a href="/tags/机器学习/" style="font-size: 15px;">机器学习</a> <a href="/tags/注解/" style="font-size: 15px;">注解</a> <a href="/tags/元数据/" style="font-size: 15px;">元数据</a> <a href="/tags/Hibernate/" style="font-size: 15px;">Hibernate</a> <a href="/tags/Mybatis/" style="font-size: 15px;">Mybatis</a> <a href="/tags/ThreadLocal/" style="font-size: 15px;">ThreadLocal</a> <a href="/tags/逻辑回归/" style="font-size: 15px;">逻辑回归</a> <a href="/tags/Shiro/" style="font-size: 15px;">Shiro</a></div></div><div class="widget"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/2018031301/">使用多种算法对泰坦尼克号乘客获救原因进行分析</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/2018031202/">关于使用sklearn进行数据预处理-归一化/标准化/正则化(转)</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/2018031201/">scikit-learn数据预处理fit_transform()与transform()的区别(转)</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/2018030701/">构建逻辑回归模型实例</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/20171225_regular/">正则表达式</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/20171222_crawler4/">Python 爬虫实战(4)</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/20171219_python_error/">TypeError, a bytes-like object is required, not 'str'</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/20171219_crawler3/">Python 爬虫实战(3)</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/20171219_crawler2/">Python 爬虫实战(2)</a></li><li class="post-list-item"><a class="post-list-link" href="/2020/01/15/20171214_crawler/">Python 爬虫实战(1)</a></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/zj2626/" title="github" target="_blank">github</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer">Copyright © 2021 <a href="/." rel="nofollow">ZJ_BLOG.</a> Powered by<a rel="nofollow" target="_blank" href="https://hexo.io"> Hexo.</a><a rel="nofollow" target="_blank" href="https://github.com/tufu9441/maupassant-hexo"> Theme</a> by<a rel="nofollow" target="_blank" href="https://github.com/pagecho"> Cho.</a></div></div></div><a class="show" id="rocket" href="#top"></a><script type="text/javascript" src="/js/totop.js?v=0.0.1" async></script><script type="text/javascript" src="//cdn.bootcss.com/fancybox/3.2.5/jquery.fancybox.min.js" async></script><script type="text/javascript" src="/js/fancybox.js?v=0.0.1" async></script><link rel="stylesheet" type="text/css" href="//cdn.bootcss.com/fancybox/3.2.5/jquery.fancybox.min.css"><script type="text/javascript" src="/js/search.js?v=0.0.1"></script><script>var search_path = 'search.xml';
if (search_path.length == 0) {
search_path = 'search.xml';
}
var path = '/' + search_path;
searchFunc(path, 'local-search-input', 'local-search-result');
</script><script>var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = '//hm.baidu.com/hm.js?' + 'c9a692191e9aca9e30daa3f6326cc789';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script><script type="text/javascript" src="/js/codeblock-resizer.js?v=0.0.1"></script><script type="text/javascript" src="/js/smartresize.js?v=0.0.1"></script></div></body></html>