此次目標為搭建一個簡單的基於springboot的ssm(spring + springmvc + mybatis)的maven項目,使用的數據庫為mysql。
最終項目目錄結構
創建過程
1、項目創建步驟如下:
為了創建快速。我們在idea中通過插件創建一個spring boot項目。
到此, 我們的初始項目創建完成了。項目結構如下圖所示
此時運行 SsmspringbootApplication 這個文件,會報未配置dataSource
如下圖所示進行一下配置(替換配置文件類型:.properties換為.yml然后增加datasource相關配置)即可完成一個最簡單的springboot項目進行跑通
# 數據庫連接配置信息
spring:
datasource:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mysql_test?serverTimezone=UTC
賬號密碼對應要配置成你自己的,到此項目可以跑起來了。最簡單的springboot項目搭建完成了,生成的pom.xml文件的內容如下,接下來我們開始加入我們的ssm。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>cn.wj.example</groupId> <artifactId>ssmspringboot</artifactId> <version>0.0.1-SNAPSHOT</version> <name>ssmspringboot</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!--begin spring--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!--end spring--> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、整合:基於開發的最基本的三層架架構進行開發
需求:從數據庫中查詢出某一用戶的所有信息返回給前台頁面
先康康數據庫的表結構~
CREATE TABLE `t_user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` char(20) NOT NULL,
`user_sex` char(2) NOT NULL DEFAULT 'F',
`user_address` char(20) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
為了方便我這里通過mybatis-generator自動生成mapper dao model,詳情可參考SpringBoot之使用mybatis generator自動生成bean、mapper、mapper xml,自動生成后的項目結構如下:
接下來手動加下service層跟controller層的實現,項目結構如下:
service層
package cn.wj.example.ssmspringboot.service; import cn.wj.example.ssmspringboot.pojo.User; /** * UserService * @author v_jingwen * */ public interface UserService { /** * 新增用戶信息 * @param user * @return */ public int addUser(User user); /** * 根據ID查詢用戶信息 * @param userId * @return */ public User selectUserById(Integer userId); }
package cn.wj.example.ssmspringboot.service.impl; import cn.wj.example.ssmspringboot.dao.UserMapper; import cn.wj.example.ssmspringboot.pojo.User; import cn.wj.example.ssmspringboot.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public int addUser(User user) { return userMapper.insert(user); } @Override public User selectUserById(Integer userId) { return userMapper.selectByPrimaryKey(userId); } }
controller層
package cn.wj.example.ssmspringboot.controller; import cn.wj.example.ssmspringboot.pojo.User; import cn.wj.example.ssmspringboot.service.UserService; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 用戶 Controller * * @author v_jingwen * @date 2020年9月9日 下午15:18:08 * */ @RestController @RequestMapping(value = "/ssmTest/user", produces = "application/json;charset=UTF-8") public class UserController { private final static Logger logger = LoggerFactory.getLogger(UserController.class); @Autowired private UserService userService; /*** * 增加測試用戶 * @param request */ @RequestMapping(value="/addUser.do") public Map<String,Object> addUser(HttpServletRequest request){ Map<String,Object> resultMap = new HashMap<>(); try { User user = new User(); user.setUserName("Nancy橙"); user.setUserSex("F");// F=女性,M=男性, user.setUserAddress("廣東深圳市南山區"); int id = userService.addUser(user); resultMap.put("data",id);// 返回記錄主鍵id resultMap.put("code","200"); resultMap.put("msg","操作成功"); } catch (Exception e) { logger.error("error", e); resultMap.put("code","500"); resultMap.put("msg","操作失敗"+e.getMessage()); } return resultMap; } /*** * 根據ID查詢用戶信息 * @param request */ @RequestMapping(value="/getUserById.do") public Map<String,Object> getUserById(HttpServletRequest request){ Map<String,Object> resultMap = new HashMap<>(); try { String userId = request.getParameter("userId");// 記錄主鍵id User user = userService.selectUserById(Integer.parseInt(userId)); resultMap.put("data",user); resultMap.put("code","200"); resultMap.put("msg","操作成功"); } catch (NumberFormatException e) { logger.error("error", e); resultMap.put("code","500"); resultMap.put("msg","操作失敗,userId必須為數字"); } catch (Exception e) { logger.error("error", e); resultMap.put("code","500"); resultMap.put("msg","操作失敗"+e.getMessage()); } return resultMap; } }
注冊mapper,主要作用是掃包,不進行注冊會導致dao層bean無法注入。
例如:
使用
@Autowired
private UserMapper userMapper;
報錯如下:
Field userMapper in cn.wj.example.ssmspringboot.service.impl.UserServiceImpl required a bean of type 'cn.wj.example.ssmspringboot.dao.UserMapper' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
注冊mapper方式,本例中使用方法1:
方法1、在springboot啟動類中加@MapperScan("cn.wj.example.ssmspringboot.dao")
方法2、在對應dao層加上@Mapper
在application.yml中指定mybatis配置文件的路徑,否則會報錯,例如:Invalid bound statement (not found): cn.wj.example.ssmspringboot.dao.UserMapper.selectByPrimaryKey。
#指定mybatis配置文件的路徑
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
測試
新增了默認用戶,返回對應的主鍵id1
查詢主鍵id=1的用戶信息
啦啦啦♪(^∇^*),完結~
代碼:有需要的親可以參考,github - ssmspringboot項目
參考資料:MyBatis-Spring-Boot-Starter簡要說明