关于mapper.xml中的一点问题

来源:4-10 业务场景实战之用户下单功能实现~解析响应数据

wonderq_ubuntu

2019-02-17 14:47

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

insertSelective

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

https://img4.mukewang.com/5c6903030001869e07140538.jpg

https://img.mukewang.com/5c69030c00012e7509080458.jpg

写回答 关注

5回答

  • 野生的程序猿一只
    2019-02-17 14:59:08
    已采纳

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

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

    本问题的答案:

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

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

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

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

    希望能给你增加一点理解


    wonder... 回复野生的程序猿...

    嗯嗯,明白了。多谢!

    2019-02-17 15:49:18

    共 3 条回复 >

  • Debug_SteadyJack
    2019-02-17 17:26:46

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

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

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

  • 野生的程序猿一只
    2019-02-17 15:36:44

    回复 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了解一下


    野生的程序猿... 回复wonder...

    添加注解就可以直接使用log对象,大括号占位符好像最多有两个参数,这些问题都不大

    2019-02-17 16:45:50

    共 2 条回复 >

  • 野生的程序猿一只
    2019-02-17 15:02:26
    <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>


    wonder... 回复野生的程序猿...

    原来你说的mybatis-plus 也是个依赖哈,懂了。。。。和lombok一样的。

    2019-02-17 15:51:44

    共 6 条回复 >

  • 野生的程序猿一只
    2019-02-17 15:01:27
    插入返回主键是这样写的
    <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>


2小时实战Apache顶级项目-RPC框架Dubbo分布式服务调度

快速入门并实战分布式任务调度框架Dubbo

20338 学习 · 145 问题

查看课程

相似问题