spring springmvc hibernate整合之java web 项目

来源:互联网 发布:5s怎么备份所有数据 编辑:程序博客网 时间:2024/05/09 09:17

主要是配置applicationContext和springmvc.xml

applicationContext.xml包括引入数据库属性文件,组件扫描排除controller层的service层和dao层

创建dataSource的bean对象及其属性,属性时数据库连接的属性,

创建sqlSession的bean对象,注入数据源,配置hibernate的属性sql的格式化,创建表,方言;

创建事务管理的bean对象,注入sqlSession对象,

使用事务管理的注解方式:<tx:annotation-driven transationManager="transationManager"/>

springmvc.xml


组件扫描包含controller层 排除service层和dao层

配置内容协商管理bean对象 包含 媒体类型属性和默认内容类型;

《mvc:anotation-driven》

mvc:default-servlet-handler

和视图解析器 前缀和后缀


实体类 ,@Entity @Table

(name = "person")
  controller类@Controller  service类 @Service   dao类采用注解方式@Repository;

类里采用

@Autowired
  private PersonService personService;
@Autowiredpublic PersonDAO personDAO;
@Resourceprivate SessionFactory sessionFactory;

自动注入要调用 的类;

采用此类注解,配置文件里就不用配置相应bean对象;



1、引入相应的jar包,spring的包:spring-aop spring-aspect  spring-context spring-beans spring-core spring-orm spring-expression  spring-tx spring-test spring-web   spring-jdbc  大概11个

hibernate包:hibernate3  ,lib下required下的包:jta  javaassist  slf4j  commons-collections dom4j antrl   及hibernate-jpa 大概8个

还有mysql-connect-java  

sping依赖的包  spingsource...mchange...c3p0    springsource....commons-logging    spingsource..aop.. springsource...aspect... springsource.log4j.slf4j-log4j大约7个


2

建立包及类 com.mz.wfy.domain       Person.java

private String id;// 主键id name;// 姓名idCard;// 身份证号 phone;// 手机号 address;// 
以上都是string类型    封装 和 toString 方法       get方法使用注解 
@Id@Column(name = "id", nullable = false, unique = true)@GenericGenerator(name = "generator", strategy = "uuid")@GeneratedValue(generator = "generator")
@Column(name = "name", nullable = false, length = 32)

建立对应的hibernate  映射文件User.hbm.xml 使数据库的表和实体映射;hibernate-mapping   中有class  节点(name table 属性)下面有id (包括generator节点)property节点(name colomn属性)



  com.mz.wfy.controller PersonController.java

@SessionAttributes(value = "username")@Controller    //使用该注解标志它是一个控制器@RequestMapping(value = "/person")public class PersonController {   @Autowired   public PersonService personService;   /**    * 登录请求,失败返回error.jsp    *     * @param username    * @param password    * @return    */   @RequestMapping("/login")   public String dologin(String username, String password, Map<String, Object> map) {      if (username.equals("admin") && password.equals("admin")) {         map.put("username", username);//存放在request请求域中         /**          * 类上加上@SessionAttributes({"username"}) 同时也会存放在 session域中          * @SessionAttributes 除了可以通过属性名指定需要存放到会话中的属性外(使用的是value属性值)          * 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(实际上使用的是types属性值),          */         return "frame";      }      return "error";   }   /**    * 保存添加的数据    *     * @param person    * @return    */   @RequestMapping(value = "/saveperson")   public String saveperson(Person person) {      personService.addPerson(person);      return "redirect:main";   }   /**    * 跳转到添加页面    * savepage.jsp    * @return    */   @RequestMapping(value = "/addperson")   public String saveperson() {      return "savepage";   }   /**    * 删除一条数据    *     * @param id    * @return    */   @RequestMapping(value = "/deletePersonById")   public String deletePersonById(@RequestParam(value = "id") String id) {      System.out.println("删除单个");      personService.deletePersonById(id);      return "redirect:main";   }   /**    * 跳转到更新页面,回显数据    * editpage.jsp    * @param id    * @param model 使用的Model保存回显数据    * @return    */   @RequestMapping(value = "/doupdate")   public String doupdate(@RequestParam(value = "id") String id, Model model) {      model.addAttribute("person", personService.getPersonById(id));      return "editpage";   }   /**    * 更新数据    *     * @param person    * @return    */   @RequestMapping(value = "/updateperson")   public String updateperson(Person person) {      System.out.println(person.toString());      personService.updatePerson(person);      return "redirect:main";   }   /**    * 查询所有人员信息    *     * @param map 使用的是map保存回显数据    * @return    */   @RequestMapping(value = "/main")   public String mian(Map<String, Object> map) {      map.put("personlist", personService.getPersons());      /*遍历集合,查看查询到的数据       * List<Person> lists = personService.getPersons();        * Iterator<Person> it = lists.iterator();        * while(it.hasNext()){        *        Person p =it.next();       *    System.out.println(p.toString());       *  }       */      return "main";   }}


com.mz.wfy.service   PersonService    


