1. 程式人生 > 實用技巧 >mybatis-sql對映檔案

mybatis-sql對映檔案

一、增刪改查

  • 引數型別parameterType可以省略,個人認為如果寫入的話能讓開發者更清楚對應的是哪個JavaBean類或者哪種資料結構。
  • mybatis允許增刪改的方法直接定義返回值為Integer、Long、Boolean、void這些型別的,mybatis會自動幫我們封裝返回值
  • sqlSessionFactory.openSession(),獲取到的SqlSession不會自動提交資料,我們需要手動提交資料;sqlSessionFactory.openSession(true);===》自動提交

對映插入語句

  • 自增主鍵新增
mysql支援自增主鍵
  useGeneratedKeys
="true"
;使用自增主鍵獲取主鍵值策略   keyProperty="id";指定對應的主鍵屬性;

mybatis利用statement.getGenreatedKeys()獲取到自增主鍵值後,將這個值封裝給javaBean的哪個屬性;不定義的話物件是獲取不到id值的

    <insert id="addEmp" parameterType="com.mybatis.bean.Employee"
        useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
        insert into tbl_employee(last_name,email,gender) 
        values(#{lastName},#{email},#{gender})
    
</insert>
  • 非自增主鍵新增

Oracle不支援自增,Oracle使用序列來模擬自增,每次插入的資料的主鍵是從序列中拿到的值;
  keyProperty:查出的主鍵值封裝給javaBean的哪個屬性
order="BEFORE":先執行selectKey查詢id的sql;查出id值封裝給javaBean的id屬性
     resultType:查出的資料的返回值型別
    <insert id="addEmp" databaseId="oracle">
        <selectKey keyProperty="id" order="
BEFORE" resultType="Integer"> select EMPLOYEES_SEQ.nextval from dual </selectKey> insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL) values(#{id},#{lastName},#{email<!-- ,jdbcType=NULL -->}) </insert>
  order="AFTER":先執行插入的sql(從序列中取出新值作為id);再執行selectKey查詢id的sql;
 <insert id="addEmp" databaseId="oracle">
        <selectKey keyProperty="id" order="AFTER" resultType="Integer">
         select EMPLOYEES_SEQ.currval from dual
        </selectKey>
       
        insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL) 
        values(employees_seq.nextval,#{lastName},#{email}) 
    </insert>

對映刪除語句

<delete id="deleteEmpById">
    delete from tbl_employee where id=#{id}
</delete>

對映更新語句

<update id="updateEmp">
        update tbl_employee 
        set last_name=#{lastName},email=#{email},gender=#{gender}
        where id=#{id}
</update>

對映查詢語句

<select id="getEmpById" resultType="com.mybatis.bean.Employee">
        select * from tbl_employee where id = #{id}
</select>

程式碼

@Test
    public void test03() throws IOException{
        
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        //獲取到的SqlSession不會自動提交資料
        SqlSession openSession = sqlSessionFactory.openSession();
        
        try{
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            //測試新增
            Employee employee = new Employee(null, "jerry4",null, "1");
            mapper.addEmp(employee);
            System.out.println(employee.getId());
            
            //測試修改
            //Employee employee = new Employee(1, "Tom", "jerry@com", "0");
            //boolean updateEmp = mapper.updateEmp(employee);
            //System.out.println(updateEmp);
            //測試刪除
            //mapper.deleteEmpById(2);
            //手動提交資料
            openSession.commit();
        }finally{
            openSession.close();
        }