hibernate连接数据库和使用

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="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=UsersDB</property>
        <property name="connection.username">sa</property><!-- 指定数据库用户名 -->
        <property name="connection.password">1234</property><!-- 指定数据库密码 -->
        <property name="hibernate.show_sql">true</property>
        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
        <!-- 配置映射文件 -->
        <mapping resource="com/ssh/models/Users.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

HibernateSessionFactory.java模板

public class HibernateSessionFactory {
    //实例化ThreadLocal类
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    //实例化Configuration类
    private  static Configuration configuration = new Configuration();  
    //声明SessionFactory接口,采用工厂模式
    private static SessionFactory sessionFactory;
    //定义configFile变量并赋值
    private static String configFile = "/hibernate.cfg.xml";
    //静态块
    static {
        try {
            //读取默认的配置文件hibernate.cfg.xml, 连接数据库
            configuration.configure(configFile);
            //实例化SessionFactory
            sessionFactory = configuration.buildSessionFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private HibernateSessionFactory() { }//创建无参的HibernateSessionFactory构造函数
    //获取Session
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        //判断是否已经存在Session对象
        if (session == null || !session.isOpen()) {
            //如果SessionFactory对象为null,则创建SessionFactory
            if (sessionFactory == null) {
                rebuildSessionFactory();//调用rebuildSessionFactory方法创建SessionFactory
            }
            //判断SessionFactory对象是否为null,如果不是,则打开Session
            session = (sessionFactory != null) ? sessionFactory.openSession(): null;
            threadLocal.set(session);
        }

        return session;
    }
    //重新创建SessionFactory
    public static void rebuildSessionFactory() {
        try {
            configuration.configure(configFile);
            sessionFactory = configuration.buildSessionFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //关闭Session
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
        if (session != null) {
            session.close();
        }
    }
    //SessionFactory对象的getXXX()方法
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    //configFile属性的setXXX()方法
    public static void setConfigFile(String configFile) {
        HibernateSessionFactory.configFile = configFile;
        sessionFactory = null;
    }
    //Configuration属性的getXXX()方法
    public static Configuration getConfiguration() {
        return configuration;
    }
}

UsersDao.java使用HibernateSessionFactory

public class UsersDao {
    //验证登录
    public boolean checkLogin(Users user){
        boolean flag=true;
        //得到session
        Session session=null;
        try{
            session=HibernateSessionFactory.getSession();
            //hql语句,Users代表是models里的实体类,name和password代表实体类的属性
            String queryString="from Users where name=? and password=?";
            //创建查询
            Query queryObject=session.createQuery(queryString);
            queryObject.setParameter(0, user.getName());
            queryObject.setParameter(1, user.getPassword());
            //执行查询获得的结果,list中的每一个元素代表一个Users的对象
            List list=queryObject.list();
            if(list.size()==0){
                flag=false;//登陆不成功
            }
            return flag;
        }catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally{//关闭session
            HibernateSessionFactory.closeSession();//调用HibernateSessionFactory的静态方法关闭Session
        }
    }
    //注册用户的方法
    public int registerUser(Users user){
        int num=0;//标识注册是否成功,0表示不成功,>0成功
        //得到session
        Session session=null;
        Transaction transaction=null;
        try{
            session=HibernateSessionFactory.getSession();
            transaction=session.beginTransaction();
            num=Integer.parseInt(session.save(user).toString());
            transaction.commit(); //写入数据库,
        }catch (Exception e) {
            e.printStackTrace();
            num=0;
        }finally{//关闭session
            HibernateSessionFactory.closeSession();//调用HibernateSessionFactory的静态方法关闭Session
        }
        return num;
    }
}

基础类和他xml配置,简单样例。

Users.java

public class Users {
    private int id;
    private String name;
    private String password;
    private String sex;
    private int age;
    private String email;
    public Users(){
            
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

Users.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>
    <class name="com.ssh.models.Users" table="Users">
        <id name="id" column="id" > <!-- 配置主键 -->
            <generator class="native"/>
        </id>
        <!-- 配置其他属性 -->
        <property name="name" length="20"/>
        <property name="password" length="20"/>
        <property name="sex" length="2"/>
        <property name="age"/>
        <property name="email" length="50"/>
    </class>
</hibernate-mapping>
原文地址:https://www.cnblogs.com/xuqiulin/p/10193609.html