1. 程式人生 > >實訓-mybatis-經驗總結

實訓-mybatis-經驗總結

ima img pub bject util sele example ces 表示

技術分享圖片

    只要文件在有符號的src包下 ,就不必寫src 這節目錄
    //  假如我將mybatis-config.xml放到comm.icss.control包下,那麽我就得
    //  String config = "com/icss/control/mybatis-config.xml"; (省略src)
        
        String config = "mybatis-config.xml";
        //官網模板String resource = "org/mybatis/example/mybatis-config.xml";
        
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(config);
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        
        SqlSession openSession = sqlSessionFactory.openSession();
         Object oneUser = openSession.selectOne("getUserById", 1);
         System.out.println(oneUser);

2. 執行xml哪個SQL語句 並先知道它的id

技術分享圖片

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        
        SqlSession openSession = sqlSessionFactory.openSession();
         Object oneUser = openSession.selectOne("getUserById", 1);
             // Object oneUser = openSession.selectOne("com.icss.mapping.user.getUserById", 1);   這樣就更加精準了,更唯一了,因為如果只寫"getUserById",可能還有一個XML裏的SQL id也叫這個getUserById
         System.out.println(oneUser);

3. XML 裏SQL的 標簽 #{} 等於JDBC的占位符 ?

//resultType->查詢後返回的結果是什麽類型   , parameterType表示查詢是傳入的參數是什麽類型, 
<select id="getUserById"  resultType="com.icss.entity.User"  parameterType="int">
     select  *  from user where id=#{id}
   </select>  

//parameterType表示傳入占位符#{}的是User類型。   切記,#{pwd2}  , #{user2} 和實體類user的成員變量名字要相同,框架會幫你自動準確填入,不然你傳的user.id,user.pwd不知填到哪個占位符裏
    <update id="updateByUser" parameterType="com.icss.entity.User">
        UPDATE  user set user=#{user2},pwd=#{pwd2} where user=#{user2}
    </update>
    
    <insert id="insertByUser"  parameterType="com.icss.entity.User" >
        insert into user values(#{id},#{user2},#{pwd2},#{status},#{role})
    </insert>
    
    <delete id="deleteByid" parameterType="int">
        delete from user where id =#{id}
    </delete>

4.查詢返回的結果是集合的 情況

<!-- 因為要傳入兩個參數,但 parameterType只能寫一個東西的,所以寫map-->
  
    <select id="listByPage" resultMap="userlist" parameterType="map">
  //註意:這個占位符#{}是有講究的,#{index}, #{pagesize} 意味著,方法調用那邊也要起這個名字,框架才能準確對應起來  。具體請看下面圖片
        select * from user limit #{index},#{pagesize}
    </select>

//上面查詢語句有一個id,下面集合也要有一個id,各自有名字才能對應起來 。上面的resultMap填的就是下面的集合的id 名字

//type代表集合的成員類型

<resultMap  id="userlist" type="com.icss.entity.User">
// column對應的是mysql數據庫的那個列名
//property對應的是實體類User 裏的成員屬性名

        <result column="id"  property="id"/>
        <result column="user" property="user2"/>
        <result column="pwd" property="pwd2"/>
        <result column="status" property="status"/>
        <result column="role" property="role" />
    
    </resultMap>

技術分享圖片

工具類

package com.icss.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SQLSessionUtil {
    
      private static SqlSessionFactory  factory=null;
      // static
      static Reader read=null;
      
      static{
           String config="mybatis-config.xml";
           try {
             read= Resources.getResourceAsReader(config);
        } catch (IOException e) {
            e.printStackTrace();
        } 
      }
      
      /**
       * 
       * @return
       * 單例設計模式,只得到一個工廠對象
       */
      private static  SqlSessionFactory  getSqlSessionFacory(){
           if(factory==null){
               factory =new SqlSessionFactoryBuilder().build(read);
           }
            return factory;
      }
      
      
      /***
       *  封裝一個得到 SqlSession的對象
       *  
       */
      
      public  static  SqlSession getSqlSession(){
          return getSqlSessionFacory().openSession();
      }
    
    
}

整 體原理

技術分享圖片

實訓-mybatis-經驗總結