hibernate框架

8 篇文章 0 订阅

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标签,这个常用的主键生成策略一般是assignednative两个。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);*/
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值