如何使用 Spring 事务管理将当前用户更新到数据库?

How to use Spring transactional management to update current user to database?

例如: 登录用户是 [test2],我想更新 mAccountmPassword.
如何获取登录会话并单击 jsp 表单进行更新?

mId 为主键)

我该怎么办?

当我点击提交更新 SQL 数据库时,mAccountmPassword 没有更新。

我想我的控制器在获取登录会话时一定有问题,所以我无法更新我想要的内容。我一次又一次地点击,但 SQL 数据库仍然没有任何变化,控制器没有将 test2 对象获取到 update.how 来修复控制器让我很困惑,anxious.this 问题花了我 1 周 ...

SQL Member 数据库:

Edit: Was same image as above, likely missing the intended one UpdateMemberController debug mode:

豆子:

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;

MemberDao:

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);

DaoImpl:

@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 );

MemberSeriveImpl:

@Transactional
@Override
public void updateMember(MemberBean mb) {
    if (mb.getmAccount() != null && mb.getmPassword() != null) {
        dao.updateMember(mb);
    }
}

如果掌握调试技能,对开发人员来说没有比这更大的挑战了。如果有任何事情给开发者带来问题,他应该抓住它的脖子并解决它。

  1. 检查 hibernate.properties 您连接的是哪个数据库。如果您连接到不同的数据库,更新可能会在那里发生。 (如果step1没有问题)

  2. 直接跳转到调试你的dao实现(updateMember()方法)

    • 确认 updateMember 方法是否被调用。(只需输入打印语句)
    • 首先打印 mAccount、mPassword 和 mId
    • 如果打印正确,则将创建查询和执行更新放在 try catch 块中,不要忘记在 catch 块中打印。
    • 如果未捕获到异常,则打印 executeUpdate return 类型。
    • 如果 executeUpdate 为零,则转到步骤 3。

第 3 步:为什么它没有更新到数据库。我在提交交易吗?
如果我依赖 spring 来管理事务(开始,commit/rollback),那么问问自己我是否正确配置了它?
(即使我还没有在 spring 中处理事务让我猜猜你的问题)
spring 容器是否使用@Transactional 获取服务方法?
你的组件扫描基础包是什么?你们服务的包名是什么?
您的服务 class 是否已扫描组件?

注:

Add necessary information in your question
Add servlet-context.xml(in xml configuration) or equivalent java configuration file
Add root-context.xml (in xml configuration) or equivalent java configuration file

Filter question or remove unnecessary information
Bean(required)
MemberDao(required)
MemberService(required)
MemberSeriveImpl(required)
controller(Not required)
jsp(not required)