从零开始整合SSM框架:Spring + Spring MVC + MyBatis 详细教程与实战

大纲:

一、 前言

1.SSM框架简介:简要介绍Spring(轻量级容器、IoC、AOP)、Spring MVC(Web层MVC框架)、MyBatis(持久层ORM框架)及其在JavaWeb开发中的地位。


2.为什么选择SSM:对比SSH,谈谈SSM的轻量、灵活、高效等特点。


3.本教程目标:带领读者从零搭建一个可运行的SSM项目,实现基本的CRUD操作。


二、 开发环境与项目准备


1.所需环境:
      ·JDK 1.8+
      · Maven 3.6+
      · IDE (IntelliJ IDEA 或 Eclipse)
MySQL 5.7+


2.创建Maven项目:使用IDE或命令行创建一个war类型的Maven项目。


3.项目基本结构(目录规划):


 

ssm-demo
├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── yourcompany
│       │           └── ssm
│       │               ├── controller    // 控制层
│       │               ├── service       // 业务层接口
│       │               ├── serviceimpl   // 业务层实现
│       │               ├── dao           // 数据访问层(Mapper接口)
│       │               └── entity        // 实体类
│       ├── resources
│       │   ├── spring
│       │   │   ├── spring-dao.xml     // MyBatis相关配置
│       │   │   ├── spring-service.xml // 业务层配置
│       │   │   └── spring-mvc.xml     // MVC相关配置(也可单独放)
│       │   ├── jdbc.properties        // 数据库连接信息
│       │   └── mybatis
│       │       └── mapper              // 存放MyBatis的Mapper.xml文件
│       └── webapp
│           ├── WEB-INF
│           │   └── web.xml            // Web应用部署描述符
│           └── index.jsp
└── pom.xml                           // Maven依赖管理

三、 依赖配置(pom.xml)

·列出所有必需的依赖,并简要说明每个依赖的作用。

·Spring Core:spring-context, spring-beans, spring-core
·Spring Web & MVC:spring-web, spring-webmvc
·MyBatis:mybatis
·MyBatis-Spring整合包:mybatis-spring (关键!)
·数据库驱动:mysql-connector-java
·数据源:commons-dbcp2 或 com.alibaba:druid (推荐Druid)
·JSTL & Servlet API:jstl, javax.servlet:javax.servlet-api (provided)
·Jackson(JSON支持):jackson-core, jackson-databind (用于前后端交互)
·日志:slf4j-api, logback-classic

四、 框架整合配置(核心步骤)


1.配置web.xml
·配置ContextLoaderListener,加载Spring的根容器(applicationContext.xml,用于整合service、dao等)。
·配置DispatcherServlet,加载Spring MVC的子容器(spring-mvc.xml,只负责controller等web相关组件),并指定配置文件位置。
·配置字符编码过滤器CharacterEncodingFilter。


2.配置Spring(applicationContext.xml)
·引入属性文件:加载jdbc.properties。
·配置数据源:使用Druid或DBCP2配置DataSource。
·配置SqlSessionFactoryBean:这是整合的关键。
·注入数据源。
·指定MyBatis全局配置文件的位置(通常可以省略,直接在此配置)。
·指定实体类的包别名(typeAliasesPackage)。
·指定Mapper.xml文件的位置(mapperLocations)。
·配置MapperScannerConfigurer:自动扫描DAO接口,并为其创建代理对象注入到Spring容器中。
·配置事务管理:DataSourceTransactionManager和基于注解(@Transactional)的事务支持。


3.配置Spring MVC(spring-mvc.xml)
·开启注解驱动:<mvc:annotation-driven />(支持@Controller, @RequestMapping等)。
·配置静态资源处理:<mvc:default-servlet-handler /> 或 <mvc:resources />。
·配置视图解析器:InternalResourceViewResolver,设置前缀(/WEB-INF/views/)和后缀(.jsp)。
·扫描Controller层:<context:component-scan base-package="...controller" />。


4.MyBatis配置
·通常无需单独的mybatis-config.xml,大部分配置已在SqlSessionFactoryBean中完成。如需高度定制(如插件、typeHandler等),可在此文件配置。

五、 代码实现(以User为例)

1.创建数据库表:t_user (id, name, age)
2.创建实体类(Entity):User.java (属性与表字段对应)
3.创建DAO层接口(Mapper):UserDao.java,使用MyBatis注解或XML方式。
 

// UserDao.java
public interface UserDao {
    @Select("SELECT * FROM t_user WHERE id = #{id}")
    User getUserById(Long id);
    
    @Select("SELECT * FROM t_user")
    List<User> getAllUsers();
    
    @Insert("INSERT INTO t_user(name, age) VALUES(#{name}, #{age})")
    @Options(useGeneratedKeys = true, keyProperty = "id") // 获取自增主键
    int insertUser(User user);
    
    // 更新、删除等方法...
}

4.创建Service层接口及实现

// UserService.java
public interface UserService {
    User getUserById(Long id);
    List<User> getAllUsers();
    void addUser(User user);
}

// UserServiceImpl.java
@Service // Spring注解,声明为Service Bean
public class UserServiceImpl implements UserService {
    
    @Autowired // 自动注入Dao
    private UserDao userDao;
    
    @Transactional // 声明式事务管理
    @Override
    public void addUser(User user) {
        userDao.insertUser(user);
    }
    
    @Override
    public User getUserById(Long id) {
        return userDao.getUserById(id);
    }
    
    @Override
    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }
}

5.创建Controller层

@Controller
@RequestMapping("/user")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @RequestMapping("/{id}")
    @ResponseBody // 返回JSON数据
    public User getUser(@PathVariable("id") Long id) {
        return userService.getUserById(id);
    }
    
    @RequestMapping("/list")
    @ResponseBody
    public List<User> getUserList() {
        return userService.getAllUsers();
    }
    
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public String addUser(@RequestBody User user) { // 接收JSON格式的请求体
        userService.addUser(user);
        return "success";
    }
    
    // 返回视图的示例
    @RequestMapping("/page")
    public String userPage() {
        return "userList"; // 视图解析器会将其拼成 /WEB-INF/views/userList.jsp
    }
}

六、 测试与运行

1.配置Tomcat服务器并启动。

2.使用Postman或浏览器测试API:

3.GET http://localhost:8080/user/1

4.GET http://localhost:8080/user/list

5.POST http://localhost:8080/user/add (Body: JSON {"name": "张三", "age": 20})

6.检查数据库数据变化,确认整合成功。

七、 常见问题与解决方案(Q&A)

1.404错误:检查DispatcherServlet的url-pattern(最好是/),检查Controller的@RequestMapping路径。

2.无法注入Bean:检查组件扫描(<context:component-scan>)的包路径是否正确。

3.无法找到Mapper:检查MapperScannerConfigurer的配置和SqlSessionFactoryBean的mapperLocations配置。

4.事务不生效:检查是否开启了<tx:annotation-driven />,并且方法是否是public的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值