hibernate持久层框架实例(HelloWord):
第一步: maven项目导入架包
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.3.2.GA</version>
</dependency>
<!-- MySQL 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.9.0.GA</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.5.6</version>
</dependency>
第二步: 在mysql数据库中新建一个sxt库,新建一张表user_info
user_info.sql文件如下:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user_info
-- ----------------------------
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
`userID` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(255) NOT NULL,
`password` int(11) NOT NULL,
PRIMARY KEY (`userID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user_info
-- ----------------------------
INSERT INTO `user_info` VALUES ('1', '盖伦', '123');
INSERT INTO `user_info` VALUES ('2', '赵信', '123');
INSERT INTO `user_info` VALUES ('3', '剑圣', '123');
INSERT INTO `user_info` VALUES ('4', '卡莎', '123');
第三步:在src目录下创建实体类 User
注意:实体类中的属性名和数据库中的字段名最好一致;这样在Use.hbm.xml文件中配置主键和普通列时就可以防止配错。不一样也可以,但是要注意name是实体类中的属性名,column是数据库表中的字段名,type是实体类中的属性类型。
<id name="userID" column="userID" type="java.lang.Integer">
<property name="userName" column="userName" type="java.lang.String"/>
package com.test.entity;
public class User {
private Integer userID;
private String userName;
private String password;
public Integer getUserID() {
return userID;
}
public void setUserID(Integer userID) {
this.userID = userID;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
第四步:在实体类的包com.test.entity下 创建该实体类的映射文件 User.hbm.xml
注意:上面说到了id标签是配置主键的;而property标签是配置普通列的。而id标签里面有generator标签,这个常用的主键生成策略一般是assigned和native两个。assigned表示不自增,native表示表示自动转换成对应数据库的自增,只对mysql和sqlserver有效,对oracle无效。因为oracle本身是没有自增的,它是通过序列完成的。
<!-- 主键生成策略 不自增assigned 自增native -->
<!-- 注意:native表示自动转换成对应数据库的自增,只对mysql和sqlserver有效,对oracle无效 -->
<!-- 不自增assigned 自增native -->
<generator class="assigned"/>
<!-- 自增native -->
<generator class="native"/>
<!-- oracle自增 序列名就是数据库表中的主键 -->
<generator class="sequence">
<param name="sequence">序列名</param>
</generator>
User.hbm.xml:
<?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>
<class name="com.test.entity.User" table="user_info" lazy="false">
<!-- 主键 -->
<id name="userID" column="userID" type="java.lang.Integer">
<!-- 主键生成策略 不自增assigned 自增native -->
<!-- 注意:native表示自动转换成对应数据库的自增,只对mysql和sqlserver有效,对oracle无效 -->
<generator class="assigned"/>
</id>
<!-- 普通列 -->
<property name="userName" column="userName" type="java.lang.String"/>
<property name="password" column="password" type="java.lang.String" />
</class>
</hibernate-mapping>
第五步:在src目录下创建hibernate.cfg.xml
注意:记得修改mysql数据库的用户名和密码
最重要的事:记得看这个映射文件的路劲对不对,如果不对记得修改。
<mapping resource="com/test/entity/User.hbm.xml"/>
hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 驱动类名 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接字符串 jdbc:mysql://localhost/yim -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sxt</property>
<!-- 用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 口令 -->
<property name="hibernate.connection.password">root</property>
<!-- 方言(用来区分具体的数据库类型) -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 显示sql语句 -->
<property name="show_sql">true</property>
<!-- 格式化sql语句 -->
<property name="format_sql">false</property>
<!-- 添加orm映射文件的路径 -->
<mapping resource="com/test/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
第六步:写一个测试类 在src目录下新建一个 UserDao 类
注意:在查找方法get()和load()两种室友区别的; 当查找的数据不存在时,get会返回一个null,而load会抛出一个异常。
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import com.test.entity.User;
public class UserDao {
Configuration cf;
SessionFactory sf;
Session session;
Transaction ts;
public int add(User user){
cf = new Configuration().configure();
sf = cf.buildSessionFactory();
session = sf.openSession();
ts = session.beginTransaction();
try {
session.save(user);
ts.commit();
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
}finally {
session.close();
}
return 0;
}
public User find(int id){
cf = new Configuration().configure();
sf = cf.buildSessionFactory();
session = sf.openSession();
User user = null;
try {
//user = (User)session.get(User.class, id);
user = (User)session.load(User.class, id);
} catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
return user;
}
public int del(int id){
cf = new Configuration().configure();
sf = cf.buildSessionFactory();
session = sf.openSession();
ts = session.beginTransaction();
try {
/*//删除方法一 通过主键id查到对象,然后通过主键删除
User user = (User)session.get(User.class, id);
session.delete(user);*/
//删除方法二 新建一个对象,然后把主键id放进去,然后通过主键删除
User user1 = new User();
user1.setUserID(id);
session.delete(user1);
ts.commit();
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
}finally {
session.close();
}
return 0;
}
public int update(User user){
cf = new Configuration().configure();
sf = cf.buildSessionFactory();
session = sf.openSession();
ts = session.beginTransaction();
try {
session.update(user);
ts.commit();
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
}finally {
session.close();
}
return 0;
}
public static void main(String[] args) {
UserDao udao = new UserDao();
/* 查找
User user = udao.find(13);
System.out.println(user);*/
/* 删除*/
udao.del(3);
/* 修改方法一
User user = udao.find(3);
user.setUserName("卡莎");
user.setPassword("136");
udao.update(user);*/
/* 自增: 增加
User user = new User();
user.setUserName("卡莎");
user.setPassword("123456");
udao.add(user);*/
/* 不自增: 增加
User user = new User();
user.setUserID(4);
user.setUserName("卡莎");
user.setPassword("123456");
udao.add(user);*/
}
}