本文意在快速构建一个可以接受前端访问,并进行数据库查找,随后返回相关信息给前端的项目。
ssm为Spring Ioc+SpringMVC+MyBatis的缩写
Spring Ioc:管理对象的一个工厂。对象之间有依赖,相互引用
Spring MVC:开发代码模式
Mybatis:操作数据库,和数据库打交道
2015年以前都用xml进行整合,2015年之后通过注解方式(即Spring Boot方式)

删除如下这些,这是maven命令行,一般用不到
application.yml中主要用来配置
要启动Spring项目我们先需要连接数据库,因为我们选择了mysqlDriver继承了JDBC,启动时会自动连接,因此我们需要先在application.yml中配置连接数据库
- spring:
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- username: root
- password: 123456
- url: jdbc:mysql://localhost:3306/ssmboot_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-
这里要填入你的数据库的username和password ,注意url中的ssmboot_db为我的数据库,把他替换成自己的就可以了

entity:实体类
controller:控制类,用来处理前端的访问
service:服务层,介于Dao层与controller层之间
mapper: 处理数据库,是Dao层,但是用了Mybatis叫mapper比较好
config:配置
utils:工具类

在entity包下新建User类
- @Data//lombok会自动生成get、set方法
- @Accessors(chain = true)//链式设值
- public class User {
- private int id;
- private String name;
- @Value("55")//设置默认值
- private String password;
- }
Spring已经集成了Mybatis,只需在创建项目时选择Mybatis即可

