Mybatis之主键的返回(6)

一、自增主键的返回

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

在insert之后调用此函数。
1、修改User.xml中的代码
	 
	 
	 	
	 	
	 		SELECT LAST_INSERT_ID()
	 	
	 	insert into user(username, birthday, sex, address)
	 	value(#{username}, #{birthday}, #{sex}, #{address})
	 
2、修改Java类中的代码
	/**
	 * 添加用户信息
	 */
	@Test
	public 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);//创建工厂
		
		//通过工厂得到SqlSession
		SqlSession 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配置信息
	 
	 	
	 	
	 		SELECT uuid()
	 	
	 	insert into student(id, name) value(#{id}, #{name})
	 
3、编写测试类进行测试
	/**
	 * 添加用户信息
	 */
	@Test
	public 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);//创建工厂
		
		//通过工厂得到SqlSession
		SqlSession 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序列生成主键:
	 
	 	
	 	
	 		SELECT 序列名.nextVal()
	 	
	 	insert into student(id, name) value(#{id}, #{name})
	 
Mybatis获取返回的主键的另一种方式(未测试):


  	insert into CAMMAND(NAME,DESCRIPTION) values(#{name},#{description})






你可能感兴趣的:(Mybatis,MyBatis)