useGeneratedKeys和keyProperty是
1. useGeneratedKeys
2. keyProperty
keyProperty属性用于指定将生成的主键值赋值给Java对象的哪个属性;
在
生成的主键值会自动设置到指定的属性中,方便后续操作。
- <insert id="insert" useGeneratedKeys="true" keyProperty="id">
- INSERT INTO user (name, age) VALUES (#{name}, #{age})
- insert>
介绍
@Transactional注解是Spring框架中用于声明事务管理的注解,它的作用是告诉Spring容器该方法需要在事务管理下运行。当一个方法被@Transactional注解修饰时,Spring会在方法执行前开启一个事务,在方法执行后根据方法的执行情况决定是提交事务还是回滚事务。
作用
示例
- @Service
- public class UserService {
-
- @Autowired
- private UserRepository userRepository;
-
- @Transactional
- public void createUser(User user) {
- userRepository.save(user);
- }
- }
在上面的实例中,createUser方法被@Transactional注解修饰,表示该方法需要在事务管理下运行。如果userRepository.save(user)方法执行成功,则事务会被提交;如果执行过程出现异常,则事务会被回滚。

个人无法开通支付功能的解决:
此处参考:《苍穹外卖》电商实战项目实操笔记系列(P66~P122)【中】__166d96f876f45c7d07ce98952a96ec980368acfc-CSDN博客
步骤:
1. 在小程序用户端代码中,把pages/pay/index.js文件中下图所示的代码注释掉

2. 接着把原先注释掉的重定向代码取消注释,如下图

3. 在IDEA中后端代码中,把service/serviceImpl/OrderServiceImpl.java如下图的代码注释掉

4. 在OrderServiceImpl中,写入如下代码,用于设置参数
-
- /**
- * 订单支付
- *
- * @param ordersPaymentDTO
- * @return
- */
- public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) throws Exception {
- // 当前登录用户id
- Long userId = BaseContext.getCurrentId();
- User user = userMapper.getById(userId);
-
- //调用微信支付接口,生成预支付交易单
- /* JSONObject jsonObject = weChatPayUtil.pay(
- ordersPaymentDTO.getOrderNumber(), //商户订单号
- new BigDecimal(0.01), //支付金额,单位 元
- "苍穹外卖订单", //商品描述
- user.getOpenid() //微信用户的openid
- );
- if (jsonObject.getString("code") != null && jsonObject.getString("code").equals("ORDERPAID")) {
- throw new OrderBusinessException("该订单已支付");
- }*/
-
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("code", "ORDERPAID");
- OrderPaymentVO vo = jsonObject.toJavaObject(OrderPaymentVO.class);
- vo.setPackageStr(jsonObject.getString("package"));
- Integer OrderPaidStatus = Orders.PAID; // 支付状态,已支付
- Integer OrderStatus = Orders.TO_BE_CONFIRMED; // 订单状态,待接单
- LocalDateTime check_out_time = LocalDateTime.now(); // 更新支付时间
- orderMapper.updateStatus(OrderStatus, OrderPaidStatus, check_out_time, this.orders.getId());
-
- return vo;
- }
5. 在OrderMapper添加如下
- /**
- * 更新订单状态
- * @param orderStatus
- * @param orderPaidStatus
- * @param check_out_time
- * @param id
- */
- @Update("update orders set status = #{orderStatus}, pay_status = #{orderPaidStatus}, checkout_time = #{check_out_time} where id = #{id}")
- void updateStatus(Integer orderStatus, Integer orderPaidStatus, LocalDateTime check_out_time, Long id);
6. 在OrderServiceImpl定义全局变量orders

7. 在OrderServiceImpl的submitOrder方法中初始化orders变量,同时补充设置订单数据的几行代码,如下图

8. 结果

1. 测试临时域名的之前要先运行后端项目
网址:cpolar - secure introspectable tunnels to localhost
