为了账号安全,请及时绑定邮箱和手机立即绑定

关于mapper.xml中的一点问题

为什么在 mapper java文件中的这些方法,例如updateByPrimaryKeySelective,

insertSelective

在  sql  的 xml 中并没有返回主键id,请问但是缺能接收到,请问是如何做到的?或者说哪里实现的?谢谢老师,这是我能够提问的最后连个积分了,剩下还有问题我都放到评论区里面了,希望老师能够回答下,不吝赐教。谢谢!

https://img1.sycdn.imooc.com//5c6903030001869e07140538.jpg

https://img1.sycdn.imooc.com//5c69030c00012e7509080458.jpg

正在回答

5 回答

为啥log.info("code={} msg={} data={} ",code,msg,data); 这句话输出没有一个 {} 花括号

别放在评论,不然其他想告诉你的不方便,在这个花括号是占位符,输出是,后面的参数依次替换前面的花括号,我用的logback好像最多只能有两个花括号(原谅我答非所问)

本问题的答案:

这个问题问的比较深,我回答不了

但是还是想跟你说下,方法的返回值跟主键没有关系,增删改返回值是影响的数据库操作的条数数据,具体实现我解释不了;

插入返回主键的id在插入数据的实体类中,不是方法的返回值,实现SQL是

SELECT @@IDENTITY ,框架具体实现我也解释不了

希望能给你增加一点理解


0 回复 有任何疑惑可以回复我~
#1

wonderq_ubuntu 提问者

感谢,首先提问需要积分啊,我没积分了,每天第一个提问是免费的,第二个就要收费。。 然后,如果按照你说的, 花括号是占位符的话,那么为什么 log.info("响应结果:{} ",res); 这句就能打出{} 来。 其次,因为调用的是mapper,面向接口啊,调用的方法返回了int类型,按照以往,sql.xml 是需要resultMap或者resultType来接受sql的select结果的。
2019-02-17 回复 有任何疑惑可以回复我~
#2

野生的程序猿一只 回复 wonderq_ubuntu 提问者

关于提问我误会你了,我错了 调用方法返回int是增删改的默认返回值,返回值表示此次操作影响了几条数据,比如插入一般返回1(因为增加了一条),也可以一次增加多条,删除语句输出了几条就返回几,影响的数据,更新操作也一样,记住,增删改默认返回int,你接口也可以写返回void,SQL.xml默认可以不写resultMap或者resultType,好像也可以写resultType=int,你试试,自定义返回值类型是查询,只有查询
2019-02-17 回复 有任何疑惑可以回复我~
#3

wonderq_ubuntu 提问者 回复 野生的程序猿一只

嗯嗯,明白了。多谢!
2019-02-17 回复 有任何疑惑可以回复我~

1、insertxxxx调用 会返回主键是因为 .xml 里面配置了这个:useGeneratedKeys="true" keyColumn="id"

2、但是要获取主键,需要调用时这样做:对象.insertxxx()之后,

对象.getId() 就是返回的主键;而 对象.insertxxx() 的返回值是操作数据库后受影响的行数!

3 回复 有任何疑惑可以回复我~

回复 wonderq_ubuntu:log.info("响应结果:{} ",res);

原因可能是日志jar包要导入有问题:

<!--属性-->

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

            <version>1.18.4</version>

        </dependency>


        <!--日志-->

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>slf4j-api</artifactId>

            <version>1.7.25</version>

        </dependency>

        <dependency>

            <groupId>ch.qos.logback</groupId>

            <artifactId>logback-core</artifactId>

            <version>1.2.3</version>

        </dependency>

        <dependency>

            <groupId>ch.qos.logback</groupId>

            <artifactId>logback-classic</artifactId>

            <version>1.2.3</version>

            <exclusions>

                <exclusion>

                    <artifactId>slf4j-api</artifactId>

                    <groupId>org.slf4j</groupId>

                </exclusion>

            </exclusions>

        </dependency>

在类上使用注解:@Slf4j

就可以使用log对象了,你试试

lombok了解一下


0 回复 有任何疑惑可以回复我~
#1

wonderq_ubuntu 提问者

谢谢,lombok 了解一点,一般都是用@data和@tostring的。@slf4j 的情况下次我试试。
2019-02-17 回复 有任何疑惑可以回复我~
#2

野生的程序猿一只 回复 wonderq_ubuntu 提问者

添加注解就可以直接使用log对象,大括号占位符好像最多有两个参数,这些问题都不大
2019-02-17 回复 有任何疑惑可以回复我~
<insert id="add"
        useGeneratedKeys="true" keyColumn="id" keyProperty="id"
        parameterType="user">
    INSERT INTO `user` (`name`,sex,register_ts) VALUES (#{name},#{sex},#{registerTs})   
     <selectKey resultType="int" keyProperty="id" order="AFTER">
        SELECT LAST_INSERT_ID()    </selectKey>
</insert>


0 回复 有任何疑惑可以回复我~
#1

wonderq_ubuntu 提问者

感觉老师的这个,没有用这个 LAST_INSERT_ID() 为什么能拿到 id ?
2019-02-17 回复 有任何疑惑可以回复我~
#2

野生的程序猿一只 回复 wonderq_ubuntu 提问者

这颗我没看几节,看了再跟你说,没有用到还有一种情况用到了插件,mybatis-plus自动封装返回了,不知道老师用到什么插件,mybatis-plus插件非常好用
2019-02-17 回复 有任何疑惑可以回复我~
#3

野生的程序猿一只 回复 wonderq_ubuntu 提问者

推荐你用mybatis-plus
2019-02-17 回复 有任何疑惑可以回复我~
#4

wonderq_ubuntu 提问者 回复 野生的程序猿一只

好的,不过,本地用插件,上生产呢?
2019-02-17 回复 有任何疑惑可以回复我~
#5

wonderq_ubuntu 提问者 回复 野生的程序猿一只

那等你看完了再告诉我真相哈,
2019-02-17 回复 有任何疑惑可以回复我~
#6

wonderq_ubuntu 提问者 回复 野生的程序猿一只

原来你说的mybatis-plus 也是个依赖哈,懂了。。。。和lombok一样的。
2019-02-17 回复 有任何疑惑可以回复我~
查看3条回复
插入返回主键是这样写的
<insert id="add"
        useGeneratedKeys="true" keyColumn="id" keyProperty="id"
        parameterType="user">
    INSERT INTO `user` (`name`,sex,register_ts) VALUES (#{name},#{sex},#{registerTs})    <selectKey resultType="int" keyProperty="id" order="AFTER">
        SELECT LAST_INSERT_ID()    </selectKey>
</insert>


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于mapper.xml中的一点问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信