2022-1-20 MyBatis 主键回填&resultType

一、主键回填(2种)

插入后如何获取id??

id是主键自增的情况下,我们希望当时执行完成的时候拿到主键就需要利用主键回填的技术

方法一:
<insert> 中添加属性 useGeneratedKeys=“true” keyProperty=“id”
这样打印出的account的对象就带有id值了。

  <insert id="addAccount" parameterType="org.kk.mybatis02.model.Account" useGeneratedKeys="true" keyProperty="id">
        insert into account(username,money) value(#{username},#{money});
    </insert>
    @Test
    public void addAccount()
    {
        sqlSession=SqlSessionFactoryUtils.getInstance().openSession();
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        Account account=new Account();
        account.setUsername("zjx");
        account.setMoney(3000L);
        Integer insert = mapper.addAccount(account);
        System.out.println(insert);
        sqlSession.commit();
        System.out.println(account);
    }

在这里插入图片描述
方法二:
selectKey,在执行完insert语句后再执行自定义的sql语句(AFTER),也可以选择BEFORE

    <insert id="addAccount2" parameterType="org.kk.mybatis02.model.Account">
        <selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into account(username,money) value(#{username},#{money});
    </insert>

在这里插入图片描述

二、resultType

可以返回一个自定义的对象,也可以通过键值对返回查询出来的数据(HashMap)返回集合就写集合里面的类型

    <select id="getAllAccounts2" resultType="java.util.HashMap">
        select * from account;
    </select>
    @Test
    public void getAllAccounts2 ()//查询的结果是HashMap
    {
        sqlSession=SqlSessionFactoryUtils.getInstance().openSession();
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        List<HashMap<String, Object>> allAccounts2 = mapper.getAllAccounts2();

        System.out.println(allAccounts2);

    }

如果返回的数据类型比较复杂,则用resultMap

三、resultMap

解决数据库字段名和对象的属性名对不上的问题。

解决方法:定义resultMapper

    <resultMap id="AccountMap" type="org.kk.mybatis02.model.Account">
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="money" column="money"/>
    </resultMap>
    

column是对应的数据库字段名。

定义好以上的resultMap后,在crud的时候就可以写

    <select id="getAllAccounts" resultMap="AccountMap">
        select * from account;
    </select>

在这里插入图片描述
注意是resultMap!!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值