Mybatis从入门到精通——selectKey标签(8)

一、selectKey标签作用

该标签是用来定义insert、update中主键生成的策略,在执行insert或update操作的之前或之后生成自定义主键。

 

二、selectKey标签属性

序号 属性名 说明
1
resultType
该查询返回主键的类型(一般是Integer或String)
2
keyProperty
接收返回主键的属性名
3
order
在update、insert操作之后或之后,取值为BEFORE、AFTER
4
databaseId
数据库标识,用于同一个操作但不同数据库执行不同sql。

三、案例

插入一条新数据,并且该数据的ID使用随机获取。

映射文件:

    <insert id="insert" parameterType="com.my.entity.Person" keyProperty="id" useGeneratedKeys="true">
        <!-- 随机产生ID -->
        <selectKey keyProperty="id" order="BEFORE" resultType="int">
            select round(RAND()*1000000)
        </selectKey>

        insert into person(id,name,sex,telephone,address,age) values(#{id},#{name},#{sex},#{telephone},#{address},#{age})
    </insert>

说明:selectKey标签需要写在insert、update的标签内,通过一个查询,把返回结果作为主键。

测试类:

public class MybatisTest {

    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() throws IOException {
        String resource = "mybatis-config.xml";
        //1.使用mybatis的工具读取配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //2.创建sqlSessionFactory
        sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        inputStream.close();
    }


    /**
     * 测试selectKey
     */
    @Test
    public void testSelectKey() {
        //3.获取sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.获取mapper接口实现类
        PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
        //5.调用方法
        Person person = new Person();
        person.setName("xuye");
        person.setAge(20);
        person.setTelephone("123465789");
        person.setSex("女");
        person.setAddress("美国");
        personMapper.insert(person);
        System.out.println(person.getId());
        //提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
    }

}

说明:最后输出结果主键是一个随机数。

三、补充说明

selectKey通过编写SQL然后把返回的结果作为主键,如Mybatis会自动产生主键,所以用自增主键的话则不需要设置,如果其它的数据库需要自定义主键,则可以通过该标签进行设置。

发布了61 篇原创文章 · 获赞 81 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/m0_37914588/article/details/104735745