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项目需要服务器。