一、基础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的更多相关文章

  1. 第二次作业 单例模式的SessionFactory以及线程安全的session

    单例模式的SessionFactory 在这个工具类Hibernate.java中写一个通过静态代码块生成唯一的SessionFactory,通过一个方法返回一个SessionFactory impo ...

  2. OO第二单元作业总结【自我反思与审视】

    第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是 ...

  3. 【OO学习】OO第二单元作业总结

    OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...

  4. 2019OO第二单元作业总结

    OO第二单元的作业主题是模拟电梯. ---------------------------------------------------------------------------------- ...

  5. OO第二次作业总结

    OO~第二次作业总结 连续三周的电梯作业结束了,总的来说这三次作业做的还算平稳,既没有被刀,也没有刀中别人.那么接下来开始谈谈我对这三次作业的认识. 一.设计策略 我三次作业的设计思路基本上是相同的, ...

  6. 耿丹CS16-2班第二次作业汇总

    -- Deadline: 2016-09-28 12:00 -- 作业内容:http://www.cnblogs.com/huangjunlian/p/5891726.html -- 第二次作业总结: ...

  7. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  8. JAVA第二次作业展示与学习心得

    JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...

  9. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

随机推荐

  1. 高性能C++网络库libtnet实现:http

    HTTP libtnet提供了简单的http支持,使用也很简单. 一个简单的http server: void onHandler(const HttpConnectionPtr_t& con ...

  2. Linux Shell 命令--tr

    tr        用来从标准输入中通过替换或删除操作进行字符转换                -c或--complerment 取代所有不属于第一字符集的字符.                -d ...

  3. H5的学习之旅-H5的实体(14)

    H5有些关键字比如<等等是显示不出来的,这时候,就需要用实体来表示,实体我理解就是最初的编码 代码实例 <!DOCTYPE html> <html lang="en& ...

  4. Android scrollview嵌套webview滑动冲突的解决方案

    在Android开发中有时我们需要在scrollview中嵌套webview这时你会发现这两者的滑动事件产生了冲突导致:webview很难被滑动,即使被滑动了一点也非常不顺畅.解决方案也比较简单只需要 ...

  5. linux下播放组播流出现setsockopt:No such device错误

    在linux下播放组播流出现setsockopt:No such device错误是因为多播IP没有add路由表里面 可以采用如下命令完成: root@android:/ # busybox rout ...

  6. 【61】git项目实战的步骤总结

    1.新建分支的步骤 git pull git checkout -b 分支号(task的后面的代号) 2.提交代码到远程仓库的步骤 git add . git commit -m "分支号+ ...

  7. 开源项目Git地址

     1.陈明.李建勋.邓覃思   fog-aliyun https://git.oschina.net/dengqinsi/fog-aliyun.git 2.吴俊.骆仲军.袁良福   CDN的H5助 ...

  8. 安卓笔记--Edittext禁止换行

    直接在EditText的xml文件中通过配置android:singleLine="true"把虚拟键盘上的enter键禁止掉,不会显示 <edittext android: ...

  9. Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

    Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有 ...

  10. android 自定义Viewpager实现无限循环

    ; i < imageUrls.length; i ++){ ADInfo info = new ADInfo(); info.setUrl(imageUrls[i]); info.setCon ...