最简单的入门级的一个使用hibernate框架的例子。(包含了处理插入数据库中文乱码问题)
1.数据库
2.数据库对应的实体类,注意要使用包装类型(类类型),否者会报错,以及实体数据库配置
同时字段和数据库属性完全对应一样,这样后期配置就简单点
package cqupt.ssh.entity;
public class Students {
//和数据库对应的实体类
Integer s_id;
String s_name;
Integer s_age;
//get和set一波
public Integer getS_id() {
return s_id;
}
public void setS_id(Integer s_id) {
this.s_id = s_id;
}
public String getS_name() {
return s_name;
}
public void setS_name(String s_name) {
this.s_name = s_name;
}
public Integer getS_age() {
return s_age;
}
public void setS_age(Integer s_age) {
this.s_age = s_age;
}
@Override
public String toString() {
return "Students [s_id=" + s_id + ", s_name=" + s_name + ", s_age=" + s_age + "]";
}
}
实体类和数据库对应的配置:Students.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 package="cqupt.ssh.entity" >
<class name="Students" table="students" ><!-- 类和表的对应 -->
<id name="s_id" ><!-- 主键 -->
<generator class="assigned"></generator><!-- 这里是主键生成策略 -->
</id>
<!-- 下边是除主键外的其他属性,下边是由于我数据表和实体类的属性名字一样,所以写的少点,要是数据库和实体的属性写的不一样,比如,name和s_name,就需要做一些其他处理 -->
<property name="s_name" ></property>
<property name="s_age" ></property>
</class>
</hibernate-mapping>
3.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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库url -->
<property name="hibernate.connection.url">jdbc:mysql:///ssh_students</property>
<!-- 数据库连接用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库连接密码 -->
<property name="hibernate.connection.password">mysql</property>
<!-- 数据库方言 不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成. sql99标准:
DDL 定义语言 库表的增删改查 DCL 控制语言 事务 权限 DML 操纵语言 增删改查 注意: MYSQL在选择方言时,请选择最短的方言. -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- #hibernate.show_sql true #hibernate.format_sql true -->
<!-- 将hibernate生成的sql语句打印到控制台 -->
<property name="hibernate.show_sql">true</property>
<!-- 将hibernate生成的sql语句格式化(语法缩进) -->
<property name="hibernate.format_sql">true</property>
<!-- ## auto schema export 自动导出表结构. 自动建表 #hibernate.hbm2ddl.auto create
自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用) #hibernate.hbm2ddl.auto create-drop
自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用) #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
#hibernate.hbm2ddl.auto validate 校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败. -->
<!-- <property name="hibernate.hbm2ddl.auto">update</property> -->
<!-- 引入orm元数据 路径书写: 填写src下的路径 -->
<!-- 指定hibernate操作数据库时的隔离级别 #hibernate.connection.isolation 1|2|4|8 0001
1 读未提交 0010 2 读已提交 0100 4 可重复读 1000 8 串行化 -->
<property name="hibernate.connection.isolation">4</property>
<!-- 指定session与当前线程绑定 -->
<property name="hibernate.current_session_context_class">thread</property>
<mapping resource="cqupt/ssh/entity/Students.hbm.xml" />
</session-factory>
</hibernate-configuration>
4.然后是测试类:
package cqupt.ssh.daoImpl;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import cqupt.ssh.entity.Students;
public class TestHibernate {
@Test
public void insertTest() {
// 1.加载配置
Configuration config = new Configuration().configure();
// 2.利用配置构建sessionFactory对象
SessionFactory sessionFactory = config.buildSessionFactory();
// 3.利用sessionFactory开启一个session
Session session = sessionFactory.openSession();
// 4.利用session开启事务
Transaction transaction = session.beginTransaction();
// 5下边开始操作
Students s = new Students();
s.setS_id(666);
s.setS_age(27);
s.setS_name("南山小熊");
//6.保存数据(也就是插入数据的动作)
session.save(s);
//7.提交事务
transaction.commit();
//8.关闭资源
session.close();
sessionFactory.close();
}
}
5,测试一波
查看数据库:
既然遇到了插入中文乱码情况,就解决一波。我们数据库建立的时候是选择utf-8,所以可能问题出现在我们eclipse中的设置,默认数据是GBK,我们将这个修改为utf-8试一下:
重新插入一个数据试试:
package cqupt.ssh.daoImpl;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import cqupt.ssh.entity.Students;
public class TestHibernate {
@Test
public void insertTest() {
// 1.加载配置
Configuration config = new Configuration().configure();
// 2.利用配置构建sessionFactory对象
SessionFactory sessionFactory = config.buildSessionFactory();
// 3.利用sessionFactory开启一个session
Session session = sessionFactory.openSession();
// 4.利用session开启事务
Transaction transaction = session.beginTransaction();
// 5下边开始操作
Students s = new Students();
s.setS_id(999);
s.setS_age(29);
s.setS_name("南山黑娃");
//6.保存数据(也就是插入数据的动作)
session.save(s);
//7.提交事务
transaction.commit();
//8.关闭资源
session.close();
sessionFactory.close();
}
}
运行后查看数据库发现乱码依旧。
最后参考网络,修改了一下数据库配置,然后重启数据库服务,
再插入一个数据:
package cqupt.ssh.daoImpl;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import cqupt.ssh.entity.Students;
public class TestHibernate {
@Test
public void insertTest() {
// 1.加载配置
Configuration config = new Configuration().configure();
// 2.利用配置构建sessionFactory对象
SessionFactory sessionFactory = config.buildSessionFactory();
// 3.利用sessionFactory开启一个session
Session session = sessionFactory.openSession();
// 4.利用session开启事务
Transaction transaction = session.beginTransaction();
// 5下边开始操作
Students s = new Students();
s.setS_id(100);
s.setS_age(10);
s.setS_name("南山");
//6.保存数据(也就是插入数据的动作)
session.save(s);
//7.提交事务
transaction.commit();
//8.关闭资源
session.close();
sessionFactory.close();
}
}
查看数据库: