一.新增用戶接口
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(); } } }