如何使用 Spring 事务管理将当前用户更新到数据库?
How to use Spring transactional management to update current user to database?
例如:
登录用户是 [test2],我想更新 mAccount
和 mPassword
.
如何获取登录会话并单击 jsp 表单进行更新?
(mId
为主键)
我该怎么办?
当我点击提交更新 SQL 数据库时,mAccount
和 mPassword
没有更新。
我想我的控制器在获取登录会话时一定有问题,所以我无法更新我想要的内容。我一次又一次地点击,但 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);
}
}
如果掌握调试技能,对开发人员来说没有比这更大的挑战了。如果有任何事情给开发者带来问题,他应该抓住它的脖子并解决它。
检查 hibernate.properties 您连接的是哪个数据库。如果您连接到不同的数据库,更新可能会在那里发生。
(如果step1没有问题)
直接跳转到调试你的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)
例如:
登录用户是 [test2],我想更新 mAccount
和 mPassword
.
如何获取登录会话并单击 jsp 表单进行更新?
(mId
为主键)
我该怎么办?
当我点击提交更新 SQL 数据库时,mAccount
和 mPassword
没有更新。
我想我的控制器在获取登录会话时一定有问题,所以我无法更新我想要的内容。我一次又一次地点击,但 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);
}
}
如果掌握调试技能,对开发人员来说没有比这更大的挑战了。如果有任何事情给开发者带来问题,他应该抓住它的脖子并解决它。
检查 hibernate.properties 您连接的是哪个数据库。如果您连接到不同的数据库,更新可能会在那里发生。 (如果step1没有问题)
直接跳转到调试你的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)