最近接触到了hibernate在这里简单记录下我的学习体会,好了废话不多说,直接开始:
一、简单说下我的项目结构,先建立一个javaproject→导入与Heibernate相关的jar包→建立相关文件。请看下图:
二、在MySql数据库中建立个表,作为java实体类映射的对象,我们将表名设为:student。建表语句如下:
CREATE TABLE `student` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`stuName` varchar(20) DEFAULT '',
`cardId` varchar(20) NOT NULL DEFAULT '',
`age` varchar(4) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
注意:这里的auto_increment是mysql表的自增主键。用户插入数据时不用管主键“id”,因为已经设置为自增了。
三、在test1项目下建立包同时在其下面建立持久化实体类:Student.java
package test;
public class Student {
private int id;
private String cardId;
private String stuName;
private String age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
四、在test包下面建立Hibernate映射文件:Student.hbm.xml(注意千万别把DTD头写错了):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="test">
<class name="Student" table="student">
<id name="id">
<generator class="native" />
</id>
<property name="cardId" type="java.lang.String" />
<property name="stuName" type="java.lang.String" />
<property name="age" type="java.lang.String" />
</class>
</hibernate-mapping>
五、在test1项目下的src里面建立配置文件:hibernate.cfg.xml(注意导入的包里面必须有mysql-connector-java-5.0.8-bin.jar,这个是注册mysql的驱动,没有他就不能用连接jdbc,还有别忘了写正确数据库的连接参数)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory >
<!-- mysql数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- mysql数据库名称 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bar</property>
<!-- 数据库的登陆用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库的登陆密码 -->
<property name="hibernate.connection.password">totyuedu</property>
<!--为每一种数据库提供适配器,方便转换 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="test/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
六、下面就是编写测试文件Test1.java来进行Jdbc操作了。
package test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Test1 {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
Configuration cfg= new Configuration().configure();
SessionFactory sf=cfg.buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
String sql="from Student";
List<Student> list=null;
/* 插入十条记录*/
for(int i = 0;i < 10;i++){
Student student = new Student();
student.setCardId("student1"+i);
student.setStuName("student1");
student.setAge("20");
session.save(student);
}
/*查询插入的数据同时输出到控制台*/
Query query = session.createQuery(sql);
list=query.list();
for(Student student:list){
System.out.println(student.getCardId());
}
tx.commit();
session.close();
}catch(HibernateException e){
e.printStackTrace();
}
}
}
七、控制台数据测试数据如下: