1 问题
通过MyBatis实现修改数据,配置的映射是:

UPDATE
t_user
SET
password = #{password},
phone = #{phone},
email = #{email}
WHERE
id=#{id}

所以,如果调用该功能时,假设参数中并没有封装phone的数据,则默认为null,最终数据表中该记录的phone字段将被赋null值。

2 解决目标
如果调用该功能时,没有提供新的phone的数据,则不修改原有的phone数据,对于password、email的数据也是同样处理!

/**

  • 修改用户数据,不支持修改用户名
  • @param user 必须封装被修改的用户的ID,
  • 不需要封装用户名,
  • 对于phone、email、password的字段,
  • 如果需要修改,则封装新的值,
  • 如果不需要修改,则无须封装值
  • @return 如果修改完成,则返回1,
  • 如果需要修改的数据不存在,则返回0。
    */
    Integer updateUserInfo(User user);
    3 实现思路
    先通过ID查询被修改的用户数据,在执行修改之前,对新数据进行判断,如果某些字段为null值,则使用从数据表中查询到的数据封装进去即可。

即:假设修改id=1的数据,先查询这条数据,以手机号为例,假设从数据表中查询到的手机号是13900139001,如果修改时,使用的User对象中没有封装手机号码,则使用则查询到的手机号码封装到User对象中,最终在执行修改时,User对象中会包含与数据表中一致的手机号码,则可以实现设计目标。

4 实现步骤
4.1 在持久层实现根据ID查询数据的功能
在UserMapper.java接口中添加新的抽象方法:

User findUserById(Integer id);
在UserMapper.xml中配置映射。

4.2 创建业务层接口
创建cn.tedu.ssm.service.IUserService接口,添加所有持久层已经实现的方法:

4.3 创建业务层实现类
创建cn.tedu.ssm.service.UserServiceImpl类,实现以上业务层接口,在类中声明private UserMapper userMapper;并使用@Resource进行注解,还需使用@Serivce(“userService”)对类进行注解,实现过程中,直接调用持久层来完成,暂时不编写业务逻辑。

4.4 测试
使用单元测试

MyBatis 动态SQL
1基本概念
在使用MyBatis时,配置映射文件(.xml)时,使用的SQL语句可以添加一些语句,从而使得最终的SQL语句是可变的!

2 基本使用
在编写映射中的SQL语句时,例如可以添加进行判断,使得SQL语句中的其中一部分会根据判断条件来决定是否需要。例如:

UPDATE
t_user
SET
password = #{password},

phone = #{phone},

email = #{email}
WHERE
id=#{id}

3 练习if的使用
3.1 设定目标
在项目中,需要实现:“修改密码”、“修改手机号码”、“修改电子邮箱”这3个功能

3.2 分析
在映射文件中,使用即可判断到底执行哪个字段的更新操作。

3.3 实现功能

  1. 在UserMapper.java接口中声明名称较为泛化的方法:

Integer update(User user);
2) 配置UserMapper.xml映射:

UPDATE t_user SET password = #{password} phone = #{phone} email = #{email} WHERE id=#{id} 3) 单元测试,测试时需要注意:在User对象,只封装password、phone、email中的某1项,而不要同时封装多项!

  1. 在业务逻辑层IUserService接口中声明抽象方法:

Integer updatePassword(Integer id, String password);

Integer updatePhone(Integer id, String phone);

Integer updateEmail(Integer id, String email);
5) 在业务逻辑层UserServiceImpl实现类中实现以上方法

  1. 单元测试

4 什么时候需要使用动态SQL
如果使用了动态SQL,可以根据参数的值的不同,使得最终执行的SQL语句不同。

使用动态SQL可以使得同一个方法可以实现多种不同的目标,例如以上update()方法最终可以演变为updatePassword()、updatePhone()等方法。

所以,动态SQL是对SQL语句无法编程的一种补充。

但是,动态SQL只是为了便于利用SQL语句,并不是为了解决业务中存在的问题的!

AJAX
1 基本概念
AJAX用于向服务器发出异步请求,并获取结果的技术。

使用AJAX的本质还是在使用JavaScript编程。

可以想像为:AJAX就是一个看不到的浏览器,用于向服务器发出请求,并获取响应结果!

当AJAX请求获取响应结果后,可以结合JavaScript实现对网页的某个部分的显示效果进行更新,俗称“局部刷新”。

