mybatis的insert语句

来源:互联网 发布:怎么禁止软件启动 编辑:程序博客网 时间:2024/05/21 17:56

这里使用的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;@Beforepublic void before() throws IOException{String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();}        @Testpublic 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:

        @Testpublic 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:


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


另外还有一点需要注意:

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

原创粉丝点击