一、主键回填(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!!!