使用AJAX相对于传统的请求方式而言,无论是用户体验还是访问效率都会高许多!

使用AJAX必须在原有的页面的基础之上才可以!

2 练习
2.1 设计目标
设计login.html页面,用于模拟登录,在这个页面中添加1个,其中包含2个分别用于输入用户名和密码,还包含1个按钮。

当点击按钮后,将提交POST类型的请求,提交到http://SERVER:PORT/PROJECT/handle_login.do中,假设正确的用户名是ajax,匹配的密码是ajax888,如果提交的数据是正确的,则响应1,如果提交的数据无法登录,则响应0。

最终,如果得到的登录结果是1,使用alert()函数提示登录成功!否则,在输入用户名的输入框下显示登录失败的字样。

2.2 开发
2.2.1 创建项目
创建项目11-AJAX-DAY01-Login,生成web.xml,添加Tomcat Runtime,添加依赖:spring-webmvc,复制spring-mvc.xml文件并检查文件内容,配置web.xml!

2.2.2 显示登录页面
设计登录页面的访问路径:http://SERVER:PORT/PROJECT/login.do

开发实际显示的页面:WEB-INF/login.jsp,页面中至少包括以上设计的标签。

创建cn.tedu.ajax.controller.UserController类,使用@Controller注解,并添加方法以处理请求,处理的方式是直接转发:

@RequestMapping("/login.do")
public String showLogin() {
return “login”;
}
2.2.3 测试访问页面
在浏览器输入网址,需要能够正确的显示登录页面。

2.2.4 服务器端响应
在服务器端的UserController中添加处理“登录”请求的方法,在完成测试之前先使用GET方法的请求:

@RequestMapping(method=RequestMethod.GET,
value="/handle_login.do")
public String handleLogin() {
}
需要接收用户提交的用户名和密码,所以,需要在方法中添加2个参数:

public String handleLogin(String username, String password) {
}
然后,在方法中对用户名和密码进行判断:

if (“ajax”.equals(username) && “ajax888”.equals(password)) {
// 登录成功,响应"1"
} else {
// 登录失败,响应"0"
}
如果需要响应的是一个字符串,而不是响应某个View组件,在处理请求的方法之前添加@ResponseBody注解即可!

@RequestMapping(method=RequestMethod.GET,
value="/handle_login.do")
@ResponseBody
public String handleLogin(String username, String password) {
if (“ajax”.equals(username) && “ajax888”.equals(password)) {
// 登录成功,响应"1"
return “1”;
} else {
// 登录失败,响应"0"
return “0”;
}
}
并且,在spring-mvc.xml中,在根节点下添加:<mvc:annotation-driven />。

2.2.5 测试提交后的登录处理
在浏览器输入网址例如:http://http?/localhost:8080/11-AJAX-DAY01-Login/handle_login.do?username=ajax&password=ajax888

测试完成后,可将处理请求的请求类型调整为POST。

2.2.6 发出AJAX请求
为了便于使用,先创建一个函数,专门用于获取XMLHttpRequest对象:

然后,在登录界面中为2个输入框都设置id属性:

然后,再编写发出请求的函数,以备调用:

function handleLogin() {
var xhr = getXMLHttpRequest();
var u = document.getElementById(“username”).value;
var p = document.getElementById(“password”).value;
var url = “handle_login.do?username=” + u + “&password=” + p;
xhr.onreadystatechange = funtion() {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
//else {
// alert(“出错啦!!!”);
//}
};
xhr.open(“GET”, url, true);
xhr.send();
}
在“登录”中配置οnclick=“handleLogin()”。

AJAX的使用方式
核心对象
在AJAX中,使用XMLHttpRequest对象发出请求,并获取响应结果。获取对象的方式与Java中相同:

var xhr = new XMLHttpRequest();
以上语法适用于主流浏览器,包括:Chrome、FireFox、Safari、IE 8+,对于低版本的IE浏览器,需要:

var xhr = new ActiveXObject(“Microsoft.XMLHttp”);
为了保证兼容低版本的IE,应该:

var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject(“Microsoft.XMLHttp”);
}
核心对象的使用
如果需要发出请求,必须先调用XMLHttpRequest对象的open(method, url, isAsync)函数,然后调用send()函数。

如果需要处理结果,还需要配置XMLHttpRequest对象的onreadystatechange属性,它的值是另一个处理函数,即需要另编写一个函数决定如何处理响应结果。

