本章学习Mysql基本映射--INSERT相关知识点。insert的用法比select要简单不少。mysql
本系列文章是基于Mybatis 3.4.6 版本,数据库使用的是Mysql 5.7。git
insert标签经常使用属性:github
此是插入数据最简单的用法,在上一章的基础上,须要编写mapper配置文件和mapper接口。sql
代码以下:数据库
<!-- insert标签最小配置 --> <insert id="insert"> INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate}) </insert>
接口代码以下:缓存
// 返回值int为插入数据的行数 public int insert(SysUser sysUser) throws Exception ;
测试用户代码以下:mybatis
@Test public void testInsert(){ // 得到sqlSession SqlSession sqlSession = getSqlSession(); try{ // 获取Mapper接口 SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class); SysUser user = new SysUser(); user.setUserAccount("admin"); user.setUserPassword("123"); user.setCreatedDate(new Date()); // 插入的条数 int count = sysUserMapper.insert(user); // 提交事务,数据存入数据库 sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); }finally { sqlSession.close(); } }
根据上面对INSERT标签属性的学习知道,若是要返回数据库自增的主键,可经过设置useGeneratedKeys和keyProperty以及keyCulomn(返回多个时需指定字段顺序)。oracle
代码以下:app
<!-- 配置useGeneratedKeys=true,keyProperty="属性名" parameterType属性不是必须的,再次只是掩饰下它的用法,使用时按这样用就好了 --> <insert id="insertAndResultAutoId" parameterType="com.github.dalianghe.model.SysUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate}) </insert>
接口代码以下:学习
// 返回值int仍然为插入影响的行数,数据库内部自增id值被封装到参数对象中 public int insertAndResultAutoId(SysUser sysUser) throws Exception;
测试用户代码以下:
@Test public void testInsertAndResultAutoId(){ // 得到sqlSession SqlSession sqlSession = getSqlSession(); try{ // 获取Mapper接口 SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class); SysUser user = new SysUser(); user.setUserAccount("admin"); user.setUserPassword("123"); user.setCreatedDate(new Date()); // 插入前,id为空 System.out.println(user.getId()); // 插入的条数 int count = sysUserMapper.insertAndResultAutoId(user); // 插入后,id的值为新插入数据的数据库自增id值 System.out.println(user.getId()); // 提交事务,数据存入数据库 sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); }finally { sqlSession.close(); } }
对于一些数据库不支持自增ID,好比Oracle数据库使用的序列,而后赋值给id字段,再执行数据库插入操做,此状况的实现以下:
代码以下:
<!-- --> <insert id="insertAndSelectKey"> <!-- 使用selectKey子标签返回数据生成的主键 keyColumn、keyProperty与自增主键中含义同样,resultType是返回的数据类型 order的值与数据库有关,mysql使用AFTER,oracle使用BEFORE --> <selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate}) </insert>
接口代码以下:
// 返回值int仍然为插入影响的行数,数据库内部自增id值被封装到参数对象中 public int insertAndSelectKey(SysUser sysUser) throws Exception;
测试用户代码以下:
@Test public void testInsertAndSelectKey(){ // 得到sqlSession SqlSession sqlSession = getSqlSession(); try{ // 获取Mapper接口 SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class); SysUser user = new SysUser(); user.setUserAccount("admin"); user.setUserPassword("123"); user.setCreatedDate(new Date()); // 插入前,id为空 System.out.println(user.getId()); // 插入影响的条数 int count = sysUserMapper.insertAndSelectKey(user); // 插入后,id的值为新插入数据的数据库自增id值 System.out.println(user.getId()); // 提交事务,数据存入数据库 sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); }finally { sqlSession.close(); } }
此部份内容将在动态SQL中进行学习。
本节学习了mybatis的基本的insert的用法,但愿对你们有帮助。
最后建立了qq群方便你们交流,可扫描加入,同时也可加我qq:276420284,共同窗习、共同进步,谢谢!