最近闲来无事自己练习了一下搭建开发框架。找了很多资料,spring 3.0.1+hibernate3.2.5的jar包整合没有冲突。最终完成了测试。2大框架学的时间也不短了。推荐大家在学习的过程中多去看官网下载的压缩包中的内容。很多我们在百度上问的东西里面都有案例和相关的文档解释。看英文还能学点英语,最后祝大家学习顺利吧。
源码+jar包打包下载:
http://pan.baidu.com/share/link?shareid=217859&uk=1997312776
1、 首先先下载hibernate和spring的jar包。推荐在官网下载,本篇blog用的是hibernate3.2.5+spring3.0.1
2、 建立web project。POJO类和映射文件。
Pojo类没有什么困难,但是本篇仍旧贴出代码如下:
package cn.sprhib.model; public class Users { private Long id; private String username; private String password; public Long getId() { return id; } public void setId(Long id) { this.id = id; } 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; } }
建立映射文件Users.hbm.xml
说明:关于头文件的引用和其中的一些xml写法案例在hibernate包的hibernate-3.0\eg\org\hibernate\auction下可以找到相关的案例写法。Copy过去即可,本案例映射代码如下:
<?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="cn.sprhib.model.Users" table="Users" catalog="Sprhib"> <id name="id" type="long" column="id" length="3"> <generator class="identity"/> </id> <property name="username" column="username" length="10" not-null="true" type="string"/> <property name="password" column="password" length="20" not-null="true" type="string"/> </class> </hibernate-mapping>
除此之外还要导入Mysql的驱动包
4、编写hibernate.cxf.xml文件。
参考文件位置: hibernate-3.0.1\hibernate-3.0\etc下得hibernate.cxf.xml这个文件把大致轮廓都已经写好。其中的一些property的key还有value可以去同目录下的hibernate.properties文件中去查阅,当然也可以去该类的源码去中查找.代码如下:
<?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-configuration> <session-factory> <!-- 是否显示sql执行 --> <property name="show_sql">true</property> <!-- 设置方言,即数据库的平台 --> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <!-- 设置数据库驱动 --> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <!-- 设置数据库url --> <property name="connection.url"> jdbc:mysql://192.168.1.104:3306/sprhib?useUnicode=true&characterEncoding=utf8 </property> <!-- 设置连接用户名 --> <property name="connection.username">root</property> <!-- 设置连接密码 --> <property name="connection.password">root</property> <!--Examda,是否使用数据库外连接--> <property name="hibernate.use_out_join">True</property> <!-- 设置映射的xml文件.注意格式为/ --> <mapping resource="cn/sprhib/model/Users.hbm.xml"/> </session-factory> </hibernate-configuration>
5、编写类将POJO通过配置好的ORM关系映射生成表:代码如下
public class ClassToDB { public static void main(String[] args) { Configuration config = null; Session session = null; Transaction sa = null; config = new Configuration().configure(new File("src/hibernate.cfg.xml")); SessionFactory sessionFactory = config.buildSessionFactory(); session = sessionFactory.openSession(); sa = session.beginTransaction(); SchemaExport schemaExport = new SchemaExport(config); schemaExport.create(true, true); sa.commit(); } }-------------------------------------------------------------------------------------------------------------------------------------------------------------
下面开始加入spring的配置,并且将hibernate数据库管理交由spring的bean管理
1、在WEB-INF文件夹下面建立xml文件名为sprhib-data.xml。
2、关于头文件的阐述:周所周知spring的头文件是引用的spring服务器上面的schema约束。Beans、context、aop等等都有明确的地址。[关于xml的schema约束部分的知识本章不再详述,不了解的可以去看我的blog上webservice里面关于xml的讲解]拿到头文件可以手敲。也可以去Doc里面拿
(1)手敲方式[官网url][schema][引用部分案例比如beans、context]
http://www.springframe.org/schema/beans
(2)Doc方式Copy
Spring官网下载目录中会有一个文件为
spring-framework-3.0.1.RELEASE-A-with-docs.zip文件。此文件解压之后在
spring-framework-3.0.1.RELEASE-A\docs\spring-framework-reference\htmlsingle下面有一个帮助文件为spring-framework-reference.html
将此文件copy过来即可
3、 添加Spring和c3p0相关的Jar包。如下截图所示:
4、 编写配置文件如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 配置dataSource选用c3p0方式 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sprhib?useUnicode=true&characterEncoding=utf8" /> <property name="user" value="root" /> <property name="password" value="root" /> <property name="minPoolSize" value="2" /> <property name="maxPoolSize" value="50" /> <property name="initialPoolSize" value="10" /> <property name="maxIdleTime" value="60" /> <property name="acquireIncrement" value="2" /> </bean> <!-- 配置sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mappingResources"> <list> <value>cn/sprhib/model/Users.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop> </props> </property> </bean> <!-- 配置hibernateTemplate --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 声明式事务 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> </beans>
5、 添加web.xml读取配置加载该xml代码如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/sprhib-data.xml </param-value> </context-param>
public class SaveUsers { BeanFactory factory = null; @Test public void testSave(){ factory = new FileSystemXmlApplicationContext("WebContent/WEB-INF/sprhib-data.xml"); HibernateTemplate hibernateTemplate = (HibernateTemplate) factory.getBean("hibernateTemplate"); Users user = new Users(); user.setUsername("zhanglei"); user.setPassword("qweasd"); hibernateTemplate.save(user); } }
测试成功:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面加入spring mvc的配置,完成前后台请求
1、 WEB-INF下面new一个xml文件名为: dispatcher-servlet.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "> <!--配置一个viewResolver来处理返回的页面,配置前置和后置--> <bean id="viewresolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <!-- 扫描注解配置的包 --> <context:component-scan base-package="cn.sprhib.*" /> <mvc:annotation-driven /> </beans>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 添加spring mvc servlet配置 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/test/* </url-pattern> </servlet-mapping>
3、 编写Controller和Dao等代码完成一个操作
@Controller @RequestMapping("controller") public class UsersController{ @Resource private UsersDao usersDaoImpl; public UsersDao getUsersDaoImpl() { return usersDaoImpl; } public void setUsersDaoImpl(UsersDao usersDaoImpl) { this.usersDaoImpl = usersDaoImpl; } @RequestMapping(value="/addUser.action",method=RequestMethod.GET) public void addUsers(HttpServletRequest request,HttpServletResponse response){ String username = request.getParameter("username"); String password = request.getParameter("password"); Users u = new Users(); u.setUsername(username); u.setPassword(password); usersDaoImpl.addUser(u); } }
Dao接口
package cn.sprhib.model; public interface UsersDao { public void addUser(Users user); }
Dao实现类
@Component("usersDaoImpl") public class UsersDaoImpl implements UsersDao{ @Resource(name="hibernateTemplate") private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } @Override public void addUser(Users user) { hibernateTemplate.save(user); } }
访问地址以操作:
http://localhost:8080/Sprhib/test/controller/addUser.action?username="ceshi"&password="pass"
到此为止springmvc+spring+hibernate 搭建3层开发架构并且完成了一个增加的案例。