Hibernate学习:基本介绍+作用+配置

1.简介与原理
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行
百度百度百度2.配置xml
项目目录如下
百度百度百度先导入依赖pom.xml
其中slf4j和hibernate是一定要一起导入的

<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.0</version>
			<scope>test</scope>
		</dependency>
		<!-- hibernate依赖开始 -->
		<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>4.0.1.Final</version>
		</dependency>
		<!-- hibernate结束 -->

		<!-- jdbc开始 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>jdbc</artifactId>
			<version>11.2.0.1.0</version>
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<!-- jdbc结束 -->
		<!-- slf4j开始 -->
		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.26</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.26</version>
			<scope>test</scope>
		</dependency>
		<!-- slf4j结束 -->

hibernate.cfg.xml配置

<session-factory>
		<!-- Database connection settings -->
		<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
		<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
		<property name="connection.username">scott</property>
		<property name="connection.password">tiger</property>
		
		<!-- JDBC connection pool (use the built-in) -->
<!-- 		<property name="connection.pool_size">1</property> -->

		<!-- SQL dialect -->
		<property name="dialect">org.hibernate.dialect.OracleDialect</property>
		
		<!-- Enable Hibernate's automatic session context management -->
<!-- 		<property name="current_session_context_class">thread</property> -->

		<!-- Disable the second-level cache -->
<!-- 		<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> -->
		<property name = "format_sql">true</property>
		
		<!-- Echo all executed SQL to stdout -->
		<property name="show_sql">true</property>
		
		<!-- Drop and re-create the database schema on startup -->
		<property name="hbm2ddl.auto">update</property>
		<mapping resource="hbm/Teacher.hbm.xml" />
		<mapping resource="hbm/Student.hbm.xml" />
	</session-factory>

Student.hbm.xml配置

<class name="com.hxzy.hibernate.entity.Student" table="t_student">

		<id name="id" type="int" column="ID">
			<generator class="sequence">
				<param name="sequence">seq_stu</param>
			</generator>
		</id>

		<property name="name" not-null="true" type="java.lang.String" column="name"/>

	</class>

Teacher.hbm.xml

<class name="com.hxzy.hibernate.entity.Teacher" table="t_teac">

		<id name="id" type="int" column="ID">
			<generator class="sequence">
				<param name="sequence">seq_teh</param>
			</generator>
		</id>

		<property name="name" not-null="true" type="java.lang.String" column="name"></property>

		<many-to-one name="student" cascade="save-update"
			class="com.hxzy.hibernate.entity.Student" >
			<column name="student_id"></column>
		</many-to-one>

	</class>

log4j.properties

log4j.rootLogger = info,a

log4j.appender.a = org.apache.log4j.ConsoleAppender
log4j.appender.a.Target = System.err
log4j.appender.a.layout = org.apache.log4j.SimpleLayout

3.下面是具体代码
dao层

public class DaoImpl implements Dao{
	Session session = null;
	
	/**
	 * 获取session
	 * */
	public Session getSession() {
		Configuration cfg = new Configuration().configure();//配置cfg
		@SuppressWarnings({})
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		session = sessionFactory.openSession();//打开session
		return session;
	}
	
	/**
	 * 添加学生信息
	 * */
	public void addStudent(Student student) {
		System.out.println("开始添加");
		session = getSession();
		Transaction tsa = session.beginTransaction();//开启事务
		try {
			session.save(student);
			tsa.commit();
		}catch(Exception e) {
			e.printStackTrace();
			tsa.rollback();//回滚
		}finally {
			session.close();
		}
	}
	
	/**
	 * 查找学生信息列表
	 * */
	public void findStudent() {
		session = getSession();
		System.out.println("开始查找表");
		try {
			List<Student> list = session.createQuery("from Student").list();//查询数据库获得结果集
			for(Student student:list) {//遍历列表输出信息
				System.out.println(student.getName());
			}
		}catch(Exception e) {
			e.printStackTrace();
			session.close();//关闭session
		}
	}
	
	/**
	 * 由id查找学生信息
	 * */
	public void findStudentById(int id) {
		session = getSession();
		System.out.println("开始id查找");
		try {
			Student student = (Student) session.get(Student.class, id);//查询数据库获得结果
			System.out.println(student.getName());//输出信息
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			session.close();//关闭session
		}
	}
	
	/**
	 * 有名字查询学生信息
	 * */
	public void findStudentByName(String name) {
		session = getSession();
		System.out.println("开始name查找");
		String hql = "from Student where name = :name";//创建hql
		try {
			Query query = session.createQuery(hql);
			query.setString("name", name);
			Student student = (Student) query.uniqueResult();
			System.out.println(student.getId());
		}catch(Exception e) {
			e.printStackTrace();	
		}finally {
			session.close();
		}
	}
}
测试类
	@Test
	public void asd() {
		System.out.println(1);
		Student student = new Student();
		Teacher teacher = new Teacher();
//		student.setName("gz");
//		teacher.setName("zxs");
//		teacher.setStudent(student);
		DaoImpl daoImpl = new DaoImpl();
//		daoImpl.addStudent(student);
//		daoImpl.findStudent();
//		daoImpl.findStudentById(7);
//		daoImpl.findStudentByName("gz");
		Session session = daoImpl.getSession();
//		session.save(teacher);
//		session.beginTransaction().commit();
		Teacher t = (Teacher) session.load(Teacher.class, 4);
		System.out.println(t.getId()+t.getName()+t.getStudent().getName());
		session.close();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值