maven+hibernate实现对MySql数据库的增删改查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36748278/article/details/78022867

创建maven项目:file - - > new - - >maven project
我的目录结构如下:
这里写图片描述


1、配置pom.xml项目对象模型

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.danni</groupId>
    <artifactId>maven-hibernateDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <!-- 配置hibernate核心包 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.10.Final</version>
        </dependency>

        <!-- 配置数据库连接相关包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>

    </dependencies>

</project>


2、要操作的数据库(以student数据库中的admins表作为事例)
这里写图片描述



3、编写admins表对应的实体类

public class Admins implements Serializable {
    private Integer aid;
    private String adminname;
    private String adminpwd;

    public Integer getAid() {
        return aid;
    }

    public void setAid(Integer aid) {
        this.aid = aid;
    }

    public String getAdminname() {
        return adminname;
    }

    public void setAdminname(String adminname) {
        this.adminname = adminname;
    }

    public String getAdminpwd() {
        return adminpwd;
    }

    public void setAdminpwd(String adminpwd) {
        this.adminpwd = adminpwd;
    }

    @Override
    public String toString() {
        return "Admins [aid=" + aid + ", adminname=" + adminname + ", adminpwd=" + adminpwd + "]";
    }
}


4、配置admins实体类的hibernate映射文件即Admins.hbm.xml

<?xml version="1.0"?>
<!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="org.danni.model.entity.Admins" table="admins">
        <id name="aid" column="aid">
            <generator class="native"></generator>
        </id>
        <property name="adminname" column="adminname"></property>
        <property name="adminpwd" column="adminpwd"></property>
    </class>
</hibernate-mapping>

class:描述当前程序中需要映射的类
table:指的是和那个表建立映射关系
id:当前表的主键
name:对象属性名(对应主键)
column:数据库中的列(主键)
generator:逐渐的生成方式自增(INCREMENT),可以写成通用的native(即按照当前数据库的主键策略生成)

如果无法使用到hibernate的自定义标签,那么就需要手动添加对应的DTD文件(文档类型定义文件)
key:-//Hibernate/Hibernate Mapping DTD 3.0//EN(可以直接从下面文件中DOCTYPE头部复制需要的部分)
这里写图片描述
dtd文件去哪里找呢?
这里写图片描述



5、配置hibernate的主配置文件
如果无法使用到hibernate的自定义标签,那么就需要手动添加对应的DTD文件(文档类型定义文件)
key:-//Hibernate/Hibernate Configuration DTD 3.0//EN(可以直接从下面文件中DOCTYPE头部复制需要的部分)

<!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:///student</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>

        <!-- 配置方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <!-- 显示sql语句 -->
        <property name="hibernate.show_sql">true</property>

        <!-- 告诉主配置文件,在加载该配置文件的时候,加载对应的映射文件 -->
        <mapping resource="org/danni/entity/Admin.hbm.xml" />

    </session-factory>
</hibernate-configuration>

这些属性值都是在哪里找到的呢?
这里写图片描述
这里写图片描述



6、创建SessionFactory对象的工具类

package org.danni.utils;

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

public class SessionFactoryUtils {
    private SessionFactory factory;
    private static SessionFactoryUtils factoryUtils;

    // 单例模式:把构造方法设置为私有的,说明不可以new这个类的实例。
    private SessionFactoryUtils() {
    }

    // 通过定义这个类的静态方法,并且返回类型与这个类的类型一样,来实现对这个类的访问
    public static SessionFactoryUtils getInstance() {
        if (factoryUtils == null) {
            factoryUtils = new SessionFactoryUtils();
        }
        return factoryUtils;
    }

    public SessionFactory openSessionFactory() {
        if (factory == null) {
            //加载主配置文件
            Configuration configuration = new Configuration().configure();

            //建立工厂
            factory = configuration.buildSessionFactory();
        }
        return factory;
    }
}


7、编写junit测试类来实现增删改查

public class Test {
    private SessionFactory sessionFactory;

    // 前置方法(在调用任何测试方法之前先调用此方法)(获取session工厂)
    @Before
    public void before() {
        sessionFactory = SessionFactoryUtils.getInstance().openSessionFactory();
    }

    @org.junit.Test
    public void add() {
        //创建临时的对象
        Admins admins = new Admins();
        admins.setAdminname("xiongxiong");
        admins.setAdminpwd("111111");

        Session session = sessionFactory.openSession(); //通过session工厂获取session持久化管理对象(和数据库建立回话)
        Transaction ts = session.beginTransaction();    // 开启事务
        try {
            session.save(admins);           //将临时对象转换为持久化对象
            ts.commit();                    //如果成功,提交事务(将数据保存到数据库中)
        } catch (Exception e) {
            ts.rollback();
        }
    }

    @org.junit.Test
    public void delete() {
        Session session = sessionFactory.openSession();

        //通过持久化管理器(session)获取一个持久对象returnAdmin
        Admins returnAdmin = session.get(Admins.class, 3);

        Transaction ts = session.beginTransaction();
        try {
            //删除持久对象returnAdmin
            session.delete(returnAdmin);
            ts.commit();
        } catch (Exception e) {
            ts.rollback();
        }
    }

    @org.junit.Test
    public void update() {
        Session session = sessionFactory.openSession();

        //通过持久化管理器(session)获得一个持久对象returnAdmin
        Admins returnAdmin = session.get(Admins.class, 4);

        //修改持久化对象的属性
        returnAdmin.setAdminname("nowyou");
        returnAdmin.setAdminpwd("32233");

        //打开事务
        Transaction ts = session.beginTransaction();

        try {
            session.update(returnAdmin);
            ts.commit();
        } catch (Exception e) {
            ts.rollback();
        }
    }

    @org.junit.Test
    public void query() {
        Session session = sessionFactory.openSession();

        //get会首先到一级缓存中查询对象信息。如果一级缓存没有,则到二级缓存查询。如果二级缓存也没有,就返回Null
        //load会首先到一级缓存中查询对象信息。如果一级缓存没有,则到二级缓存查询。如果二级缓存也没有,就返回没有结果的行
        Admins adminsGet = session.get(Admins.class, 6);
        Admins adminsLoad = session.load(Admins.class, 4);
        System.out.println(adminsGet);
        System.out.println(adminsLoad);
    }

}
展开阅读全文

没有更多推荐了,返回首页