UserMapper.java代码
- package com.example.ssm_demo.mapper;
-
- import com.example.ssm_demo.entity.User;
- import org.apache.ibatis.annotations.Param;
- import org.springframework.stereotype.Repository;
-
- import java.util.List;
-
- @Repository
- public interface UserMapper {
- public User selectUserByName(String name);
-
- void insertUser(@Param("user") User user);
-
- void insertUsers(@Param("users") List
users) ; -
- void deleteUser(@Param("id") Integer id);
-
- void updateUser(@Param("user") User user);
-
- User selectUserById(@Param("id") Integer id);
-
- List
selectAllUsers(); - }
UserMapper.xml代码
- "1.0" encoding="UTF-8"?>
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.example.ssm_demo.mapper.UserMapper">
-
- <resultMap id="baseResultMap" type="com.example.ssm_demo.entity.User">
- <id column="id" property="id"/>
- <result column="name" property="name"/>
- <result column="password" property="password"/>
- resultMap>
-
- <insert id="insertUser">
- insert into `user` (name, password) values (#{user.name}, #{user.password})
- insert>
-
- <insert id="insertUsers">
- insert into `user` (name, password) values
- <foreach collection="users" item="u" close="" open="" separator=",">
- (#{u.name}, #{u.password})
- foreach>
- insert>
-
- <delete id="deleteUser">
- delete from `user` where id = #{id}
- delete>
-
- <update id="updateUser">
- update `user` set name = #{user.name}, password = #{user.password} where id = #{user.id}
- update>
-
- <select id="selectUserById" resultMap="baseResultMap">
- select * from `user` where id = #{id}
- select>
-
- <select id="selectAllUsers" resultMap="baseResultMap">
- select * from `user`
- select>
-
- mapper>
在application.yml中配置路径
- spring:
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- username: root
- password: 123456
- url: jdbc:mysql://localhost:3306/ssmboot_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-
- mybatis:
- mapper-locations: classpath:mapper/*.xml
@MapperScan("com.example.ssm_demo.mapper")
确保程序能找到mapper文件
其中的 值右键复制包的路径

在第一行加入@SpringBootTest
在测试类中写入userMapper,但此时其实编译器会自动根据mapperScaner进行查找
- @SpringBootTest
- class UserMapperTest {
-
- @Autowired(required = false)
- UserMapper userMapper;
-
- @Test
- void selectUserByName() {
- }
-
- @Test
- void insertUser() {
- userMapper.insertUser(new User().setName("hell0").setPassword("123"));
- }
-
- @Test
- void insertUsers() {
- User user1 = new User().setName("aaa").setPassword("123");
- User user2 = new User().setName("bbb").setPassword("123");
- User user3 = new User().setName("ccc").setPassword("123");
-
- List
users = List.of(user1, user2, user3); - userMapper.insertUsers(users);
- }
-
- @Test
- void deleteUser() {
- userMapper.deleteUser(1);
- }
-
- @Test
- void updateUser() {
- User user = new User().setId(2).setName("shi").setPassword("xiao");
- userMapper.updateUser(user);
- }
-
- @Test
- void selectUserById() {
- User user = userMapper.selectUserById(2);
- System.out.println(user);
- }
-
- @Test
- void selectAllUsers() {
- List
users = userMapper.selectAllUsers(); -
- users.forEach(System.out::println);
- }
- }
UserService
- public interface UserService {
-
- void addUser( User user);
-
- void addUsers( List
users) ; -
- void removeUserById( Integer id);
-
- void updateUserById( User user);
-
- User getUserById( Integer id);
-
- List
getAllUsers(); - }
UserServiceImpl
- @Service
- //@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) //会生成不一样的对象,默认是一样的
- public class UserServiceImpl implements UserService{
- @Autowired(required = false)//自动注入 根据类型注入
- // @Resource //先根据名称注入,后根据类型
- private UserMapper userMapper;
-
- @Override
- public void addUser(User user) {
- userMapper.insertUser(user);
- }
-
- @Override
- public void addUsers(List
users) { - userMapper.insertUsers(users);
- }
-
- @Override
- public void removeUserById(Integer id) {
- userMapper.deleteUser(id);
- }
-
- @Override
- public void updateUserById(User user) {
- userMapper.updateUser(user);
- }
-
- @Override
- public User getUserById(Integer id) {
- return userMapper.selectUserById(id);
- }
-
- @Override
- public List
getAllUsers() { - return userMapper.selectAllUsers();
- }
- }
第七步,在Controller包下新建UserController类
- //@Controller
- @RestController //等于 @Controller和 @ResponseBody
- @RequestMapping("/user")
- public class UserController {
- //可以设置请求方式
- // @RequestMapping(value = "/addUser", method = RequestMethod.GET)
- @Autowired
- UserService userService;
-
- @PostMapping("/")
- public Object addUser(@RequestBody User user) {
- System.out.println("add");
- System.out.println(user);
-
- userService.addUser(user);
-
- Map
rs = new HashMap<>(); - rs.put("success", true);
- return rs;
- }
-
- @DeleteMapping("/{id}")
- public Object delUser(@PathVariable("id") Integer userId) {
- System.out.println("del");
- System.out.println(userId);
-
- userService.removeUserById(userId);
-
- Map
rs = new HashMap<>(); - rs.put("success", true);
- return rs;
- }
-
- @PutMapping("/")
- public Object updateUser(@RequestBody User user) {
- System.out.println("update");
-
- userService.updateUserById(user);
-
- Map
rs = new HashMap<>(); - rs.put("success", true);
- return rs;
- }
-
- @GetMapping("/{id}")
- public Object getUser(@PathVariable("id") Integer userId) {
- System.out.println("getOneUser");
- System.out.println(userId);
-
- User user = userService.getUserById(userId);
-
- Map
rs = new HashMap<>(); - rs.put("success", true);
- rs.put("data", user);
- return rs;
- }
-
- @GetMapping("/")
- public Object getUsers() {
- System.out.println("getAllUsers");
-
- List
allUsers = userService.getAllUsers(); -
- Map
rs = new HashMap<>(); - rs.put("success", true);
- rs.put("data", allUsers);
- return rs;
- }
- }

其中用到了很多IOC注释,我们在这有必要解释一下
