当前真实的企业开发中,SpringBoot已经统一Java企业应用开发,很少有在使用SSM项目来进行项目开发的。
可是在教学阶段,还是很有必要给学生讲解Java开发中一套很经典的框架,SSM框架。作为一个过渡阶段讲解的
项目比较合适,之后在讲解SpringBoot项目,相对来说要好理解一些。如果以开始就直接讲解SpringBoot框架,
那新的学生不一定能够理解底层的一些东西,例如SpringBoot是如何封装所需要的项目依赖。
接下来就简单讲解一下整合的思路,步骤,最后使用一个简单的新增方法来测试整合是否正确实现。
开发环境:Mysql-5.7 + JDK-1.8 + Maven-3.6 + Tomcat-8.5.5
如果有不具备这些环境,则使用工具的版本微调即可。
第一步,需要依赖的maven 坐标
总结: 需要引入的包,Spring框架的核心包,SpringMvc框架的包,还有Mybatis相关的包,Spring整合mybatis的包。
第一步就是配置文件.
SpringMvc的配置文件
application-mvc.xml 需要保留,配置信息如下
Spring的配置文件
applicationContext.xml 需要保留,配置信息如下
数据库配置信息
jdbc.properties 文件,配置信息如下
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=root
创建的表语句如下
CREATE TABLE `user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) DEFAULT NULL COMMENT '用户名字',
`user_age` int(11) COMMENT '用户名字',
`is_delete` int(11) DEFAULT '0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
如果搭建项目这些步骤就直接省略。自己测试时使用的是IDEA,整个项目的结构如下
页面跳转Controller里面的代码如下
/**
* @Author 一只爱阅读的程序员
* @Description 首页跳转 控制器
* @Date 2023/7/2 16:04
* @Version 1.0
*/
public class HtmlController {
@RequestMapping("/")
public String getIndex(){
System.out.println("首页页面跳转控制");
return "index";
}
}
新增用户Controller里面的代码如下
/**
* @Author 一只爱阅读的程序员
* @Description 用户信息 控制器
* @Date 2023/7/2 16:05
* @Version 1.0
*/
@RequestMapping("/user_info")
public class UserInfoController {
UserInfoService userInfoService;
/* @Description: 添加用户信息
* @author: yilang
* @date: 2023/7/2 16:43
* @param: userinfo
* @return: String
*/
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addUserInfo(UserInfo userinfo){
boolean result = this.userInfoService.addUserInfo(userinfo);
if(result){
System.out.println("新增用户信息成功!");
}
return "success";
}
}
Service实现类里面的代码如下
public class UserInfoServiceImpl implements UserInfoService {
UserInfoDao userInfoDao;
/* @Description: 新增用户信息
* @author: yilang
* @date: 2023/7/2 16:14
* @param: userInfo
* @return: int
*/
public boolean addUserInfo(UserInfo userInfo) {
int result = userInfoDao.addUserInfo(userInfo);
return result == 1;
}
}
Xml文件里面的代码如下
insert into user_info(user_name, user_age)
values
(#{userName, jdbcType = VARCHAR},
#{userAge, jdbcType = INTEGER})
JSP新增页面里面的代码如下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>测试结果如下,项目正常启动。
首页信息如下
输入数据,点击新增按钮,新增成功如下,
然后查看数据库信息如下,
整合过程中遇到的问题,
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ssm.dao.UserInfoDao.addUserInfo
org.apache.ibatis.binding.MapperMethod$SqlCommand.
org.apache.ibatis.binding.MapperMethod.
org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:115)
java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:102)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
com.sun.proxy.$Proxy24.addUserInfo(Unknown Source)
com.ssm.service.impl.UserInfoServiceImpl.addUserInfo(UserInfoServiceImpl.java:31)
com.ssm.controller.UserInfoController.addUserInfo(UserInfoController.java:33)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看
分析导致问题的原因,创建的dao接口类和对应的xml文件名称不一致才导致这个问题。
解决办法修改xml名称和dao接口类的名称一样即可。
拓展:如果想返回json数据信息,则需要添加一个新的依赖,
在用户Controller中在新增一个方法,如下
@RequestMapping(value = "/test", method = RequestMethod.GET)
public Map test(){
Map
map.put("userAge", "10");
map.put("userName", "萧炎");
return map;
}
测试结果如下
到此SSM项目整合完成,有其他建议的小伙伴欢迎留言讨论。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章