ssm框架小案例

简介

Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发的框架,对于新手来说也是比较容易学习入门的。虽说容易,但在框架搭建过程中仍然遇到了许多问题,因此用实例记录下来吧。

ssm框架小案例_第1张图片


实例

第一步——导包

Spring框架包及其依赖包 
MyBatis框架包及其依赖包 
MyBatis-EhCache架包 
C3P0架包 
MySql数据库驱动包

项目架包如下: 
ssm框架小案例_第2张图片

项目结构如下: 
ssm框架小案例_第3张图片

第二步——整合Dao层(Spring+MyBatis)

sqlMapConfig.xml




    
        
    

因为MyBatis交给Spring管理,因此Mapper在Spring中配置,这里的配置只打开二级缓存

applicationContext-dao.xml

    
        
        
        
        
        
        
        
        
    

    
        
        
    

    
        
        

    

1.该配置自动扫描单例化采用代理方式的Mapper,单例化的Mapper的bean名为Mapper接口第一个字母为小写的名。 
2.千万要注意sqlSessionFactory的bean中的configLocation属性,其value值务必记得加上classpath:前缀,不然无法加载MyBatis配置文件

第二步——整合Service层(Spring)

业务接口和业务实现

UserService.java

package cn.pwc.service;
import java.util.List;
import cn.pwc.pojo.User;

public interface UserService {
    public void add(User user) throws Exception;
    public void delete(User user) throws Exception;
    public User getUserById(int id) throws Exception;
    public List listUserByAge(int age) throws Exception;
}

UserServiceBean.java

package cn.pwc.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.pwc.dao.mapper.UserMapper;
import cn.pwc.pojo.User;
import cn.pwc.service.UserService;


@Service @Transactional
public class UserServiceBean implements UserService{

    @Resource(name="userMapper")
    private UserMapper mapper;

    @Override
    public void add(User user) throws Exception {
        mapper.insert(user);
    }

    @Override
    public void delete(User user) throws Exception {
        mapper.deleteById(user.getId());
    }

    @Override
    public User getUserById(int id) throws Exception {
        User user=null;
        user=mapper.findById(id);
        if(user==null){
            throw new Exception("User is not existed!");
        }
        return user;
    }

    @Override
    public List listUserByAge(int age) throws Exception {
        List list=null;
        list=mapper.findByAge(age);
        if(list==null){
            throw new Exception("List is empty!");
        }
        return list;
    }
}

本实例采用自动扫描加载的方式,因此该业务bean需注解@Service 
本实例交由Spring管理事务,因此该业务bean需注解@Transactional

applicationContext-service.xml

    

第三步——添加事务管理

applicationContext-transaction.xml

    
        

    

    

第四步——整合视图层(SpringMVC)

springmvc.xml

    

    
    
        
        
    

采用mvc:annotation-driven标签自动装载视图控制器处理器解析器等

视图Controller(HelloController.java)

package cn.pwc.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import cn.pwc.pojo.User;
import cn.pwc.service.UserService;

@Controller
public class HelloController {

    @Resource(name="userServiceBean")
    private UserService service;

    @RequestMapping("/hello")
    public ModelAndView sayHello(){
        User user=null;
        User user2=null;
        User user3=null;
        try {
            user = service.getUserById(1);
            user2=service.getUserById(1);
            user3=service.getUserById(1);
            System.out.println("OK!");
        } catch (Exception e) {
            e.printStackTrace();
        }
        ModelAndView view=new ModelAndView("hello");
        view.addObject("user", user);
        return view;
    }
}

该Controller类需注解@Controller 
视图控制方法需注解@RequestMapping,作为url请求处理方法

第五步——将所有配置装载到Spring容器中

web.xml



    
        org.springframework.web.context.ContextLoaderListener
    

    
        contextConfigLocation
        classpath:applicationContext-*.xml
    

    
        springMVC
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:springmvc.xml
        

    
    
        springMVC
        /
    

务必注意servlet-mapping中url-pattern属性值不能为/* 
加载的配置文件路径必须有classpath:前缀

你可能感兴趣的:(ssm框架小案例)