• SSM框架(SpringBoot快速构建)


    简介

    本文意在快速构建一个可以接受前端访问,并进行数据库查找,随后返回相关信息给前端的项目。

    ssm为Spring Ioc+SpringMVC+MyBatis的缩写

    Spring Ioc:管理对象的一个工厂。对象之间有依赖,相互引用
    Spring MVC:开发代码模式
    Mybatis:操作数据库,和数据库打交道

    2015年以前都用xml进行整合,2015年之后通过注解方式(即Spring Boot方式)

    第一步,新建项目

    删除如下这些,这是maven命令行,一般用不到

     

    第二步,修改配置

     

    application.yml中主要用来配置

    要启动Spring项目我们先需要连接数据库,因为我们选择了mysqlDriver继承了JDBC,启动时会自动连接,因此我们需要先在application.yml中配置连接数据库

    1. spring:
    2. datasource:
    3. driver-class-name: com.mysql.cj.jdbc.Driver
    4. username: root
    5. password: 123456
    6. 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类

    1. @Data//lombok会自动生成get、set方法
    2. @Accessors(chain = true)//链式设值
    3. public class User {
    4. private int id;
    5. private String name;
    6. @Value("55")//设置默认值
    7. private String password;
    8. }

    第五步,配置Mybatis连接数据库

     前言

    Spring已经集成了Mybatis,只需在创建项目时选择Mybatis即可

    第一步,建立对应

     UserMapper.java代码

    1. package com.example.ssm_demo.mapper;
    2. import com.example.ssm_demo.entity.User;
    3. import org.apache.ibatis.annotations.Param;
    4. import org.springframework.stereotype.Repository;
    5. import java.util.List;
    6. @Repository
    7. public interface UserMapper {
    8. public User selectUserByName(String name);
    9. void insertUser(@Param("user") User user);
    10. void insertUsers(@Param("users") List users);
    11. void deleteUser(@Param("id") Integer id);
    12. void updateUser(@Param("user") User user);
    13. User selectUserById(@Param("id") Integer id);
    14. List selectAllUsers();
    15. }

    UserMapper.xml代码 

    1. "1.0" encoding="UTF-8"?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.example.ssm_demo.mapper.UserMapper">
    6. <resultMap id="baseResultMap" type="com.example.ssm_demo.entity.User">
    7. <id column="id" property="id"/>
    8. <result column="name" property="name"/>
    9. <result column="password" property="password"/>
    10. resultMap>
    11. <insert id="insertUser">
    12. insert into `user` (name, password) values (#{user.name}, #{user.password})
    13. insert>
    14. <insert id="insertUsers">
    15. insert into `user` (name, password) values
    16. <foreach collection="users" item="u" close="" open="" separator=",">
    17. (#{u.name}, #{u.password})
    18. foreach>
    19. insert>
    20. <delete id="deleteUser">
    21. delete from `user` where id = #{id}
    22. delete>
    23. <update id="updateUser">
    24. update `user` set name = #{user.name}, password = #{user.password} where id = #{user.id}
    25. update>
    26. <select id="selectUserById" resultMap="baseResultMap">
    27. select * from `user` where id = #{id}
    28. select>
    29. <select id="selectAllUsers" resultMap="baseResultMap">
    30. select * from `user`
    31. select>
    32. mapper>

    第二步,配置路径

    在application.yml中配置路径

    1. spring:
    2. datasource:
    3. driver-class-name: com.mysql.cj.jdbc.Driver
    4. username: root
    5. password: 123456
    6. url: jdbc:mysql://localhost:3306/ssmboot_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    7. mybatis:
    8. mapper-locations: classpath:mapper/*.xml

    第三步,在SsmDemoApplication中配置

    @MapperScan("com.example.ssm_demo.mapper")

    确保程序能找到mapper文件

    其中的 值右键复制包的路径

     第四步,在UserMapper.java中按下alt+insert生成测试类

    在第一行加入@SpringBootTest

    在测试类中写入userMapper,但此时其实编译器会自动根据mapperScaner进行查找

    1. @SpringBootTest
    2. class UserMapperTest {
    3. @Autowired(required = false)
    4. UserMapper userMapper;
    5. @Test
    6. void selectUserByName() {
    7. }
    8. @Test
    9. void insertUser() {
    10. userMapper.insertUser(new User().setName("hell0").setPassword("123"));
    11. }
    12. @Test
    13. void insertUsers() {
    14. User user1 = new User().setName("aaa").setPassword("123");
    15. User user2 = new User().setName("bbb").setPassword("123");
    16. User user3 = new User().setName("ccc").setPassword("123");
    17. List users = List.of(user1, user2, user3);
    18. userMapper.insertUsers(users);
    19. }
    20. @Test
    21. void deleteUser() {
    22. userMapper.deleteUser(1);
    23. }
    24. @Test
    25. void updateUser() {
    26. User user = new User().setId(2).setName("shi").setPassword("xiao");
    27. userMapper.updateUser(user);
    28. }
    29. @Test
    30. void selectUserById() {
    31. User user = userMapper.selectUserById(2);
    32. System.out.println(user);
    33. }
    34. @Test
    35. void selectAllUsers() {
    36. List users = userMapper.selectAllUsers();
    37. users.forEach(System.out::println);
    38. }
    39. }

    第六步,在service包下新建UserService和UserServiceImpl

    UserService

    1. public interface UserService {
    2. void addUser( User user);
    3. void addUsers( List users);
    4. void removeUserById( Integer id);
    5. void updateUserById( User user);
    6. User getUserById( Integer id);
    7. List getAllUsers();
    8. }

    UserServiceImpl 

    1. @Service
    2. //@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) //会生成不一样的对象,默认是一样的
    3. public class UserServiceImpl implements UserService{
    4. @Autowired(required = false)//自动注入 根据类型注入
    5. // @Resource //先根据名称注入,后根据类型
    6. private UserMapper userMapper;
    7. @Override
    8. public void addUser(User user) {
    9. userMapper.insertUser(user);
    10. }
    11. @Override
    12. public void addUsers(List users) {
    13. userMapper.insertUsers(users);
    14. }
    15. @Override
    16. public void removeUserById(Integer id) {
    17. userMapper.deleteUser(id);
    18. }
    19. @Override
    20. public void updateUserById(User user) {
    21. userMapper.updateUser(user);
    22. }
    23. @Override
    24. public User getUserById(Integer id) {
    25. return userMapper.selectUserById(id);
    26. }
    27. @Override
    28. public List getAllUsers() {
    29. return userMapper.selectAllUsers();
    30. }
    31. }

    第七步,在Controller包下新建UserController类

    1. //@Controller
    2. @RestController //等于 @Controller和 @ResponseBody
    3. @RequestMapping("/user")
    4. public class UserController {
    5. //可以设置请求方式
    6. // @RequestMapping(value = "/addUser", method = RequestMethod.GET)
    7. @Autowired
    8. UserService userService;
    9. @PostMapping("/")
    10. public Object addUser(@RequestBody User user) {
    11. System.out.println("add");
    12. System.out.println(user);
    13. userService.addUser(user);
    14. Map rs = new HashMap<>();
    15. rs.put("success", true);
    16. return rs;
    17. }
    18. @DeleteMapping("/{id}")
    19. public Object delUser(@PathVariable("id") Integer userId) {
    20. System.out.println("del");
    21. System.out.println(userId);
    22. userService.removeUserById(userId);
    23. Map rs = new HashMap<>();
    24. rs.put("success", true);
    25. return rs;
    26. }
    27. @PutMapping("/")
    28. public Object updateUser(@RequestBody User user) {
    29. System.out.println("update");
    30. userService.updateUserById(user);
    31. Map rs = new HashMap<>();
    32. rs.put("success", true);
    33. return rs;
    34. }
    35. @GetMapping("/{id}")
    36. public Object getUser(@PathVariable("id") Integer userId) {
    37. System.out.println("getOneUser");
    38. System.out.println(userId);
    39. User user = userService.getUserById(userId);
    40. Map rs = new HashMap<>();
    41. rs.put("success", true);
    42. rs.put("data", user);
    43. return rs;
    44. }
    45. @GetMapping("/")
    46. public Object getUsers() {
    47. System.out.println("getAllUsers");
    48. List allUsers = userService.getAllUsers();
    49. Map rs = new HashMap<>();
    50. rs.put("success", true);
    51. rs.put("data", allUsers);
    52. return rs;
    53. }
    54. }

    此时大功告成,启动项目即可,我们的项目结构长成这样

    利用postman进行测试,结果成功

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

    SpringMvc注解

    读者可以发现,我们对请求类型进行了分类

     

     

     

     

  • 相关阅读:
    Raptor码(一):2007RFC5053标准-R10编解码学习
    LC926. 将字符串翻转到单调递增(JAVA - 动态规划)
    gbase 8a 基础语法概念问题
    华为机试真题实战应用【赛题代码篇】-打印任务排序(附Java、Python和C++代码)
    9、Redis与SpringBoot整合
    中文语音识别实战(ASR)
    人间值得 以自己喜欢的方式过一生
    java八大包装类
    Spring(18) @Order注解介绍、使用、底层原理
    奉劝各位学弟学妹们,该打造你的技术影响力了!
  • 原文地址:https://blog.csdn.net/falldeep/article/details/130510909