com.mz.wfy.dao   PersonDao


private Session getSession() {   return sessionFactory.getCurrentSession();}/** * 根据id查询 * @param id * @return */public Person getPersonById(String id) {   return (Person) this.getSession().createQuery("from Person where id=?").setParameter(0, id).uniqueResult();}/** * 添加 * @param person */public void addPerson(Person person) {   this.getSession().save(person);}/** * 更新 * @param person */public void updatePerson(Person person) {   this.getSession().update(person);}/** * 删除 * @param id */public void deletePersonById(String id) {   this.getSession().createQuery("delete Person where id=?").setParameter(0, id).executeUpdate();}/** * 查询所有 * @return */@SuppressWarnings("unchecked")public List<Person> getPersons() {   return this.getSession().createCriteria(Person.class).list();}




3.建立各种属性文件和配置文件,A    jdbc.properties   

jdbc.driverClass=com.mysql.jdbc.Driver;     jdbc .url=jdbc:mysql://localhost:3306/sprsh?useUnicode=yes&characterEncoding=utf-8

jdbc.uername=root     jdbc.password=123456 


 B log4j.properties  .........百度搜一下就可以了,这个以后详细研究下;

C applicationContext.xml 



<context:component-scan base-package="com.mz.wfy">   <context:exclude-filter type="annotation"    expression="org.springframework.stereotype.Controller"/></context:component-scan>

a  引入外部属性文件 jdbc.properties    使用

<context:property-placeholder  location=“classpath:jdbc.properties”/>

b 配置连接池,datasource数据源bean对象

<bean id="dataSource" class="com.springframework.org.mchange.c3p0....>

<property name="driverClass"   value="${ jdbc .driverClass}"/>

<property name="jdbcUrl" value="${ jdbc .url}"/>

<property name="jdbc.user" value="${ jdbc .username}"/>

<property name="jdbc.password" value="${ jdbc password}/>

</bean>

c 配置hibernate属性 sessionFactory 的bean对象
<bean  id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--注入连接池-->
<property name="dataSource" ref="dataSource"></property>
<!--配置hibernate相关属性>
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
<!--加载hibernate映射文件-->


<property name="mappingResources">
<list>
<value>com/mz/wyf/Department.hbm.xml</value>
<value>com/mz/wyf/Employee.hbm.xml</value>
</list>
</property>或者
 <property name="packagesToScan">   <list>      <value>com.mz.wfy.domain</value>   </list></property>

</bean>



<!--配置action类-->
<bean id="employeeAction" class="com.mz.wfy.action.EmployeeAction.java">
<property name="employeeService" ref="employeeService"></property>
</bean>
<!--配置service类-->
<bean id="employeeService" class="com.mz.wfy.action.EmployeeService.java">
<property name="employeeDao" ref="employeeDao"></property>
</bean>
<!--配置dao类-->
<bean id="employeeService" class="com.mz.wfy.action.EmployeeDao.java">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!--事务管理-->
<bean id="transactonManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>

</bean>


<!--事务管理使用注解的方式-->
<tx:annotation-driven transactonManager="transactonManager" />

</bean>



springmvc.xml


<!--包扫描controller层-->
<!--
<context:component-scan base-package="com.mz.wfy.controller">
<context:exclude-filter type="annotation" expression="org.springframwork.stereotype.Service"/>
</context:component-scan>
-->
<context:component-scan base-package="com.mz.wfy">
<context:include-filter type="annotation" expression="org.springframwork.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframwork.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframwork.stereotype.Repository"/>
</context:component-scan>
<!--配置视图解析器,把handler返回的值解析为为实际的物理图-->
<!--
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>


内容协商管理,媒体类型和默认内容类型
<bean id="contentNegotiationManager" class="org.springframwork.web.accept.ContentNegotiationManangerFactoryBean">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
<entry key="xml" value="application/xml"/>
<entry key="html" value="text/html/>
</map>
</property>
<property name="defaultContentType" value="text/html"/>
</bean>
内容协商管理视图解析 ,解析为实际的物理视图;
<bean class="org.spingfamework.web.servlet.view.ContentNegotiationViewResolver">
<property name="order" value="0"/>
<property name="contentNegotiationManager" ref="contentNegotiationManager"/>
<property name="viewResolvers">
<list>
<bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="1">
<property name="prefix" value="/WEB-INF/view/" ></property>
<property name="suffix" value=".jsp" ></property>
</bean>
<bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="2">
<property name="prefix" value="/WEB-INF/view/" ></property>
<property name="suffix" value=".html" ></property>
</bean>
<list>
</property>
</bean>
-->




<bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" ></property>
<property name="suffix" value=".jsp" ></property>
</bean>


<!--静态资源交给默认的servlet-->
<mvc:default-servlet-handler/>


<!--代替注解映射器和注解适配器配置requestmappinghandlermapping  requestmappinghandleradapter ,默认加载许多参数绑定的方法-->
<mvc:annotation-driven></mvc:annotation-driven>