SSH整合(一)hibernat非Annotation配置

本文介绍了一个基于SSO项目的Hibernate集成过程,包括开发环境搭建、项目结构组织、实体类定义、映射文件与配置文件编写等内容,并通过JUnit进行了功能验证。

 

开发环境:MyEclipse6.5 + JDK1.6.0_33 + tomcat 6.0.32 + struts2.3.8 + spring3.2.1 + hibernate4.1.9

 

项目结构:

     SSO
        |----src
               |----com.login.junit
                                      |----SSOTest.java
               |----com.login.module
                                      |----User.java
                                      |----UserMapper.java
                                      |----User.hbm.xml
               |----hibernate.cfg.xml

 

步骤1:加入hibernate Jar

       

步骤2:建表

   

步骤3:新建java实体类

 

package com.login.module;

import java.io.Serializable;

public class User implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	 
	
	private String id;
	private String name;
	private String pwd;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
 
}


步骤4:实体与数据库的映射文件XX.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 package="com.login.module">
	<class name="User" table="user">
		<id name="id" type="java.lang.String">
		<!-- generator设置主键生成策略  assigned:主键由外部程序负责生成,无需Hibernate参与 -->
		 	<generator class="assigned"></generator>
		</id>
		<property name="name" type="java.lang.String">
			<column name="name" length="50"/>
		</property>
		<property name="pwd" type="java.lang.String">
			<column name="pwd" length="100" />
		</property>
	</class>
</hibernate-mapping>


 

步骤5:hibernate配置文件hibernate.cfg.xml;

<?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配置文件的开始 -->
<hibernate-configuration>
	<!-- session-factory主要配置Hibernate信息及对Session操作 -->
	<session-factory>
		<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
		<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:8080:test</property>
		<property name="hibernate.connection.username">admin</property>
		<property name="hibernate.connection.password">admin</property>
		
		
		<!-- 数据库连接池大小 -->
		<property name="hibernate.connection.pool.size">20</property>
		<!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率--> 
		<property name="hibernate.show_sql">true</property>
		<!--jdbc.fetch_size是指Hibernate每次从数据库中取出并放到JDBC的Statement中的记录条数。Fetch Size设的越大,读数据库的次数越少,速度越快,Fetch Size越小,读数据库的次数越多,速度越慢--> 
        <property name="hibernate.jdbc.fetch_size">50</property> 
        <!--jdbc.batch_size是指Hibernate批量插入,删除和更新时每次操作的记录数。Batch Size越大,批量操作的向数据库发送Sql的次数越少,速度就越快,同样耗用内存就越大--> 
        <property name="hibernate.jdbc.batch_size">23</property> 
        <!--jdbc.use_scrollable_resultset是否允许Hibernate用JDBC的可滚动的结果集。对分页的结果集。对分页时的设置非常有帮助--> 
        <property name="hibernate.jdbc.use_scrollable_resultset">false</property> 
        <!--connection.useUnicode连接数据库时是否使用Unicode编码--> 
        <property name="hibernate.Connection.useUnicode">true</property> 
        <!--connection.characterEncoding连接数据库时数据的传输字符集编码方式,最好设置为gbk,用gb2312有的字符不全--> 
    	<property name="hibernate.connection.characterEncoding">utf-8</property>      
        <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。--> 
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property><!-- 或者org.hibernate.dialect.OracleDialect -->
       
        <property name="hibernate.hbm2ddl.auto">update</property> 
       
        <!-- 非Annotation模式,需要关联实体类配置-->        
        <mapping resource="com/login/module/User.hbm.xml"/>
        
	</session-factory>
</hibernate-configuration>


 

步骤6:服务测试类UserManager.java

package com.login.module;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class UserMapper {

	/**
	*hibernate4的sessionFactory创建方式
	*/
	private SessionFactory buildSessionFactory() {
		Configuration cfg = new Configuration();
		cfg.configure();
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
				.applySettings(cfg.getProperties()).buildServiceRegistry();
		SessionFactory sf = cfg.buildSessionFactory(serviceRegistry);
		return sf;
	}
	public void add(User user){
		 Session s = buildSessionFactory().openSession();
		 s.beginTransaction();
		 s.save(user);
		 s.getTransaction().commit();
		 s.close();
	}
}

 

步骤7:Junit测试

package com.login.junit;

import com.login.module.User;
import com.login.module.UserMapper; 

import org.junit.Test; 

public class SSOTest{

	@Test
	public void testAdd() {
		  
		UserMapper userMapper = new UserMapper();
		
		User user = new User();
		user.setId("1");
		user.setName("lily");
		user.setPwd("123456");
		userMapper.add(user);
		 
		System.out.println("success add!");
	}
}


 输出:

 Hibernate: insert into user (id, name, pwd) values (?, ?, ?)
success add!

基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值