mybatis的insert语句

本文介绍在MyBatis中如何处理主键生成的问题,包括自增主键和UUID主键的设置方法,并提供了具体的代码示例。
部署运行你感兴趣的模型镜像

这里使用的Mapper接口的方式来处理

接口:

public interface EmpMapper {
    public void addEmp(Emp emp);
}

对应的mapper文件,注意这里的parameterType本来是要写完全限定名,但是由于做了别名,所以可以直接写emp

  <insert id="addEmp" parameterType="emp" >
  	insert into emp(empno,last_name,salary) 
  	values
  	(#{empno},#{lastName},#{salary})
  </insert>

test部分:

(由于是单独使用mybatis,没有使用spring,所以需要这样来创建工厂和session,如果调用openSession时参数为true,就会自动提交,不需要自己commit)

public class MybatisTest {
	SqlSessionFactory sqlSessionFactory;
	SqlSession sqlSession;
	@Before
	public void before() throws IOException{
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		sqlSession = sqlSessionFactory.openSession();
	}
        @Test
	public void testAddEmp(){
                EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
		Emp emp = new Emp(1,"Ash",1000);
		mapper.addEmp(emp);
		sqlSession.commit();
        }
}

如果面对主键一开始不知道的情况,怎么插入新纪录的同时又能获取到主键的值呢?

主键获取情况:

1.主键自增

2.主键为UUID

主键自增的情况:

接口:

public void addEmp(Emp emp);

mapper文件

useGeneratedKeys="true",是说明主键是自动生成的,默认为false。

keyProperty="empno",是说先生成主键,赋值给emp类中的empno属性,然后执行语句


<insert id="addEmp" parameterType="emp" useGeneratedKeys="true"
  keyProperty="empno">
  	insert into emp(empno,last_name,salary) 
  	values
  	(#{empno},#{lastName},#{salary})
</insert>


所以在调用的时候就不需要先给emp的empno赋值(而且也不能赋值,因为是自动生成的,赋值就会破坏规则)

test:

        @Test
	public void testAddEmp(){
                EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
		Emp emp = new Emp("Ash",1000);
		mapper.addEmp(emp);
		sqlSession.commit();
        }


主键为UUID的情况:

接口:

public void addEmp(Emp emp);


mapper文件:

由于主键不是自动递增,需要指定,所以使用selectKey

keyProperty="id",是指将获取到的值赋值给person类的id属性。

resultType="string",是指id属性的类型,由于mybatis中已经声明了基本属性的别名,所以String和string是一样的。

order="BEFORE",是指在执行insert语句之前执行selectKey中的语句,而mysql中获取UUID并去掉"-"的方法如下所示


  <insert id="addPerson" parameterType="person">
  	<selectKey keyProperty="id" resultType="string" order="BEFORE">
  		SELECT REPLACE(UUID(),'-','')
  	</selectKey>
  	insert person values(#{id},#{name})
  </insert>



test:


        @Test
	public void testAddPerson(){
                PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
		Person person = new Person("Ash");
		mapper.addPerson(person);
		sqlSession.commit();
        }


另外还有一点需要注意:

Integer Long Boolean都可以作为insert, delete, update的返回值

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值