SpringMVC+Spring+MyBatis整合完整版Web实例(附数据)
最近段时间正在学习Spring MVC和MyBatis的一些知识。自己也在网络上面找了一些例子来练习。但是都不是很完整。所以,今天,自己也抽空写了个完成的关于Spring MVC + Spring + MyBatis(简称 SSM)的一个CRUD的完整Web 演示例子。如果你也是刚好学习这几个框架的新手,或许我做的这个例子对你刚好有所帮助哦!
[caption id="" align="aligncenter" width="275"] 演示工程的目录结构[/caption]
[caption id="" align="aligncenter" width="550"] 添加数据页面[/caption]
[caption id="" align="aligncenter" width="550"] 修改数据的页面[/caption]
[caption id="" align="aligncenter" width="550"] 查询出的数据列表[/caption]
下面来说下这个演示的小例子。首先,我是使用MyEclipse工具做的这个例子,整合了Sping 3 、Spring MVC 3 、MyBatis框架,演示数据库采用MySQL数据库。例子中主要操作包括对数据的添加(C)、查找(R)、更新(U)、删除(D)。我在这里采用的数据库连接池是来自阿里巴巴的Druid,至于Druid的强大之处,我在这里就不做过多的解释了,有兴趣的朋友们可以去网上谷歌或者百度一下哦!好了下面我就贴上这次这个演示例子的关键代码:
BaseController
package com.bky.controller; import java.util.List; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.bky.model.Add; import com.bky.service.BaseService; @Controller public class BaseController { private BaseService baseService; public BaseService getBaseService() { return baseService; } @Autowired public void setBaseService(BaseService baseService) { this.baseService = baseService; } @SuppressWarnings("finally") @RequestMapping("addInfo") public String add(Add add,HttpServletRequest request){ try { add.setId(UUID.randomUUID().toString()); System.out.println(add.getId() + ":::::" + add.getTname() + ":::::" + add.getTpwd()); String str = baseService.addInfo(add); System.out.println(str); request.setAttribute("InfoMessage", str); } catch (Exception e) { e.printStackTrace(); request.setAttribute("InfoMessage", "添加信息失败!具体异常信息:" + e.getMessage()); } finally { return "result"; } } @RequestMapping("getAll") public String getAddInfoAll(HttpServletRequest request){ try { List<Add> list = baseService.getAll(); System.out.println(list); request.setAttribute("addLists", list); return "listAll"; } catch (Exception e) { e.printStackTrace(); request.setAttribute("InfoMessage", "信息载入失败!具体异常信息:" + e.getMessage()); return "result"; } } @SuppressWarnings("finally") @RequestMapping("del") public String del(String tid,HttpServletRequest request){ try { String str = baseService.delete(tid); request.setAttribute("InfoMessage", str); } catch (Exception e) { e.printStackTrace(); request.setAttribute("InfoMessage", "删除信息失败!具体异常信息:" + e.getMessage()); } finally { return "result"; } } @RequestMapping("modify") public String modify(String tid,HttpServletRequest request){ try { Add add = baseService.findById(tid); request.setAttribute("add", add); return "modify"; } catch (Exception e) { e.printStackTrace(); request.setAttribute("InfoMessage", "信息载入失败!具体异常信息:" + e.getMessage()); return "result"; } } @SuppressWarnings("finally") @RequestMapping("update") public String update(Add add,HttpServletRequest request){ try { String str = baseService.update(add); request.setAttribute("InfoMessage", str); } catch (Exception e) { e.printStackTrace(); request.setAttribute("InfoMessage", "更新信息失败!具体异常信息:" + e.getMessage()); } finally { return "result"; } } }
Service的实现
package com.bky.service.impl; import java.util.List; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.bky.dao.AddMapper; import com.bky.model.Add; import com.bky.service.BaseService; @Service("baseService") public class BaseServiceImpl implements BaseService { private AddMapper addMapper; public AddMapper getAddMapper() { return addMapper; } @Autowired public void setAddMapper(AddMapper addMapper) { this.addMapper = addMapper; } @Override public String addInfo(Add addInfo) { if (addMapper.insertSelective(addInfo) == 1) { return "添加成功"; } return "添加失败"; } @Override public List<Add> getAll() { return addMapper.getAll(); } @Override public String delete(String id) { if (addMapper.deleteByPrimaryKey(id) == 1) { return "删除成功"; } return "删除失败"; } @Override public Add findById(String id) { return addMapper.selectByPrimaryKey(id); } @Override public String update(Add addInfo) { if (addMapper.updateByPrimaryKeySelective(addInfo) == 1) { return "更新成功"; } return "更新失败"; } }
Mapper
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.bky.dao.AddMapper" > <resultMap id="BaseResultMap" type="com.bky.model.Add" > <id column="id" property="id" jdbcType="VARCHAR" /> <result column="tname" property="tname" jdbcType="VARCHAR" /> <result column="tpwd" property="tpwd" jdbcType="VARCHAR" /> </resultMap> <sql id="Base_Column_List" > id, tname, tpwd </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > select <include refid="Base_Column_List" /> from tadd where id = #{id,jdbcType=VARCHAR} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.String" > delete from tadd where id = #{id,jdbcType=VARCHAR} </delete> <insert id="insert" parameterType="com.bky.model.Add" > insert into tadd (id, tname, tpwd ) values (#{id,jdbcType=VARCHAR}, #{tname,jdbcType=VARCHAR}, #{tpwd,jdbcType=VARCHAR} ) </insert> <insert id="insertSelective" parameterType="com.bky.model.Add" > insert into tadd <trim prefix="(" suffix=")" suffixOverrides="," > <if test="id != null" > id, </if> <if test="tname != null" > tname, </if> <if test="tpwd != null" > tpwd, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides="," > <if test="id != null" > #{id,jdbcType=VARCHAR}, </if> <if test="tname != null" > #{tname,jdbcType=VARCHAR}, </if> <if test="tpwd != null" > #{tpwd,jdbcType=VARCHAR}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.bky.model.Add" > update tadd <set > <if test="tname != null" > tname = #{tname,jdbcType=VARCHAR}, </if> <if test="tpwd != null" > tpwd = #{tpwd,jdbcType=VARCHAR}, </if> </set> where id = #{id,jdbcType=VARCHAR} </update> <update id="updateByPrimaryKey" parameterType="com.bky.model.Add" > update tadd set tname = #{tname,jdbcType=VARCHAR}, tpwd = #{tpwd,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} </update> <select id="getAll" resultMap="BaseResultMap"> SELECT * FROM tadd </select> </mapper>
以上就是几个关键位置的代码,我全部贴出来了。至于配置文件什么的,由于时间原因没有贴出。如果大家要是感兴趣的话,可以下载我的这个演示项目包,里面的东西都齐全着,导入到MyEclipse上面直接部署到服务器上面就可以运行。数据库就是里面的那个.sql文件。建个库然后将数据导入就是。哦,对了。导完数据后,记得别忘了到config.properties里面去把数据库的连接信息换成你自己哦!
本次演示例子源码完整下载:http://pan.baidu.com/s/1jDA2q(百度网盘)
假如百度云分享链接失效,请联系站长,我会补上的。
好了。到这里为止,关于 SSM框架整合的一个CRUD的完整Web例子到此就结束了。如果你在阅读代码的时候有什么疑惑或者不懂,欢迎和我探讨哦!
严重: create connection error
java.sql.SQLException: Access denied for user ‘root’@’localhost’ (using password: YES)
提交成功,刷新页面之前你可以
是怎么回事呢,谢谢
你好。这个异常时用户名密码错误或者权限配置问题导致的,可以检查下你的数据库用户名和权限是不是正确。
严重: create connection error
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
你好。这个异常时用户名密码错误或者权限配置问题导致的,可以检查下你的数据库用户名和权限是不是正确。
Exception thrown from LifecycleProcessor on context close
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Mon Oct 22 19:26:28 CST 2018]; root of context hierarchy
怎么报这个错误
你好,朋友,已邮件回复你了。
The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
报这个错,请问楼主如何处理?
可能是编译问题,不妨换个JDK版本试试看,比如1.6、1.7……
java框架生成,www点javacoder点top,希望各位coder受益
百度网盘 下载不了啊!楼主能发到邮箱吗?945246317@qq.com
:razz: :razz: 不错,帮顶
非常感谢楼主的分享,很有帮助
求加个Q,有问题就请教你!!!我的Q:154322307
我的联系方式在 【有关与我】栏目中哟~~~~~
下载不了
朋友,你可以多试几次。下载不了可能是因为网络不稳定导致的。试试用云盘客户端下载会好些(说明:不是在打广告)。下载前先将资源保存到你自己的网盘后再去点击下载,这样下载应该就没什么问题了。
:razz: 可以留个联系方式吗。。
你好。可以的。我的联系方式就是右栏的那些信息哟~
E-mail:baikeyang@vip.qq.com
QQ:295273987
就是请问一下,有没有直接封装一套增删改查的方法,不同的controller都能调用,传参,可以吗,
朋友,你可以讲的具体点么?“不同的controller都能调用?”比如……
controller都是可以在传递参数和接受参数的。
初学 ssm ,跪求楼组发下源码,谢谢
朋友,源码在百度网盘上面呢,你可以网盘下载(http://pan.baidu.com/s/1jDA2q)的哟~!如果不能下载的话,可以及时的告知我,以便于更换文件源哦!
运行不起来 加我扣扣 291571647 谢谢 大神
你好,你可以根据 菜单【与我有关】 中的联系方式联系我哟!里面有QQ 等 其他联系方式。或者直接给我发邮件,将错误信息 已附件的形式发送给我即可。我收到后会立即给你回复的哟。
大神,我是新手求指导 QQ 2893087020
如果需要联系我,可以在【与我有关】栏目中的联系方式 联系到我哦~ 同时,谢谢你的来访~
可以运行,很好 不错 ,只是有个问题要问一下 session拦截器 怎么配置呢
关于这个问题,你可以自己定义个拦截器用来拦截Session,这个的话,你可以在网上搜索,网上关于这个问题的解决方式 也是很多的。你可以试试哦。
MD,我的评论怎么不回复啊??博主,不公平
额,这个我前阵子因为工作的事比较忙,所以没有即使回复你的留言。在此对朋友深深的致歉。真的很抱歉了。如果要联系我,可以在【与我有关】栏目中的联系方式 联系到我哦~
数据库怎么连接起来,还是不太熟悉
连接数据库的 是一个config的配置文件。你可以修改里面的连接地址,把里面的地址改成你自己的地址即可连接数据库。
您好啊。。我运行报下面的错。。。如果不麻烦你的话可否加我的qq。.。605616041。。。先谢谢了。。。
-------------------------------------------------------------
type Status report
message /ssm/add.jsp
description The requested resource is not available.
------------------------------------------------------------
这个,你可以看下 项目中这个JSP是否存在,如果存在,在查看访问路径是否正确。如果还有什么不明白的地方,可以根据【与我有关】栏目中的联系方式 联系到我哦~
多谢分享!!!!
不客气。谢谢你的来访~
为什么我参照你的做法做了一个小项目,就报org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myMessageService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void message.service.impl.MyMessageServiceImpl.setMyMessageMapper(message.dao.MyMessageMapper); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [message.dao.MyMessageMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
这个问题可能是由于你的 Service 的问题。在Service 中 注入 MyMessageMapper的时候报错了。你可以检查下你的注解是否正确。如果有什么不明白的地方,可以根据【与我有关】栏目中的联系方式 联系到我哦,一起学习进步哦~
很好,太感谢了,
谢谢你的来访~
这个如果要增加几个模块需要怎么改配置文件,搞了很久一直报错
按照我的那个例子,加一个模块就需要响应加相应的Controller 、Service 和 Dao(Dao不是必加项),加完后,配置文件不需要做修改的。那个是只要是你放在指定的目录中 项目一旦启动就会自动去扫描的。
老是爆这个错误啊
java.lang.IllegalArgumentException
at org.springframework.asm.ClassReader.(Unknown Source)
遇到这个问题,你可以试着切换下你的JDK版本试试看。如果根据我说的办法没有解决此问题,可以根据【与我有关】栏目中的联系方式 联系到我哦~
我在idea里运行,也是报了一个跟你同样的错
java.lang.IllegalArgumentException
at org.springframework.asm.ClassReader.(Unknown Source)
遇到这个问题,你可以试着切换下你的JDK版本试试看。如果根据我说的办法没有解决此问题,可以根据【与我有关】栏目中的联系方式 联系到我哦~
楼主威武
谢谢你的来访~
你的代码缺少dao的实现部分。
朋友,这个Dao 的是实现在Mybatis的**Mapper.xml中实现的,Dao接口中的方法必须和**Mapper.xml的方法一一对应才行,这里头的这些就是对接口的实现。具体的一些知识你可以查看Mybatis的一些文档。
多谢博主,源码写的很清晰
谢谢你的来访~
你好,刚接触这个,我想知道如果是sql里面的虚拟列该用怎样的方式查呢?很多时候我都是一个sql搞定,里面又是联合又是子查询的。没有通用的查询吗?比如entitiy en=new Entity(sql),en.getStringvlaue("par")这样直接从查询的结果集里面取,能实现吗?老是要映射实体太麻烦,不适合敏捷开发啊。难道是我还不了解,请教。 :shock:
这个只是一个基本实现增删改查的Demo。如果是需要通用的查询的方法,你可以自己提取一个通用的接口 或者 方法 即可。通常在生产环境中确实是需要很多通用的查询方式来解决此问题的。我在现实开发中就是这么做的。
用了代码就应该 说声谢谢 .......感谢 无私的奉献 有容乃大 楼主 加油 :razz: :razz: :razz: :razz:
不客气~ 谢谢你的来访~
大神,我下载了你的代码,原样不懂放大MyEclipse上运行,可是一直在报找不到Cannot find class: BaseResultMap,求指教
没有找到这个类。将项目Clean后在重新编辑几次就好了。
大神我的跑不起来,求指教,QQ:1051279449
如果需要联系我的话可以根据【与我有关】栏目中的联系方式 联系到我哦~ 同时,谢谢你的来访~
609742011,QQ我的,LZ,新手跪求指教
如果需要联系我的话可以根据【与我有关】栏目中的联系方式 联系到我哦~ 同时,谢谢你的来访~
对惹 我的扣扣是 963920633 。。 谢谢
如果需要联系我的话可以根据【与我有关】栏目中的联系方式 联系到我哦~ 同时,谢谢你的来访~
:shock: 你好,我是是初学者,代码部署上去之后一直报上下文初始化异常。。 能解决么
你好,你可以将你的异常信息 已附件形式Email给我哟。
楼主,下载下来后没看到那个.sql文件呀,请问放在哪儿呢?
你好,建个数据库,将sql导入到数据库即可。
我下载了你的例子,很想关闭了这个页面,可是我点了播放音乐,又不想重新找歌听...
谢谢你的来访~
我的一直是404
你好。可以把你的异常信息以附件的形式Email给我么?我帮你看看是什么问题。
:razz:
谢谢你的来访~
哎呦,不错哦
谢谢你的来访~
:razz:
谢谢你的来访~
272390515@qq.com 发一份吧谢谢
朋友,源码在百度网盘上面呢,你可以网盘下载(http://pan.baidu.com/s/1jDA2q)的哟~!如果不能下载的话,可以及时的告知我,以便于更换文件源哦!
亲 发我一份吧 QQ:44624860
朋友,源码在百度网盘上面呢,你可以网盘下载(http://pan.baidu.com/s/1jDA2q)的哟~!如果不能下载的话,可以及时的告知我,以便于更换文件源哦!
准备换工作 ,学习一下
嗯,共同学习,共同进步。谢谢你的来访~
亲 发我一份吧
朋友,源码在百度网盘上面呢,你可以网盘下载(http://pan.baidu.com/s/1jDA2q)的哟~!如果不能下载的话,可以及时的告知我,以便于更换文件源哦!
我运行报异常,不知道怎么回事,我是刚接触的新手,求指教,QQ:747177410
朋友,你可以将你的异常信息以附件形式发送与我。我帮你看看是什么问题。
真心表示感谢。
不客气~谢谢你的来访~
不客气。谢谢你的来访~
什么时候讲讲原理啥的呀?能运行,可是不明白怎么回事啊。。。。
朋友,我对这个也不是很深入。如果要想知道他的具体原理,我建议你空的时候可以去阅读下这些框架的源码,对你的理解有很好的帮助哟~
大神请问代码里面AddMapper接口是如何通过AddMapper.xml实现的啊?这是基于什么原理
朋友,这个是Mybatis的机制,它的Dao实现就是靠AddMapper中我们写的sql和一些表达式来实现的。至于底层的实现和原理,建议你空的时候可以阅读下源码,主要会对你的理解能起到很好的帮助。
感谢楼主分享,现在正在学ssm ,一般管理系统代码看不懂,您发的代码正适合我 :razz:
不客气,希望对你能有帮助。谢谢你的来访~
求源码哦
朋友,源码在百度网盘上面呢,你可以网盘下载(http://pan.baidu.com/s/1jDA2q)的哟~!如果不能下载的话,可以及时的告知我,以便于更换文件源哦!
大神求救,帮我也发邮箱一份呗,万分感谢,842610411@qq.com,跪求能运行,带数据库的
朋友,源码在百度网盘上面是有的啊!地址我也写的有。你可以到百度网盘上面去下载的。如果文件不能下载的话,可以及时的告知我,以便于更换文件源哦!
我现在正要学习一下 springmvc spring mybatis三者的集成,系统楼主能把这个例子能发一份到邮箱 yly130727@163.com 谢谢 :razz:
朋友,源码在百度网盘上面是有的啊!地址我也写的有。你可以到百度网盘上面去下载的。如果文件不能下载的话,可以及时的告知我,以便于更换文件源哦!
楼主加我qq 1192373005
如果需要联系我,可以根据【与我有关】栏目中的联系方式 联系到我哦~ 同时,谢谢你的来访~
亲 我照着弄,结果springmvc+mybatis框架还是没能起来 你能发一份源码demo给我么 我的是myeclipse8.5 QQ邮箱310983117
OK ,好的。源码在百度网盘上面是有的啊!地址我也写的有。你可以到百度网盘上面去下载的。如果不能下载的话,可以即使的告知我,以便于更换文件源哦!
博主,您好,我运行您的示例,出现了Context配置初始化运行失败,想请教一下。QQ:363610752,谢谢。
我已经加了你的QQ了。
大神,你写的这个例子很好。我初学Spring+SpringMVC,有很多地方不懂,想请教下大神、能不能加qq聊啊?1129919550
你的QQ号是多少,请加我:290914896
如果需要联系我的话可以根据【与我有关】栏目中的联系方式 联系到我哦~ 同时,谢谢你的来访~
大神?我也是一个刚刚入门SpringMvc的新手,只是分享了一些自己的经验罢了。欢迎共同探讨、分享哦。
我的老是跑不起来,不知道怎么了,能加下QQ吗?1051279449
如果需要联系我的话可以根据【与我有关】栏目中的联系方式 联系到我哦~ 同时,谢谢你的来访~
大神,发一份给我吧,我下载不了
亲,你发送程序源码附件到你的QQ邮箱,请注意查收。有什么问题,可以直接邮件回复我哦!