Mybatis传值不进数据库

"在Java后端开发中,遇到一个问题:在使用MyBatis存储前端传入的数据时,发现Mapper层的SQL执行失败。经过排查,是因为bean中的字段名`type`与SQL关键字`type`冲突导致的。解决方案是避免使用与SQL关键字相同的名字,或者在字段上使用@TableField注解添加反双引号包裹字段名,如`@TableField("`type`")`,这样可以正确存入数据库。"

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

将前端输入的数据存入数据库


问题描述:

在service层中输出将要存入数据库的数据是好的,但就是在Mapper里面不执行。将代码放入mysql中执行,发现type字段名自动变成大写,入库成功,说明sql语句时没有问题的,根据type字段的自动变化,推测和关键字有关。


原因分析:

因为mybatis中字段名与关键字相同,自己的bean中有变量名:type,sql语言中有关键字type,所以不能执行


解决方案:

(1)更换变量名,尽量不要使用与关键字相同的变量名
(2)字段上添加反双引号

@TableField("`type`")
    private int type;
### MyBatis插入对象时的递 在 MyBatis 中,当执行插入操作并递 Java 对象作为参数时,通常通过映射文件中的 SQL 语句访问该对象属性。为了确保顺利地将对象的数据写入数据库表中,需遵循特定的方式定义 Mapper XML 文件以及相应的实体类。 #### 实体类设计 对于要被持久化的每一个业务实体都应该创建一个对应的 POJO 类(Plain Old Java Object),它代表了数据库里的一条记录。假设有一个 `User` 表及其关联的对象: ```java public class User { private Integer id; private String name; private int age; // Getters and Setters... } ``` 注意这里使用的是包装类型的 `Integer` 和 `int` 来代替原始类型以防止可能出现的空指针异常[^3]。 #### Mapper 接口声明 接着,在接口中定义用于插入的方法签名,此方法接受上述构建好的对象实例作为输入参数: ```java public interface UserMapper { void insertUser(User user); } ``` #### 映射配置编写 最后一步是在与之匹配的 XML 配置文档内指定具体的 SQL 文本,并利用 `${}` 或者 `#{}` 占位符来引用入对象里的各个成员变量。推荐采用更安全可靠的后者形式预防 SQL 注入攻击风险: ```xml <insert id="insertUser" parameterType="com.example.User"> INSERT INTO users (name, age) VALUES (#{name}, #{age}) </insert> ``` 如果希望获取到新插入行所分配给它的唯一标识符,则可以在 `<insert>` 标签下加入额外设置告知框架去调用 JDBC 的 `getGeneratedKeys()` 方法从而返回这个 ID [^2]: ```xml <insert id="insertUser" useGeneratedKeys="true" keyProperty="id" parameterType="com.example.User"> INSERT INTO users (name, age) VALUES (#{name}, #{age}) </insert> ``` 以上就是关于如何在 MyBatis 中实现向数据库插入一条完整的记录的同时正确处理好各字段间对应关系的一个简单介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值