Mybatis之主键的返回(6)

来源:互联网 发布:百度人工智能前景 编辑:程序博客网 时间:2024/06/05 18:51

一、自增主键的返回

Mysql自增主键,执行insert提交之前自动生成一个自增主键。
通过MySQL函数获取到刚刚插入记录的主键:
LAST_INSERT_ID()

在insert之后调用此函数。
1、修改User.xml中的代码
 <!-- 添加用户 parameterType:指定输入参数类型是pojo(包括用户信息) #{}中指定pojo的属性名,接收到pojo对象的属性值, mybatis也是通过OGNL获取对象的属性值  --> <insert id="insertUser" parameterType="cn.sunft.mybatis.po.User"> <!-- 将刚刚插入的主键返回,返回到user对象中  SELECT LAST_INSERT_ID():得到insert进去记录的主键值,只适用于自增主键 keyProperty:将查询到主键值设置到parameterType指定的对象的那个属性 order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序 resultType:指定结果的类型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into user(username, birthday, sex, address) value(#{username}, #{birthday}, #{sex}, #{address}) </insert>
2、修改Java类中的代码
/** * 添加用户信息 */@Testpublic void insertUserTest(){//mybatis配置文件String resource = "SqlMapConfig.xml";//得到配置文件,这种方式与路径耦合//InputStream inStream = Resources.getResourceAsStream(resource);//与路径解耦InputStream inStream = this.getClass().getClassLoader().getResourceAsStream(resource);//创建会话工厂SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(inStream);//创建工厂//通过工厂得到SqlSessionSqlSession sqlSession = factory.openSession();//插入用户对象User user = new User();user.setId(2);user.setUsername("王小军");user.setBirthday(new Date());user.setSex("1");user.setAddress("河南郑州");//通过SqlSession操作数据库sqlSession.insert("test.insertUser", user);sqlSession.commit();//获取用户信息主键System.out.println("主键:" + user.getId());//释放资源sqlSession.close();}

二、非自增主键的返回(使用UUID())

使用MYSQL的uuid()函数生成主键,需要修改表中的id字段类型为varchar,长度设置成35位。

执行思路:
先通过uuid()查询到主键,将主键输入到sql语句中。

执行uuid()语句顺序相对于insert()语句之前执行。

1、新增测试类并建立数据表
package cn.sunft.mybatis.po;public class Student {private String id;private String name;public Student() {super();}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
2、在User.xml中添加如下SQL配置信息
 <insert id="insertStudent" parameterType="cn.sunft.mybatis.po.Student"> <!--  使用MySQL的uuid()生成主键 执行过程: 首先通过uuid()得到主键,将主键设置到student对象的id字段中 其次在insert执行时,从user对象中取出id属性插入数据库 --> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT uuid() </selectKey> insert into student(id, name) value(#{id}, #{name}) </insert>
3、编写测试类进行测试
/** * 添加用户信息 */@Testpublic void insertStudentTest(){//mybatis配置文件String resource = "SqlMapConfig.xml";//得到配置文件,这种方式与路径耦合//InputStream inStream = Resources.getResourceAsStream(resource);//与路径解耦InputStream inStream = this.getClass().getClassLoader().getResourceAsStream(resource);//创建会话工厂SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(inStream);//创建工厂//通过工厂得到SqlSessionSqlSession sqlSession = factory.openSession();//插入学生对象Student student = new Student();student.setName("江东才");//通过SqlSession操作数据库sqlSession.insert("test.insertStudent", student);sqlSession.commit();//获取用户信息主键System.out.println("主键:" + student.getId());//释放资源sqlSession.close();}
通过Oracle序列生成主键:
 <insert id="insertStudent" parameterType="cn.sunft.mybatis.po.Student"> <!--  使用Oracle的序列生成主键 --> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT 序列名.nextVal() </selectKey> insert into student(id, name) value(#{id}, #{name}) </insert>
Mybatis获取返回的主键的另一种方式(未测试):
<!-- 插入语句,告诉mybatis将生成的主键返回到指定对象的id属性中 --><insert id="insert" useGeneratedKeys="true" keyProperty="id"   keyColumn="id" parameterType="com.sunft.bean.Command">  insert into CAMMAND(NAME,DESCRIPTION) values(#{name},#{description})</insert>





原创粉丝点击