IDEA+hibernate操作数据库

1.hibernate操作数据库

是数据库访问层的框架,对JDBC进行封装,简化数据库访问层的开发
(1)确认IDEA已使用hibernate插件
(2)IDEA配置Hibernate
(3) 也可以参考how2j
实施例:
(1)配置文件
在src新建一个package,新建一个实体类User,用于映射数据库中的表

package entity;

/**
 * @ author: 曲梦瑶
 * @ date: 2020/2/3-12 : 02
 */
public class User {
    //创建实体类用于映射数据库中的表
    int id;
    String name;
    float height;
    int grade;
    public int getId(){return this.id;}
    public void setId(int num){this.id=num;}
    public String getName(){return this.name;}
    public void setName(String name){this.name=name;}
    public float getHeight(){return this.height;}
    public void setHeight(float num){this.height=num;}
    public int getGrade(){return this.grade;}
    public void setGrade(int gra){this.grade=gra;}
}

(2)建立该类的hbm.xml配置文件

User.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 package="entity">
    <class name="User" table="students">
        <id name="id" column="id">
            <generator class="native">
            </generator>
        </id>
        <property name="name" />
        <property name="height" />
        <property name="grade"/>
    </class>

</hibernate-mapping>
<?xml version="1.0"?>

cfg.xml文件配置如下:(要注意配置文件不识别换行,不能随便换行)

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!--数据库信息 -->
        <property name="connection.url">jdbc:mysql://localhost:3306/jdbctest?characterEncoding=UTF-8</property>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.username">root</property>
        <property name="connection.password">admin</property>
        <!--数据库方言信息 -->
        <property name="dialect">org.hibernate.dialect.MySQL57Dialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping resource="entity/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

(3)配置完成之后,新建一个类用来测试hibernate是否能用

package test;

import entity.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import java.util.Scanner;

/**
 * @ author: 曲梦瑶
 * @ date: 2020/2/3-13 : 03
 */
public class TestHibernate {
    public static void main(String[] args) {
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session s = sf.openSession();
        s.beginTransaction();
        System.out.println("请输入要写入的数据");
        //在后台输入数据并写入数据库的表
        Scanner sc= new Scanner(System.in);
        String rec=sc.nextLine();
        String[] datas=rec.split(",");
        while(datas.length>1){
            User qmy=new User();
            qmy.setName(datas[0]);
            qmy.setHeight(Float.parseFloat(datas[1]));
            qmy.setGrade(Integer.parseInt(datas[2]));
            //使用session的save方法来插入数据
            s.save(qmy);
            rec=sc.nextLine();
            datas=rec.split(",");
        }
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
}
2.实体类对象在hibernate的三种状态:

瞬态、永久和脱管
瞬态:产生的对象没和hibernate产生关系,没有进行数据库的访问
永久:在数据库保存了一条记录
脱管:断开session之后的对象

3.利用Hibernate对数据库进行操作
//get方法获取数据
for(int i=10;i<16;i++){
    User ge=(User)s.get(User.class,i);
    System.out.println(ge.getId()+ge.getName()+ge.getHeight()+ge.getGrade());
}
//删除数据,首先要获取数据
User ge;
for(int i=10;i<16;i++){
    ge=s.get(User.class,i);
    System.out.println(ge.getId()+ge.getName()+ge.getHeight()+ge.getGrade());
    s.delete(ge);
}
//修改数据,首先要获取数据
User ge;
        for(int i=20;i<25;i++){
            ge=s.get(User.class,i);
            //修改数据
            if(ge !=null){//如果不判断,当主键不存在时可能会出现空指针异常
                ge.setName("学生"+i);
                s.update(ge);
            }
        }
java web 和java application的区别:

https://blog.csdn.net/HongRi_/article/details/88225071
最主要的区别是Web项目中的JAVA文件是tomcat服务器来触发的,但是java项目里的是Main()方法来开始的。还有一点是Web项目需要服务器。

原创文章 64 获赞 27 访问量 9427

猜你喜欢

转载自blog.csdn.net/weixin_44893585/article/details/104580840