大纲:
一、 前言
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的。

5万+

被折叠的 条评论
为什么被折叠?



