(Hibernate)基于Annotation注解实现数据库的Creat Read Update Delete

Hibernate的好处在于程序员不需要精通Sql就可以操作数据库,Hibernate的映射机制是实现实体类和数据库的表对应起来,它提供了两种映射方法,一种是XML文件映射规则,另外一种是Annotation注解,这里主要说明通过注解来实现实体和表的映射

常用注解的说明

@Entity 表示当前类为实体Bean(POJO),需要进行持久化。将一个JavaBean声明为持久化类时,默认情况下,该类的所有属性都将映射到数据表的字段。如果在该类中添加了无需映射的属性,则需要用@Transient注解声明

@Table 实现数据表与持久化类之间的映射,catalog指定数据库名称,name指定表名,@Table注解位置在@Entity注解之下

@Id 指定当前持久化类的ID标识属性,与@GeneratedValue配合使用

@GeneratedValue指定ID标识生成器,即主键生成策略,与@Id配合使用

@Column 指定当前属性所对应的数据库表中的字段,name指定字段名,unique指定是否为唯一,nullable指定是否可为null

应用

新建一个包,在包中新建实体类,这里以UserInfo为例,关联数据库中的user_info表

package com.hibernate.entity;

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="user_info",catalog="hibernate")
public class UserInfo{ //实体类
	private int id;
	private String userName;
	private String password;
	private Date regDate;
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	@Column(name="userName",length=20)
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	@Column(name="password",length=20)
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	@Column(name="regDate")
	public Date getRegDate() {
		return regDate;
	}
	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}
	
    
	@Override
	public String toString() {
		return "UserInfo [id=" + id + ", userName=" + userName + ", password="
				+ password + ", regDate=" + regDate + "]";
	}

	public UserInfo() { //构造方法
		super();
		
	}
	public UserInfo(String userName, String password, Date regDate) { //带参数的构造方法
		super();
		this.userName = userName;
		this.password = password;
		this.regDate = regDate;
	}
	
}

编写配置文件,该配置文件位于项目中,作为全局配置文件,该配置文件是XML文件,命名为 hibernate.cfg.xml

<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost/hibernate?characterEncoding=utf8</property>
    <!-- 设置方言(HQL转换成哪种数据库的sql语句) -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <property name="connection.username">root</property>
    <property name="connection.password">zwj19970923</property>
  <!-- 关联映射类 -->
  <mapping class="com.hibernate.entity.UserInfo"/><!-- 注解方式映射的实体类 -->
  </session-factory>

</hibernate-configuration>

编写测试单元,新建一个包,包内创建一个测试单元JUnit Test Case

实现测试

package com.hibernate.test;

import com.hibernate.entity.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class HibernateTest { //单元测试

	private Session session;
	private Transaction transaction;
	private SessionFactory sessionFactory;

	@Before
	public void init(){//最开始先执行
		System.out.println("before");
		//加载hibernate配置文件
		StandardServiceRegistry registry=new StandardServiceRegistryBuilder().configure().build();
		try{         
		//根据配置文件初始化sessionFactory
		sessionFactory=new MetadataSources(registry).buildMetadata().buildSessionFactory();
	    //创建session
		session=sessionFactory.openSession();
		//通过session对象开始事务
		transaction=session.beginTransaction();
		}catch(Exception e){
			StandardServiceRegistryBuilder.destroy(registry);
		}
	}

	
    @Test
	public void test() {//在开始和最后之间执行的测试
		System.out.println("test");
		//初始化一个User_Info对象	
		UserInfo user=new UserInfo("小张","74443",new java.util.Date());
		Type type=new Type("手机");
		session.save(user);
		session.save(type);
	}
	
	@Test
	public void getUserInfo(){
		UserInfo ui=(UserInfo)session.get(UserInfo.class, 3);
		System.out.println(ui.toString());
	}
	
	@Test
	public void loadUserInfo(){
		UserInfo ui=(UserInfo)session.load(UserInfo.class, 2);
		System.out.println(ui.toString());
	}
	
	@Test
	public void deleteUserInfo(){
		UserInfo ui=(UserInfo)session.get(UserInfo.class, 2);
		session.delete(ui);
	}
	
	@Test
	public void updateUserInfo(){
		UserInfo ui=(UserInfo)session.get(UserInfo.class, 7);
		ui.setUserName("小明");
		session.saveOrUpdate(ui);
	}
	

	@After
	public void destory(){//最后才执行
		System.out.println("after");
		//提交事务
		transaction.commit();
		//关闭session
		session.close();
		//关闭sessionFactory
		sessionFactory.close();
		
	}

}

测试

选择一个模块进行测试,这里我选择getUserInfo()模块,选中模块名,右键,找到Run As并选择JUnit Test进行该模块的测试,从结果中就可以看到我们的注解实现映射以及生效

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值