第二次作业 单例模式的SessionFactory
一、基础Hibernate环境搭建(参见http://www.cnblogs.com/sangewuxie/p/9004968.html)
二、实体类User及User.hbm.xml配置
1.User类
package com.domain; public class User { private Integer id; private String username; private String password; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + ", age=" + age + "]"; } }
2.User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- name: 完整类名 table:数据库表名 --> <class name="com.domain.User" table="user"> <!-- id配置表的主键 name代表表中属性 --> <id name="id" column="id"> <!-- 主键生成策略 --> <generator class="native"></generator> </id> <property name="username" column="username" type="string"></property> <property name="password" column="password" type="string"></property> <property name="age" column="age" type="integer"></property> </class> </hibernate-mapping>
三、hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 指定方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 数据库驱动 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 数据库url --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate02_1514010311</property> <!-- 数据库连接用户名 --> <property name="hibernate.connection.username">root</property> <!-- 数据库连接密码 --> <property name="hibernate.connection.password">0x3137</property> <!-- 将hibernate生成的sql语句打印到控制台 --> <property name="hibernate.show_sql">true</property> <!-- 将hibernate生成的sql语句格式化(语法缩进) --> <property name="hibernate.format_sql">true</property> <mapping resource="com/domain/User.hbm.xml" /> </session-factory> </hibernate-configuration>
四、HibernateUtil
在这个工具类中写一个通过静态代码块生成唯一的SessionFactory,通过一个方法返回一个SessionFactory
package com.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static Configuration cfg; private static SessionFactory sessionFactory; static { try { cfg = new Configuration().configure(); sessionFactory = cfg.buildSessionFactory(); }catch (Exception e) { e.printStackTrace(); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
五、测试类TestUser
package com.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.junit.Test; import com.domain.User; import com.util.HibernateUtil; public class TestUser { @Test public void saveUser() { SessionFactory sessionFactory = null; Session session = null; Transaction transaction = null; User user = new User(); user.setUsername("三哥无邪"); user.setPassword("1514010311"); user.setAge(21); try { sessionFactory = HibernateUtil.getSessionFactory(); session = sessionFactory.openSession(); transaction = session.beginTransaction(); session.save(user); transaction.commit(); } catch (Exception e) { if (transaction!=null) { transaction.rollback(); } e.printStackTrace(); }finally { if(session!=null) { session.close(); } } } @Test public void updateUser() { SessionFactory sessionFactory = null; Session session = null; Transaction transaction = null; try { sessionFactory = HibernateUtil.getSessionFactory(); session = sessionFactory.openSession(); transaction = session.beginTransaction(); User user = session.get(User.class, 1); user.setUsername("三哥无邪啊"); user.setPassword("1514010311"); user.setAge(21); session.update(user); transaction.commit(); } catch (Exception e) { if (transaction!=null) { transaction.rollback(); } e.printStackTrace(); }finally { if(session!=null) { session.close(); } } } @Test public void queryUser() { SessionFactory sessionFactory = null; Session session = null; Transaction transaction = null; try { sessionFactory = HibernateUtil.getSessionFactory(); session = sessionFactory.openSession(); transaction = session.beginTransaction(); User user = session.get(User.class, 2); System.out.println("ID:"+user.getId()+" 用户名:"+user.getUsername()+" 密码:"+user.getPassword()); transaction.commit(); } catch (Exception e) { if (transaction!=null) { transaction.rollback(); } e.printStackTrace(); }finally { if(session!=null) { session.close(); } } } @Test public void deleteUser() { SessionFactory sessionFactory = null; Session session = null; Transaction transaction = null; try { sessionFactory = HibernateUtil.getSessionFactory(); session = sessionFactory.openSession(); transaction = session.beginTransaction(); User user = session.get(User.class, 1); session.delete(user); transaction.commit(); } catch (Exception e) { if (transaction!=null) { transaction.rollback(); } e.printStackTrace(); } } }
测试一次saveUser方法,结果如图
就此获取单例模式的SessionFactory的方式就完成了
第二次作业 单例模式的SessionFactory的更多相关文章
- 第二次作业 单例模式的SessionFactory以及线程安全的session
单例模式的SessionFactory 在这个工具类Hibernate.java中写一个通过静态代码块生成唯一的SessionFactory,通过一个方法返回一个SessionFactory impo ...
- OO第二单元作业总结【自我反思与审视】
第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是 ...
- 【OO学习】OO第二单元作业总结
OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...
- 2019OO第二单元作业总结
OO第二单元的作业主题是模拟电梯. ---------------------------------------------------------------------------------- ...
- OO第二次作业总结
OO~第二次作业总结 连续三周的电梯作业结束了,总的来说这三次作业做的还算平稳,既没有被刀,也没有刀中别人.那么接下来开始谈谈我对这三次作业的认识. 一.设计策略 我三次作业的设计思路基本上是相同的, ...
- 耿丹CS16-2班第二次作业汇总
-- Deadline: 2016-09-28 12:00 -- 作业内容:http://www.cnblogs.com/huangjunlian/p/5891726.html -- 第二次作业总结: ...
- Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】
原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...
- JAVA第二次作业展示与学习心得
JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
随机推荐
- 高性能C++网络库libtnet实现:http
HTTP libtnet提供了简单的http支持,使用也很简单. 一个简单的http server: void onHandler(const HttpConnectionPtr_t& con ...
- Linux Shell 命令--tr
tr 用来从标准输入中通过替换或删除操作进行字符转换 -c或--complerment 取代所有不属于第一字符集的字符. -d ...
- H5的学习之旅-H5的实体(14)
H5有些关键字比如<等等是显示不出来的,这时候,就需要用实体来表示,实体我理解就是最初的编码 代码实例 <!DOCTYPE html> <html lang="en& ...
- Android scrollview嵌套webview滑动冲突的解决方案
在Android开发中有时我们需要在scrollview中嵌套webview这时你会发现这两者的滑动事件产生了冲突导致:webview很难被滑动,即使被滑动了一点也非常不顺畅.解决方案也比较简单只需要 ...
- linux下播放组播流出现setsockopt:No such device错误
在linux下播放组播流出现setsockopt:No such device错误是因为多播IP没有add路由表里面 可以采用如下命令完成: root@android:/ # busybox rout ...
- 【61】git项目实战的步骤总结
1.新建分支的步骤 git pull git checkout -b 分支号(task的后面的代号) 2.提交代码到远程仓库的步骤 git add . git commit -m "分支号+ ...
- 开源项目Git地址
1.陈明.李建勋.邓覃思 fog-aliyun https://git.oschina.net/dengqinsi/fog-aliyun.git 2.吴俊.骆仲军.袁良福 CDN的H5助 ...
- 安卓笔记--Edittext禁止换行
直接在EditText的xml文件中通过配置android:singleLine="true"把虚拟键盘上的enter键禁止掉,不会显示 <edittext android: ...
- Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件
Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有 ...
- android 自定义Viewpager实现无限循环
; i < imageUrls.length; i ++){ ADInfo info = new ADInfo(); info.setUrl(imageUrls[i]); info.setCon ...