SpringMVC+Spring+Hibernate整合(三层都使用基于注解)

创建Maven项目,导入依赖


   
        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
        
        
            javax.servlet.jsp
            javax.servlet.jsp-api
            2.3.1
            provided
        
        
        
            javax.servlet
            jstl
            1.2
        
        
        
        
            org.hibernate
            hibernate-core
            5.2.10.Final
        
        
        
            mysql
            mysql-connector-java
            5.1.40
        
        
        
            com.alibaba
            druid
            1.1.2
        
        
        
        
            org.springframework
            spring-webmvc
            4.3.9.RELEASE
        
        
        
            org.springframework
            spring-orm
            4.3.9.RELEASE
        
        
        
            org.springframework
            spring-test
            4.3.9.RELEASE
            test
        
        
        
        
            junit
            junit
            4.12
            test
        
        
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.8.9
        
        
        
        
            commons-fileupload
            commons-fileupload
            1.3.1
        
        
        
            commons-codec
            commons-codec
            1.10
        
  

SpringMVC配置

  1. web.xml中的配置

    
        contextConfigLocation
        classpath*:app*.xml
    
    
    
        rest
        org.springframework.web.filter.HiddenHttpMethodFilter
    
    
        rest
        /*
    
   
  
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        utf-8
    
    
        forceEncoding
        true
    
  
  
    characterEncodingFilter
    /*
  
   
    
        org.springframework.web.context.ContextLoaderListener
    
  
  
    springmvc
    org.springframework.web.servlet.DispatcherServlet
    1
  
  
    springmvc
    /
  
 
  1. classpath*:app*.xml:这样写不止可以加载你当前项目下的配置文件,也可以加载你导入的其他jar包下的配置文件。
  2. 配置的前端控制器实际上就是一个servlet,配置的servlet的名字必须和SpringMVC配置文件的名字相同如:springmvc对应springmvc-servlet.xml
  3. /:配置为一个"/"而不配置为"/* ",因为,因为配置为这两个,静态资源的访问也会通过这个servlet,而可以在spring中配置静态资源的访问通过默认的servlet去处理,如果配置为"/*",配置将不会生效
  4. 支持RESTful架构的过滤器:浏览器支持的请求方式为get/post,spring支持get/post/put/delete请求,如果要使用put/delete请求就需要配置这个过滤器,后面代码中有使用例子

配置SpringMVC



        
    
    
    
    
    
    
    
    
    
    
    
     
    
        
        
        
        
         
        
    


  1. :仅能够在已经在已经注册过的bean上面起作用。对于没有在spring容器中注册的bean,它并不能执行任何操作。但是不用担心,除了具有的功能之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。
  2. :配置静态资源的处理,最好的方式是使用资源映射的方式--

Spring配置

app.xml



        
    
    
    
    

    
    
        
        
        
        

        
        
        
        

        
        

        
        

        
        

        
        
        
        

        
        
        

        
        
    

    
    
        
        
            
                hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
                hibernate.show_sql=true
                hibernate.format_sql=true
            
        
    

    
    
    
    
    

1.:通过注解的方式配置声明式事务,在需要事务环境的业务层类上使用@Transactional声明事务,不在配置文件中再配置切面和增强处理

Dao层的实现类

@Repository
public class DepartmentDaoImpl 
    extends BaseDaoHibernateAdapter
    implements DeparmentDao {

}

@Repository:将数据访问层 (DAO 层 ) 的类标识为 Spring Bean,在配置文件中要开启注解扫描

Service层实现类

@Transactional
@Service
public class DepartmentServiceImpl implements DepartmentService {
    @Autowired
    private DeparmentDao deparmentDao;
    @Autowired
    private EmployeeDao employeeDao;
        
    //业务略
}

1.@Transactional: 声明事务环境
2.@Service:将业务层 (Service 层 ) 的类标识为 Spring Bean,在配置文件中要开启注解扫描
3.@Autowired:自动装配,spring调用setter方法注入

表现层

@Controller
public class EmpController {
    @Autowired
    private EmployeeService empService;
    
    @GetMapping(value = "/employee/{no}", produces = "application/json;charset=utf-8")
    @ResponseBody
    public Employee getEmployee(@PathVariable Integer no) {
        return empService.getEmployeeByNo(no);
    }
    
    @PostMapping(value = "/employee", produces = "application/json;charset=utf-8")
    @ResponseBody
    public Employee addEmployee(Employee employee) {
        return empService.addNewEmployee(employee)? employee : null;
    }
    
    @PutMapping(value = "/employee/{no}", produces = "application/json;charset=utf-8")
    @ResponseBody
    public Employee updateEmployee(Employee employee) {
        return empService.editEmployee(employee)? employee : null;
    }
    
    @DeleteMapping(value = "/employee/{no}")
    @ResponseBody
    public String delEmployee(@PathVariable Integer no) {
        Employee employee = new Employee();
        employee.setNo(no);
        return empService.removeEmployee(employee) ?
                "{'flag': true}" : "{'flag': false}";
    }
}
  1. @Controller:将表现层 (Controller 层 ) 的类标识为 Spring Bean,在配置文件中要开启注解扫描
  2. @GetMapping(查询)/@PostMapping(添加)/@PutMapping(修改)/@DeleteMapping(删除):基于REST架构对资源的不同处理请求
  3. @ResponseBody:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
  4. @ReuqestBody: a.该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
    b.再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
  5. @PathVariable:通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中

页面请求url


    
        
    
    
        
        
        
        
    
        
           
    

  1. data: {'_method':'put','name':'紫霞','salary':5000 }:使用ajax请求的时候,put/delete请求,使用'_method':'put',type:'post'--此时type类型只能使用post(为什么呢,请看HiddenHttpMethodFilter的源码)
  2. 如果是表单提交put/delete请求呢?
    在表单中添加隐藏域:

你可能感兴趣的:(SpringMVC+Spring+Hibernate整合(三层都使用基于注解))