最简单的入门级的一个使用hibernate框架的例子。(包含了处理插入数据库中文乱码问题)

最简单的入门级的一个使用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();
	}

}

查看数据库:

猜你喜欢

转载自blog.csdn.net/Handsome2013/article/details/86484364
今日推荐