java - 如何使用 Spring 事务管理将当前用户更新到数据库?
问题描述
例如:登录用户是 [test2],我想更新mAccount
和mPassword
.
如何获取登录会话并单击 jsp 表单进行更新?
(mId
是主键)
我该怎么办?
当我点击提交更新SQL数据库时,mAccount
并mPassword
没有更新。
我认为我的控制器必须有问题才能获得登录会话,所以我无法更新我想要的内容。我一次又一次地点击,但 SQL 数据库仍然没有任何变化,控制器没有得到 test2 对象来更新。如何修复控制器让我很困惑和焦虑。这个问题花了我 1 周的时间......
SQLMember
数据库:
编辑: 与上面的图像相同,可能缺少预期的一种
UpdateMemberController
调试模式:
豆:
private Integer mId;
private String mAccount;
private String mPassword;
private String mName;
private Date mDate;
private String mPhone;
private String mAddress;
private String mGender;
private String mEmail;
会员道:
public void setConnection(Connection conn);
public boolean checkAccount(String mAccount);
public int registerMember(MemberBean mb);
public MemberBean queryMember(String mAccount);
public MemberBean checkPassword(String mAccount, String mPassword);
public void updateMember(MemberBean mb);
道实现:
@Override
public void updateMember(MemberBean mb) {
String hql = "UPDATE MemberBean mb SET mb.mAccount =:mAccount , mb.mPassword =:mPassword WHERE mId =:mId";
Session session = factory.getCurrentSession();
session.createQuery(hql).setParameter("mAccount", mb.getmAccount()).setParameter("mPassword", mb.getmPassword())
.setParameter("mId", mb.getmId()).executeUpdate();
}
会员服务:
boolean accountCheck(String mAccount);
int registerMember(MemberBean mb);
MemberBean queryMember(String mAccount);
public MemberBean checkPassword(String mAccount, String mPassword);
void updateMember(MemberBean mb );
成员服务实现:
@Transactional
@Override
public void updateMember(MemberBean mb) {
if (mb.getmAccount() != null && mb.getmPassword() != null) {
dao.updateMember(mb);
}
}
解决方案
如果开发人员掌握了调试技能,就没有比这更大的挑战了。如果有什么对开发人员造成问题,他应该抓住它的脖子并解决它。
检查您连接的数据库的 hibernate.properties。如果您连接到不同的数据库,则可能会在那里进行更新。(如果step1没有问题)
直接跳转调试你的dao实现。(updateMember()方法)
- 确认 updateMember 方法是否被调用。(只需输入打印语句)
- 首先打印 mAccount、mPassword 和 mId
- 如果打印正确,则在 try catch 块中放入 create query 并执行 update,不要忘记在 catch 块中打印。
- 如果未捕获异常,则打印 executeUpdate 返回类型。
- 如果 executeUpdate 为零,则转到步骤 3。
第 3 步:为什么它没有更新到数据库。我在提交交易吗?
如果我依赖 spring 来管理事务(开始、提交/回滚)然后问自己我是否正确配置了它?
(即使我没有在 Spring 中处理 Transaction,让我猜猜你的问题)
Spring 容器是否使用 @Transactional 获取服务方法?
你的组件扫描基础包是什么?您的服务的包名称是什么?
您的服务类是否已扫描组件?
笔记:
在您的问题中添加必要的信息
添加 servlet-context.xml(在 xml 配置中)或等效的 java 配置文件
添加 root-context.xml(在 xml 配置中)或等效的 java 配置文件
过滤问题或删除不必要的信息
Bean(必需)
MemberDao(必填)
MemberService(必填)
MemberServeImpl(必填)
控制器(非必填)
jsp(非必填)
推荐阅读
- python - 在python中将垂直表格转换为水平表格(展平表格)
- octobercms - 如何更改rainlab.user::mail.invite 以获得激活链接
- python-3.x - Jupyter 的选项卡自动完成功能不适用于 sklearn、numpy、seaborn、pandas 和 matplotlib 等多个库
- keras - 在 Keras 中,在我自己的模型上使用 include_top= False 会删除所有最后一个密集层,我可以定义模型的“顶部”吗?
- asp.net - 无法让 ASP.NET/IIS 使用自定义缓存控制设置来提供 .js 文件
- laravel - Laravel 网站域名将转到 public/publc url
- django - django 具有相同外键的多个模型
- python - 使用 psycopg2 在 PostgreSQL 中使用密码创建用户时出错
- sql - 日期过滤器返回无效字符错误
- javascript - 为什么在这个 POST 请求中,then() 处理函数的参数用大括号括起来?