所以,正确的使用方式:先配置onreadystatechange属性,然后调用open()函数,最后调用send()函数!

核心对象的属性
a) onreadystatechange:值是处理响应结果的函数

b) readyState:准备状态,其值是数值,共5个,分别是:0-尚未初始化、1-与服务器已经建立连接、2-已发出请求、3-请求已接收,并正在处理、4-已响应

c) status:响应码,例如200、404

d) responseText:服务器响应的正文

e) responseXML:服务器响应的XML

MyBatis实现修改数据相关推荐

  1. MyBatis的修改数据操作

    1)编写UserMapper映射文件 <mapper namespace="userMapper"><update id="update" p ...

  2. mybatis中修改了数据,控制台显示成功,数据库没有修改

    在mybatis中遇到了修改数据时,控制台显示修改成功,但是去数据库查看并没有修改,这是因为mybatis不时自动提交事务的,所以是不会修改数据库的数据,这是我们加上一句 sqlSession.com ...

  3. 【MyBatis动态SQL批量修改数据出现报错问题】

    MyBatis动态SQL批量修改数据出现报错问题 MyBatis动态SQL批量修改数据出现报错问题 问题描述 XML文件中的动态SQL 执行结果 测试执行 报错日志 解决 原数据库URL 修改后数据库 ...

  4. Mybatis批量更新数据

    Mybatis批量更新数据 第一种方式 [html] view plaincopy print? <update id="updateBatch" parameterType ...

  5. Java语言开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发ShopRec ...

  6. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

  7. 【Springboot学习笔记】SpringBoot+Mybatis+Thymeleaf+Layui数据表单从零开始实现按条件模糊分页查询的方法

    [Springboot学习笔记]SpringBoot+Mybatis+Thymeleaf+Layui数据表单从零开始实现按条件模糊分页查询的方法 目录 1.搭建环境 1.1直接从网上下载SpringB ...

  8. Java开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 京东商城爬虫 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 京东商城爬虫 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发Sh ...

  9. 【java学习】MyBatis使用——Java 数据持久层框架

    1,概念 MyBatis是一个数据持久层(ORM)框架,封装了jdbc.把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现.MyBATIS需要开发人员自己来写sql语句,这可以增加了程 ...

  10. mysql并发更新数据,多用户并发修改数据解决方案。

    mysql并发更新数据,多用户并发修改数据解决方案. 在系统中,有一些如余额.资产.积分的数据,是要保证数据一致性的.如,一个人使用两个设备同时进行消费操作,如何保证数据一致性的问题. 我们一起来思考 ...

最新文章

  1. 中国血统关系称谓大全
  2. Linux学习笔记四--Bash Shell
  3. 使用IntelliJ IDEA 2016创建maven管理的Java Web项目
  4. QT-在子控件上绘图的两种方式
  5. 后端技术:Spring Boot 项目优化和 JVM 调优,真实有效。
  6. javascript 打开新窗口
  7. c语言设计一维数组,一维数组 (1)C语言程序设计.pdf
  8. php网页脚本代码大全,PHP编写脚本代码的详细教程
  9. datetime 索引_【免费毕设】ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文)...
  10. 7号团队-团队任务5:项目总结
  11. 数模(6):Leslie矩阵人口模型
  12. 禁用微信字体缩放功能
  13. 避雷指南:软件测试最容易陷的28个误区
  14. 单词首字母变大写-vue
  15. 粉色噪声 褐色噪声 布朗噪声
  16. excel一个表格分成多个
  17. python数据库开发 dga_利用Python实现DGA域名检测
  18. 贝叶斯网络--概率推理
  19. html点击展开菜单,简单实现js点击展开二级菜单功能
  20. 智慧水务信息化系统建设方案

热门文章

  1. LTE IDLE DRX和CDRX
  2. 希腊字母表 ← LaTeX
  3. 保姆级的接口自动化教程,不会写代码也能2小时学会
  4. 直播特效的实现原理与难点
  5. Java程序:迷宫地图生成器
  6. js页面刷新或关闭时弹框
  7. python播放音频文件——playsound
  8. 【CPRI】(3)帧格式详解(重点)
  9. 西门子博图怎么导入库文件_【傻瓜教程】博途中库的建立与使用方法(工控公开课 今晚8点 老地方 不见不散!)...
  10. git和SVN的区别