hibernate的简单演示

所需要的jar包文件:
这里写图片描述


首先将这些jar包导入项目,我的项目目录如下:
这里写图片描述


在src目录下创建 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.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>

        <!--指定数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!--在控制台显示执行的数据库操作语句 -->
        <property name="hibernate.show_sql">true</property>
        <!--在控制台显示执行的数据库操作语句(格式) -->
        <property name="hibernate.format_sql">true</property>
        <!--hibernate根据实体自动生成数据库表 -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!--引入映射文件 -->
        <mapping resource="demo/entity/User.hbm.xml" />

    </session-factory>

</hibernate-configuration>

在demo.entity包下创建User实体类 User.java

package demo.entity;

public class User {
    private int userId;
    private String username;
    private String password;
    private String nickname;
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    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 String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

}

在demo.entity包下创建User类的映射文件 User.hbm.xml

<?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">

<hibernate-mapping package="demo.entity">

    <class name="User" table="user" lazy="true">
        <!-- 设置主键 -->
        <id name="userId" column="userId">
            <!-- id生成策略 -->
            <generator class="native"/>
        </id>
        <!-- unique="true"唯一约束 -->
        <property name="username" column="username" unique="true"/>
        <property name="password" column="password"/>
        <property name="nickname" column="nickname"/>
    </class>

</hibernate-mapping>

首先我们先实现一个对数据库的插入操作:
在包demo.test下创建测试类 Main.java

package demo.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import demo.entity.User;

public class Main {
    public static void main(String[] args) {
        // 读取hibernate.cfg.xml文件
        Configuration cfg = new Configuration().configure();
        // 建立SessionFactory
        SessionFactory factory = cfg.buildSessionFactory();
        // 建立Session
        Session session = factory.openSession();
        Transaction transaction = null;
        try {
            // 得到事务对象
            transaction = session.beginTransaction();
            User user = new User();
            user.setUsername("1514010505");
            user.setNickname("昵称1");
            user.setPassword("123456");
            session.save(user);
            //提交事务
            transaction.commit();
            System.out.println("添加数据成功");
        }catch(Exception e) {
            if(transaction!=null) {
                //事务回滚
                transaction.rollback();
            }
            e.printStackTrace();
        }finally {
            //关闭session
            session.close();
        }
        return;
    }

}

操作结果:
这里写图片描述
这里写图片描述

查询,修改,删除操作如下:


@SuppressWarnings("unchecked")
public class Main {
    public static void main(String[] args) {
        // 读取hibernate.cfg.xml文件
        Configuration cfg = new Configuration().configure();
        // 建立SessionFactory
        SessionFactory factory = cfg.buildSessionFactory();
        // 建立Session
        Session session = factory.openSession();
        Transaction transaction = null;
        try {
            // 得到事务对象
            transaction = session.beginTransaction();
            // 查询操作
            String hql1 = "from User";
            Query<User> query1 = session.createQuery(hql1, User.class);
            List<User> list = query1.getResultList();
            for (User user : list) {
                System.out.print(user.getUserId() + ", " + user.getUsername() + ", ");
                System.out.println(user.getNickname() + ", " + user.getPassword());
            }
            // 修改操作
            String hql2 = "update User set password='789789' where username=:username";
            String username = "1514010505";
            Query<User> query2 = session.createQuery(hql2);
            query2.setParameter("username", username);
            query2.executeUpdate();
            System.out.println("修改" + username + "成功!");
            // 删除操作
            String hql3 = "delete from User where nickname=:nickname";
            String nickname = "昵称2";
            Query<User> query3 = session.createQuery(hql3);
            query3.setParameter("nickname", nickname);
            query3.executeUpdate();
            System.out.println("删除" + nickname + "成功!");
            // 提交事务
            transaction.commit();
        } catch (Exception e) {
            if (transaction != null) {
                // 事务回滚
                transaction.rollback();
            }
            e.printStackTrace();
        } finally {
            // 关闭session
            session.close();
        }
        return;
    }

}

结果截图:
这里写图片描述
这里写图片描述

注意:
在进行修改和删除操作时,错误代码如下:

Query<User> query2 = session.createQuery(hql2, User.Class);

应写为:

扫描二维码关注公众号,回复: 1522926 查看本文章
Query<User> query2 = session.createQuery(hql2);

否则会提示
Update/delete queries cannot be typed

猜你喜欢

转载自blog.csdn.net/qq_35224639/article/details/80229964