3.insert添加用法


一.新增用戶接口

UserMapper.java
package tk.mybatis.simple.mapper;

import org.apache.ibatis.annotations.Param;
import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser;

import java.util.List;

/**
 * @author weihu
 * @date 2018/8/3/003 0:01
 */
public interface UserMapper {
 
    /**
     * 新增用戶
     */
    int insertUser(SysUser sysUser);

}

 

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--sql語句映射文件-->

<!--因為已經配置了別名,所以resultType可以直接寫類名,沒有配置的話就要寫類全名-->
<mapper namespace="tk.mybatis.simple.mapper.UserMapper">

    <!--添加用戶,不需要返回值類型-->
    <insert id="insertUser" parameterType="tk.mybatis.simple.model.SysUser">
        INSERT INTO sys_user (
            id,
            user_name,
            user_password ,
            user_email,
            user_info,
            head_img,
            create_time)
        VALUES
            (#{id},#{userName},#{userPassword},#{userEmail},#{userInfo},#{headImg,jdbcType=BLOB},#{createTime,jdbcType=TIMESTAMP})
    </insert>

    
</mapper>

   id:命名空間唯一標識符,可用來代表這條語句。

parameterType:即將傳入的語句參數的完全限定類名或別名。這個屬性是可選的,因為MyBatis可以推斷出出入語句的具體參數,因此不建議配置該屬性。
jdbcType:為了防止類型錯誤,對於一些特殊的數據類型,建議指定具體的jdbcType值。


UserMapperTest.java
package tk.mybatis.simple.mapper;

import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Test;
import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser;

import java.util.Date;
import java.util.List;

/**
 * @author weihu
 * @date 2018/8/5/005 9:34
 * @desc
 */
public class UserMapperTest extends BaseMapperTest {


    /**
     * 插入用戶
     */
    @Test
    public void insertUserTest(){
        SqlSession sqlSession = getSqlSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            //創建一個user對象
            SysUser sysUser=new SysUser();
            sysUser.setId(4L);
            sysUser.setUserName("huge");
            sysUser.setUserPassword("8888888");
            sysUser.setUserEmail("1210740934@qq.com");
            sysUser.setUserInfo("測試用戶");
            sysUser.setHeadImg(new byte[]{1,2,3});
        /*
            插入的時間格式
            sysUser.setCreateTime("2018-08-05 17:00:58");插入這種的時間格式是不正確的
         */
            sysUser.setCreateTime(new Date());
            int result = userMapper.insertUser(sysUser);
            System.out.println("插入1條數據"+result);
            //注意一定要commit(),不提交的話數據是插入不到數據庫中的
 sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //數據插入不成功進行回滾
 sqlSession.rollback();
        } finally {
            //關閉sqlSession
            sqlSession.close();
        }
    }

   
}

 

二、返回主鍵自增的值

UserMapper.java
package tk.mybatis.simple.mapper;

import org.apache.ibatis.annotations.Param;
import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser;

import java.util.List;

/**
 * @author weihu
 * @date 2018/8/3/003 0:01
 */
public interface UserMapper {
   
    /**
     * 獲取主鍵自增Id
     */
    int insertPrimaryKey(SysUser sysUser);

  
}

 

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--sql語句映射文件-->

<!--因為已經配置了別名,所以resultType可以直接寫類名,沒有配置的話就要寫類全名-->
<mapper namespace="tk.mybatis.simple.mapper.UserMapper">

    <insert id="insertPrimaryKey" parameterType="tk.mybatis.simple.model.SysUser" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO sys_user (
            user_name,
            user_password ,
            user_email,
            user_info,
            head_img,
            create_time)
        VALUES
            (#{userName},#{userPassword},#{userEmail},#{userInfo},#{headImg,jdbcType=BLOB},#{createTime,jdbcType=TIMESTAMP})
    </insert>

</mapper>

UserMapperTest.java
package tk.mybatis.simple.mapper;

import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Test;
import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser;

import java.util.Date;
import java.util.List;

/**
 * @author weihu
 * @date 2018/8/5/005 9:34
 * @desc
 */
public class UserMapperTest extends BaseMapperTest {



    @Test
    public void insertGetPrimayKey(){
        SqlSession sqlSession = getSqlSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            //創建一個user對象
            SysUser sysUser=new SysUser();
            sysUser.setUserName("huge2");
            sysUser.setUserPassword("88888886");
            sysUser.setUserEmail("1210740934@qq.com");
            sysUser.setUserInfo("測試用戶");
            sysUser.setHeadImg(new byte[]{1,2,3});
            int result=userMapper.insertPrimaryKey(sysUser);
            sqlSession.commit();
       //自動獲取id System.
out.println(sysUser.getId()); } catch (Exception e) { //數據插入不成功進行回滾 sqlSession.rollback(); e.printStackTrace(); } finally { //關閉sqlSession sqlSession.close(); } } }

 

三、使用selectKey返回主鍵的值

UserMapper.java
package tk.mybatis.simple.mapper;

import org.apache.ibatis.annotations.Param;
import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser;

import java.util.List;

/**
 * @author weihu
 * @date 2018/8/3/003 0:01
 */
public interface UserMapper {
  

    /**
     * 獲取主鍵,主鍵自增和非自增主鍵都可以獲取
     */
    int insertAnyPrimaryKey(SysUser sysUser);
}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--sql語句映射文件-->

<!--因為已經配置了別名,所以resultType可以直接寫類名,沒有配置的話就要寫類全名-->
<mapper namespace="tk.mybatis.simple.mapper.UserMapper">

    <insert id="insertAnyPrimaryKey" parameterType="tk.mybatis.simple.model.SysUser">
        INSERT INTO sys_user (
            user_name,
            user_password ,
            user_email,
            user_info,
            head_img,
            create_time)
        VALUES
            (#{userName},#{userPassword},#{userEmail},#{userInfo},#{headImg,jdbcType=BLOB},#{createTime,jdbcType=TIMESTAMP})
        <selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey>
    </insert>
</mapper>

  order屬性設置和使用的數據庫有關,msyql用AFTER,Oracle用BEFORE

SELECT LAST_INSERT_ID()用於獲取數據庫中最后插入的數據的ID值。

 

UserMapperTest.java
package tk.mybatis.simple.mapper;

import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Test;
import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser;

import java.util.Date;
import java.util.List;

/**
 * @author weihu
 * @date 2018/8/5/005 9:34
 * @desc
 */
public class UserMapperTest extends BaseMapperTest {

    @Test
    public void insertAnyPrimaryKey(){
        SqlSession sqlSession = getSqlSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            //創建一個user對象
            SysUser sysUser=new SysUser();
            sysUser.setUserName("huge2");
            sysUser.setUserPassword("88888886");
            sysUser.setUserEmail("1210740934@qq.com");
            sysUser.setUserInfo("測試用戶");
            sysUser.setHeadImg(new byte[]{1,2,3});
            int result=userMapper.insertAnyPrimaryKey(sysUser);
            sqlSession.commit(); System.out.println(sysUser.getId());
        } catch (Exception e) {
            //數據插入不成功進行回滾
            sqlSession.rollback();
            e.printStackTrace();
        } finally {
            //關閉sqlSession
            sqlSession.close();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM