出现这样的事情是什么?
debug页面:
代码:
public void add(EmployeeDTO employeeDTO) {
Employee employee = new Employee();
//密码默认123456
employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
//设定创建时间和修改时间
employee.setCreateTime(LocalDateTime.now());
employee.setUpdateTime(LocalDateTime.now());
employeeMapper.add(employee);
}
你的add方法中,就是创建一个新的Employee且只给它设置了3个值,它们与EmployeeDTO没有关系,是两个不同的对象。
对于两个对象中同名且类型相同的变量,可以使用org.springframework.beans.BeanUtils.copyProperties()方法,也可以使用其它类似的工具类,如apache-commons。
你不是没有把你employeeDTO的值放进employee 对象里边么,要么你就一个一个往employee里边set employeeDTO里边的值,要么就使用
BeanUtils.copyProperties(employeeDTO,employee ); 把共同属性的值一下复制进去
你在这个函数里面只set了密码和创建时间、更新时间、所以其他属性是null(除非你在constructor函数中设置了默认值), 而且密码用了加密函数,所以不是显示明文123456
有用的话麻烦点个采纳哦 谢谢啦
Employee employee = new Employee();
在这一行下面添加,需要将employeeDTO的属性赋值给employee,这个操作也就是常见的对象convert
employee.setUsername(employeeDTO.getUsername());
employee.setSex(employeeDTO.getSex());
...
悲观锁是在对数据被的修改持悲观态度,在整个数据处理过程中会将数据锁定。
悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在应用层中实现了加锁机制,也无法保证外部系统不会修改数据)。
通常会使用select … for update语句来实现对数据的枷锁。
for update仅适用于InnoDB,且必须在事务块(BEGIN/COMMIT)中才能生效。在进行事务操作时,通过“for update”语句,MySQL会对查询结果集中每行数据都添加排他锁,其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。
如下示例展示了悲观锁的基本使用流程:
set autocommit=0;
//设置完autocommit后,执行正常业务。具体如下:
//0.开始事务
begin;/begin work;/start transaction; (三者选一就可以)
//1.查询出商品信息
select status from t_goods where id=1 for update;
//2.根据商品信息生成订单
insert into t_orders (id,goods_id) values (null,1);
//3.修改商品status为2
update t_goods set status=2;
//4.提交事务
commit;/commit work;
因为关闭了数据库自动提交,这里通过begin/commit来管理事务。
使用select…for update的方式通过数据库实现了悲观锁。其中,id为1的那条数据就被锁定,其它的事务必须等本次事务提交之后才能执行。这样就保证了在操作期间数据不会被其它事务修改。