mybatis如何在页面画出修改密码页面模板框架

三大数据库 mysqloraclesqlsever 更专业、更强悍、适合不同用户群体【新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统】A 集成代码生成器(开发利器); 技术:增删改查的处理类,service层,mybatis的xml,SQL( mysql 和oracle)脚本, jsp页面 都生成就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 集成阿里巴巴数据库连接池数据库连接池阿里巴巴的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势C 集成安全权限框架Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠D 集成ehcache 分布式缓存;是一个纯Java的进程内缓存框架,具有快速、精干等特点,广泛使用的开源Java分布式缓存。E 集成微信接口开发;(后续加入Activiti5 工作流 )赠送一个jbpm工作流大型ERP系统(含OA、财务、分销)参考学习F websocket及时通讯技术;(即时聊天、及时站内信并声音提醒、实时在线管理、websocket及时刷新页面)G 图片爬虫技术;-------------------------------------------------------------------------------------------------------------------------1. 模块化、服务化,流程化,耦合度低、扩展性好,灵活度高,工具类封装完整,干净利索,调用简单方便2. 提供Rest服务,支持APP手机应用(android和ios)接口、php、.net、易语言、VB等第三方接口调用3. 全新高大尚HTML5+css3.0+bootstrap响应式开发界面UI,( 手机 PC 平板 截图在下面)、前沿.spring restful 风格4. 框架搭建完善成熟,在此基础上做过很多项目,系统具有并发处理、分布式、稳定性。5. 系统功能完善,此为框架平台,文档、注释齐全,提供技术支持,专门供二次开发6. 在此基础上可二次开发(OA、ERP、CRM ,医疗管理、金融、网站后台、APP后台、电子商务、商城(赠送UI)等等7.我们这边是公司,主要业务是定制开发,此系统为我们平时给客户做项目用的,经过很多项目实战考验-------------------------------------------------------------------------------------------------------------------------系统模块1. 权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限。按钮权限: 给角色分配按钮权限。2. 按钮管理:自定义按钮管理,维护按钮权限标识等3. 菜单管理:无限级别自定义菜单,自定义菜单图标,业务菜单和系统菜单分离,菜单状态显示隐藏(递归处理)4. 数据字典:无限级别,支持多级别无限分类。内设编号,排序等5. 组织机构:无限级别,公司or部门管理6. 在线管理:websocket技术,实时检测在线用户列表,统计在线人数,可强制用户下线同一用户只能在一个客户端登录7. 系统用户:对各个基本的用户增删改查,单发、群发站内信邮件短信,导入导出excel表格,批量删除8. 会员管理:对前台用户管理,分配会员级别,到期时间,状态,联系信息等资料9. 代码生成:生成完整的模块代码,并保留生成记录模版,可复用 (超强悍开发利器)10. 性能监控:监控整个系统的性能,SQL监控,SQL防火墙,URL监控,SPRING监控,SESSION监控等11. 接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间12. 发送邮件:单发,群发邮件13. 置二维码:生成二维码图表保存到服务器 or解析读取二维码内信息14. 图表报表:柱状图、饼状图、折线图、各种图表大全15. 地图工具:打开地图, 鼠标点击地图某位置获取经纬度坐标,根据经纬度计算两点距离16. 打印测试:页面打印预览测试17. 图片管理:对批量上传的图片统一管理 ,点击放大,可打开多个,自由切换,绚丽预览效果18. 图片爬虫:输入某网址,爬出其图片显示在页面上,可以放大预览。可保存到服务器上,到图片管理里面19. 站内信:收信箱和发信箱, websocket技术通讯技术做的及时收信提醒,可配置语音提示来信20. 系统设置:修改系统名称,邮件服务器配置,短信账号设置,图片水印配置,微信配置21. 及时聊天:打开聊天窗口,可群聊、一对一聊天-------------------------------------------------------------------------------------------------------------------------菜单权限:分配给每个角色不同的菜单权限, 每个角色看到的菜单不同,无限级别菜单按钮权限:独立分配不同的角色不同的功能权限,增删改查权限分配具体到不同的菜单,自定义按钮管理支持多用户分权限管理后台,权限具体到不同的菜单不同的按钮--------------------------------------------------------------------------------------------------------------信息模块(小项目代码中)新闻管理:新闻的维护、发布、权重排序等 采用百度ueditor富文本框公告管理:公告的维护、发布广告管理:广告的维护、发布,状态维护,上传广告图片友情链接:友情链接的维护、状态维护特别推荐:特别推荐、状态维护微信模块(有指导视频花生壳本地IP映射操作)关注回复:微信用户关注公众号回复文本回复:匹配关键词进行文本回复图文回复:匹配关键词进行图文回复应用命令:匹配关键词进行命令操作,例如微信发送命令,执行服务器重启、关机、锁定等操作-------------------------------------------------------------------------------------------------------------------------技术点1. 导出 导入 excel 文件2导出word文件3. IO 流上传下载文件4. 群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件)5. 群发or单独 发送短信,支持两种第三方短信商接口6. spring aop事物处理7. 代码生成器 (freemarker), 代码 zip 压缩打包8. MD5加密 SHA加密(登录密码用此加密)接口加密身份校验9. 数据库连接池阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势,支持并发10.加入安全框架 shiro (登录授权)(session管理)11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名)12.app接口@ResponseBody(支持与其它语言数据交互)13.极光推送 (推送给APP及时消息,APP不启动也能收到)14.微信接口(身份验证,文本、图文回复等) 微信远程控制服务器重启、锁定、其它应用程序15.java Quartz 定时器 (定时执行某程序,精确到秒,可设置周期)16.java websocket 即时通讯技术,点对点,群聊,单聊17.新增Lucene全文检索18.Base64传输图片19.图片加水印(图片水印,文字水印)20.生成 or解析 二维码21.HTML5 + JAVAEEWebSocket 通信技术,WebSocket 验证用户登录,强制某用户下线22.批量异步上传图片,可预览,有进度条,支持拖拽上传(百度webuploader )。列表动态滑动放大展示。23.ehcache 自定义二级缓存 ,选择缓存存放目录,处理并发,增加系统性能24.服务器内部GET POST 请求25.uploadify 上传插件,单条、批量上传多线程,带进度条,异步,图片、视频, 其它文件格式均可上传26.地图选点获取经纬度坐标,根据俩经纬度计算距离27.tab标签页面功能,标签自由切换,不重复操作数据库28.站内信语音提醒,js控制音频播放29.百度富文本编辑器,可上传图片30.网页爬虫技术,可根据网页地址爬取图片和网页标题等信息(爬取某商城图片保存本服务器)-------------------------------------------------------------------------------------------------------------------------系统框架为:springmvc +spring+ mybaitsSSM 【 spring3.0 和 spring4.02mybaits 3.2】操作系统:windowslinux mac 等没有限制。 有 maven 和 javaee 版 jdk 1.6 1.7 1.8tomcat 6 7 8开发工具:myeclipseeclipse idea 均可, 没有限制数据库:oracle、msyql、sqlsever (2005及以上均支持)赠送 同UI springmvc + hibernateSpringSecurity Lucene Quartz MySQL、Oracle、SQL Server赠送 同UImaven 分模块项目 springmvc + mybatis系统演示视频:链接:/s/1gdN32Ht 密码:xh7w百度云 最新录的/programs/view/Qv1zuqAGWAA/土豆 最新录的登录界面背景用HTML5特效自动切换(百叶窗,幕布等多种切换方式)&就爱阅读网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
欢迎转载:
推荐:    1488人阅读
mybatis(1)
如果不太熟悉MyBatis使用的请先参见,这对理解其架构设计和源码分析有很大好处。
MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己
The MyBatis data mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.
而在其官方文档中介绍“What is MyBaits”中说到
MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
ORM是Object和Relation之间的映射,包括Object-&Relation和Relation-&Object两方面。Hibernate是个完整的ORM框架,而MyBatis完成的是Relation-&Object,也就是其所说的data mapper framework。关于ORM的一些设计思路和细节可以参见Martin Flow《企业应用架构模式》一书中的ORM章节,MyBatis并不刻意于完成ORM(对象映射)的完整概念,而是旨在更简单、更方便地完成数据库操作功能,减轻开发人员的工作量,我想这对于应用系统来说也是最实用的,相信用Hibernate的都受过它的痛苦,而用过MyBatis的都会感觉它很简捷轻松。
二、整体架构
下面是从功能流程层次描述MyBatis的整体架构图
而下面是MyBatis源码包对应的架构图
下面以“功能流程角度的架构图”来简要地分析下各层的架构,在后面系列文章中将有专题来深入解析MyBatis重要的功能点。
我们知道,在不考虑与Spring集成的情况下,使用MyBatis执行数据库操作的代码如下
String resource = &org/mybatis/example/mybatis-config.xml&;
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
Blog blog = session.selectOne(&org.mybatis.example.BlogMapper.selectBlog&, 101);
} finally {
session.close();
SqlSessionFactory、SqlSession这是MyBatis接口层的核心类,尤其是SqlSession,是实现所有数据库操作的API,这几个类都是org.apache.ibatis.session包下的,这个包的主体类结构图如下
Configuration是MyBatis中相当重要的一个类,可以这么说,如果理解了其中的所有参数的意义,不仅清楚地知道MyBatis提供的所有配置项,还理解了MyBatis的内部核心运行原理,当然要真正理解这些参数的意义及实现,还需要阅读完完整的MyBatis框架之后才能做到。
由上图可以看到,Configuration对象与DefaultSqlSessionFactory是1:1的关联关系,这也就意味着在一个DefaultSqlSessionFactory衍生出来的所有SqlSession作用域里,Configuration对象是全局唯一的。同时SqlSessionFactory提供了getConfiguration()接口来公开Configuration对象,因此开发者除了配置文件之外,还可以在程序里动态更改Configuration的属性项以达到动态调整的目的,但此时不仅要考虑到执行完reset,同时还要考虑在修改过程中会可能影响到其他SqlSession的执行。
2.1 配置解析
在应用启动的时候,MyBatis解析两种配置文件
SqlMapConfig.xmlSqlMap.xml
SqlMapConfig.xml是在XMLConfigBuilder类中完成解析的,其类图关系大致如下
我们知道XML有两种解析方式:一是DOM,另一个是SAX,MyBatis使用的是org.wrc.dom——JDK提供的文档对象模型(DOM)接口(SqlMapConfig.xml并不大,所以DOM方式并没有什么效率损耗,JDK也提供了SAX模型接口org.xml.sax,这两个都是JAXP的组件API),以及JDK官方提供的javax.xml.xpath.XPath来作为XML路径寻找组件。
SqlMap.xml是在XMLMapperBuilder中解析完成的,其中把对Statement的解析(即SqlMap.xml中SELECT|INSERT|UPDATE|DELETE定义部分)委托给XMLStatementBuilder来完成。SqlMap.xml的解析比较复杂的,涉及到PreparedMapping、ResultMapping、LanguageDriver、Discriminator、缓存、自动映射等一系列对象的构造,这里暂时略过,后面专题分析。
2.2 SQL执行
MyBatis中Executor是的核心,围绕着它完成了数据库操作的完整过程。下面是Executor的类图
在上图中我列出了Executor中方法的参数,而在其子类中就没有明确写出。从上图中可以看到,Executor主要提供了
QUERY|UPDATE(INSERT和DELETE也是使用UPDATE),从方法定义中可看到,它需要MappedStatement、parameter、resultHandler这几个实例对象,这几个也是SQL执行的主要部分,详细实现在后面专题中再介绍。事务提交/回滚,这委托给Transaction对象来完成。缓存,createCacheKey()/isCached()。延迟加载,deferload()。关闭,close(),主要是事务回滚/关闭。
BaseExecutor的属性表明:它内部维护了localCache来localOutputParameterCache来处理缓存,至于这缓存保存的是什么,这后面专题再说。以及线程安全的延迟加载列表deferredLoads、事务对象Transaction。
BatchExecutor的属性已经表明:它内部维护了StatementList批量提交并通过batchResultList保存执行结果。
ResueExecutor的属性及方法表明:它内部维护了java.sql.Statement对象缓存,以重用Statement对象(对于支持预编译的数据库而言,在创建PreparedStatement时需要发送一次数据库请求预编译,而重用Statement对象主要是减少了这次预编译的网路开销)。
下面以SqlSession.selectList为例,画出SQL执行的时序图(点击下方的图片查看大图,部分分支有所简化)
3.1、logging:
MyBatis使用了自己定义的一套logging接口,根据开发者常使用的日志框架——Log4j、Log4j2、Apache Commons Log、java.util.logging、slf4j、stdout(控制台)——分别提供了适配器。由于各日志框架的Log级别分类法有所不同(比如java.util.logging.Level提供的是All、FINEST、FINER、FINE、CONFIG、INFO、WARNING、SEVERE、OFF这九个级别,与通常的日志框架分类法不太一样),MyBatis统一提供trace、debug、warn、error四个级别,这基本与主流框架分类法是一致的(相比而言缺少Info,也许MyBatis认为自己的日志要么是debug需要的,要么就至少是warn,没有Info的必要)。
在org.apache.ibatis.logging里还有个比较特殊的包jdbc,这不是按字面意义理解把日志通过jdbc记录到数据库里,而是将jdbc操作以开发者配置的日志框架打印出来,这也就是我们在开发阶段常用的跟踪SQL语句、传入参数、影响行数这些重要的调试信息。
MyBatis里的IO主要是包含两大功能:提供读取资源文件的API、封装MyBatis自身所需要的ClassLoader和加载顺序。
3.3、reflection
在MyBatis如参数处理、结果映射这些大量地使用了反射,需要频繁地读取Class元数据、反射调用get/set,因此MyBatis提供了org.apache.ibatis.reflection对常见的反射操作进一步封装,以提供更简洁方便的API。比如我们reflect时总是要处理异常(IllegalAccessException、NoSuchMethodException),MyBatis统一处理为自定义的RuntimeException,减少代码量。
3.4、exceptions
在以Spring为代表的开源框架中,对于应用程序中无法进一步处理的异常大都转成RuntimeException来方便调用者操作,另外如频繁遇到的SQLException,JDK约定其是个Exception,从JDK的角度考虑,强制要求开发者捕获SQLException是为了能在catch/finally中关闭数据库连接,而Spring之类的框架为开发者做了资源管理的事情,自然就不需要开发者再烦心SQLException,因此封装转换成RuntimeException。MyBatis的异常体系不复杂,org.apache.ibatis.exceptions下就几个类,主要被使用的是PersistenceException。
缓存是MyBatis里比较重要的部分,有两种缓存:
SESSION或STATEMENT作用域级别的缓存,默认是SESSION,BaseExecutor中根据MappedStatement的Id、SQL、参数值以及rowBound(边界)来构造CacheKey,并使用BaseExccutor中的localCache来维护此缓存。全局的二级缓存,通过CacheExecutor来实现,其委托TransactionalCacheManager来保存/获取缓存,这个全局二级缓存比较复杂,后面还需要专题分析,至于其缓存的效率以及应用场景也留到那时候再分析。
3.6、数据源/连接池
MyBatis自身提供了一个简易的数据源/连接池,在org.apache.ibatis.datasource下,后面专题分析。主要实现类是PooledDataSource,包含了最大活动连接数、最大空闲连接数、最长取出时间(避免某个线程过度占用)、连接不够时的等待时间,虽然简单,却也体现了连接池的一般原理。阿里有个“druid”项目,据他们说比proxool、c3p0的效率还要高,可以学习一下。
MyBatis对事务的处理相对简单,TransactionIsolationLevel中定义了几种隔离级别,并不支持内嵌事务这样较复杂的场景,同时由于其是持久层的缘故,所以真正在应用开发中会委托Spring来处理事务实现真正的与开发者隔离。分析事务的实现是个入口,借此可以了解不扫JDBC规范方面的事情。
后续将对MyBatis各个部分做详细的设计及源代码分析,由于读取和解析SqlMapConfig.xml和SqlMap.xml的逻辑与各个模块的相关性较强,因此将把这部分内容与在各模块组合在一起分析。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:535335次
积分:5617
积分:5617
排名:第3569名
转载:488篇
评论:29条
(1)(2)(2)(5)(11)(5)(9)(2)(8)(7)(17)(14)(16)(6)(23)(16)(34)(32)(37)(19)(2)(10)(1)(3)(2)(15)(18)(31)(9)(13)(6)(12)(18)(23)(22)(38)(1)日志总数:133篇
评论总数:235条
分类总数:3个
标签总数:183个
友情链接:8个
网站运行:2200天
现在位置: &&
&>&&>&正文
SpringMVC+Spring+MyBatis整合完整版Web实例(附数据)
最近段时间正在学习Spring MVC和MyBatis的一些知识。自己也在网络上面找了一些例子来练习。但是都不是很完整。所以,今天,自己也抽空写了个完成的关于Spring MVC + Spring + MyBatis(简称 SSM)的一个CRUD的完整Web 演示例子。如果你也是刚好学习这几个框架的新手,或许我做的这个例子对你刚好有所帮助哦!
演示工程的目录结构
添加数据页面
修改数据的页面
查询出的数据列表
下面来说下这个演示的小例子。首先,我是使用MyEclipse工具做的这个例子,整合了Sping 3 、Spring MVC 3 、MyBatis框架,演示数据库采用MySQL数据库。例子中主要操作包括对数据的添加(C)、查找(R)、更新(U)、删除(D)。我在这里采用的数据库连接池是来自阿里巴巴的Druid,至于Druid的强大之处,我在这里就不做过多的解释了,有兴趣的朋友们可以去网上谷歌或者百度一下哦!好了下面我就贴上这次这个演示例子的关键代码:
BaseController
BaseController.java
package com.bky.
import java.util.L
import java.util.UUID;
import javax.servlet.http.HttpServletR
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.RequestM
import com.bky.model.A
import com.bky.service.BaseS
@Controller
public class BaseController {
private BaseService baseS
public BaseService getBaseService() {
return baseS
@Autowired
public void setBaseService(BaseService baseService) {
this.baseService = baseS
@SuppressWarnings("finally")
@RequestMapping("addInfo")
public String add(Add add,HttpServletRequest request){
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){
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){
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){
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){
String str = baseService.update(add);
request.setAttribute("InfoMessage", str);
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("InfoMessage", "更新信息失败!具体异常信息:" + e.getMessage());
} finally {
return "result";
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
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;&@Controllerpublic 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){
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){
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){
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){
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){
String str = baseService.update(add);
request.setAttribute("InfoMessage", str);
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("InfoMessage", "更新信息失败!具体异常信息:" + e.getMessage());
} finally {
return "result";
Service的实现
BaseServiceImpl.java
package com.bky.service.
import java.util.L
import java.util.UUID;
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.S
import com.bky.dao.AddM
import com.bky.model.A
import com.bky.service.BaseS
@Service("baseService")
public class BaseServiceImpl implements BaseService {
private AddMapper addM
public AddMapper getAddMapper() {
return addM
@Autowired
public void setAddMapper(AddMapper addMapper) {
this.addMapper = addM
public String addInfo(Add addInfo) {
if (addMapper.insertSelective(addInfo) == 1) {
return "添加成功";
return "添加失败";
public List&Add& getAll() {
return addMapper.getAll();
public String delete(String id) {
if (addMapper.deleteByPrimaryKey(id) == 1) {
return "删除成功";
return "删除失败";
public Add findById(String id) {
return addMapper.selectByPrimaryKey(id);
public String update(Add addInfo) {
if (addMapper.updateByPrimaryKeySelective(addInfo) == 1) {
return "更新成功";
return "更新失败";
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
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 "更新失败"; }&}
AddMapper.xml
&?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
&select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" &
&include refid="Base_Column_List" /&
where id = #{id,jdbcType=VARCHAR}
&delete id="deleteByPrimaryKey" parameterType="java.lang.String" &
delete from tadd
where id = #{id,jdbcType=VARCHAR}
&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 id="insertSelective" parameterType="com.bky.model.Add" &
insert into tadd
&trim prefix="(" suffix=")" suffixOverrides="," &
&if test="id != null" &
&if test="tname != null" &
&if test="tpwd != null" &
&trim prefix="values (" suffix=")" suffixOverrides="," &
&if test="id != null" &
#{id,jdbcType=VARCHAR},
&if test="tname != null" &
#{tname,jdbcType=VARCHAR},
&if test="tpwd != null" &
#{tpwd,jdbcType=VARCHAR},
&update id="updateByPrimaryKeySelective" parameterType="com.bky.model.Add" &
update tadd
&if test="tname != null" &
tname = #{tname,jdbcType=VARCHAR},
&if test="tpwd != null" &
tpwd = #{tpwd,jdbcType=VARCHAR},
where id = #{id,jdbcType=VARCHAR}
&update id="updateByPrimaryKey" parameterType="com.bky.model.Add" &
update tadd
set tname = #{tname,jdbcType=VARCHAR},
tpwd = #{tpwd,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
&select id="getAll" resultMap="BaseResultMap"&
SELECT * FROM tadd
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
&?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里面去把数据库的连接信息换成你自己哦!
本次演示例子源码完整下载:(百度网盘)
假如百度云分享链接失效,请联系站长,我会补上的。
好了。到这里为止,关于 SSM框架整合的一个CRUD的完整Web例子到此就结束了。如果你在阅读代码的时候有什么疑惑或者不懂,欢迎和我探讨哦!
该日志由 BaiKeyang 于日发表在分类下
【上篇】【下篇】

我要回帖

更多关于 tp框架404页面修改 的文章

 

随机推荐