SSM整合实战:从数据库连接到CRUD接口的完整实现
SSM(Spring + Spring MVC + MyBatis)是Java Web开发的经典框架组合。以下通过用户管理模块示例,逐步实现数据库连接至CRUD接口的全流程,使用MySQL数据库和RESTful接口设计。
1. 环境准备
依赖配置(pom.xml)
<dependencies>
<!-- Spring核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version>
</dependency>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.10</version>
</dependency>
<!-- MyBatis整合Spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!-- 数据连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
2. 数据库连接配置
数据库表结构
CREATE TABLE `user` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`email` VARCHAR(100) UNIQUE
);
Spring数据源配置(applicationContext.xml)
<!-- 数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm_demo?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- MyBatis SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- Mapper接口扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.dao"/>
</bean>
3. 核心代码实现
实体类(User.java)
public class User {
private Integer id;
private String name;
private String email;
// Getter/Setter省略
}
Mapper接口(UserMapper.java)
public interface UserMapper {
@Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")
int insert(User user);
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(Integer id);
@Update("UPDATE user SET name=#{name}, email=#{email} WHERE id=#{id}")
int update(User user);
@Delete("DELETE FROM user WHERE id = #{id}")
int delete(Integer id);
}
Service层(UserServiceImpl.java)
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void addUser(User user) {
userMapper.insert(user);
}
@Override
public User getUser(Integer id) {
return userMapper.selectById(id);
}
// 其他CRUD方法省略
}
4. Spring MVC配置
Web配置(spring-mvc.xml)
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<!-- Controller扫描 -->
<context:component-scan base-package="com.example.controller"/>
<!-- 静态资源处理 -->
<mvc:resources mapping="/static/**" location="/static/"/>
Controller(UserController.java)
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public ResponseEntity<String> createUser(@RequestBody User user) {
userService.addUser(user);
return ResponseEntity.ok("用户创建成功");
}
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Integer id) {
User user = userService.getUser(id);
return ResponseEntity.ok(user);
}
// 其他CRUD接口省略
}
5. 接口测试
使用Postman测试RESTful接口:
- 创建用户
POST http://localhost:8080/api/users Body: {"name": "张三", "email": "zhangsan@example.com"} - 查询用户
GET http://localhost:8080/api/users/1
6. 关键优化点
-
事务管理
在Service层添加@Transactional注解保证原子性:@Transactional public void addUser(User user) { ... } -
全局异常处理
使用@ControllerAdvice统一处理异常:@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception e) { return ResponseEntity.status(500).body("服务器错误: " + e.getMessage()); } } -
分页查询
整合PageHelper实现分页:@GetMapping public ResponseEntity<List<User>> listUsers(@RequestParam(defaultValue="1") int page) { PageHelper.startPage(page, 10); return ResponseEntity.ok(userService.listAll()); }
注意事项
- 配置文件路径需与项目结构匹配(如
mapper/*.xml存放位置)- 生产环境需配置连接池参数(如最大连接数、超时时间)
- RESTful接口遵循HTTP语义(POST创建、GET查询等)
通过以上步骤,即可实现SSM框架下从数据库连接到CRUD接口的完整链路,后续可扩展权限控制、日志管理等模块。
2028

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



