Mybatis的基本使用方法


1.導入mybatis的jar包mybatis-x.x.x.jar

2.使用XML配置mybatis,創建SqlSessionFactory

  XML配置文件的名稱通常為mybatis-config.xml,內容基本格式如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
        <property name="username" value="username"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    <!-- <package name="com.example.manager.mapper"/> -->
  </mappers>
</configuration>

  該配置文件使用文件流的形式讀入,通過mybatis的工具類Resources加載資源文件:

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

3.從 SqlSessionFactory 中獲取 SqlSession

SqlSession session = sqlSessionFactory.openSession();
try {
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
  session.close();
}

4.最簡單的使用方法:mybatis-config.xml + mapper.xml + test.java

mybatis-config.xml配置

<mapper resource="org/mybatis/example/BlogMapper.xml"/>

resource的路徑通常為包路徑,眾多mapper.xml通常被放置在一個包下

------------------------------------

mapper.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">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Map">
    select * from Blog where id = #{id}
  </select>
</mapper>
namespace:命名空間,映射查詢的關鍵參數
id:調用方法定義
resultType:結果集對象類型(Map可以被HashMap接收,然后轉為json,也可以自定義類型)
傳遞參數:參數替換分兩種:#{id} => 預處理語句的? || '${id}' => 直接替換為變量
-----------------------------------
test.java
public static void main(String[] args) {
    SqlSessionFactory sqlSessionFactory;
    SqlSession session = null;
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        session = sqlSessionFactory.openSession();
        HashMap<String,String> result = session.selectOne("selectBlog", 110);
        System.out.println("Result: "+result);
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if(session != null){
            session.close();
        }
    }
}

session.selectOne是session自帶方法(selectList可以獲取多條數據),傳入的第一個字符串就是之前定義的id,第二個參數是傳入的參數(多個參數可以使用一個HashMap來傳參)。

5.簡單抽象方法:mybatis-config.xml + mapper.xml + interface.java + test.java

mybatis-config.xml

<package name="com.mybatis.manager.mapper"/>

mapper.xml

<mapper namespace="com.mybatis.manager.mapper.ReleaseDTOMapper">
  <select id="getReleaseNote" parameterType="map" resultType="map">
    SELECT rn.* FROM GPCM_RELEASE_NOTE rn where rn.state = #{STATE} and rn.upgrade_id = #{UPGRADE_ID}
  </select>
  <select id="getUpgradeNote" parameterType="map" resultType="map">
    SELECT un.* FROM GPCM_UPGRADE_NOTE un
  </select>
</mapper>

interface.java

public interface ReleaseDTOMapper {    
    public HashMap<String,String> getReleaseNote(HashMap<String,String> param);
    
    public ArrayList<HashMap<String,String>> getUpgradeNote();
}

test.java

public static void main(String[] args) {
    SqlSessionFactory sqlSessionFactory;
    SqlSession session = null;
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        session = sqlSessionFactory.openSession();
        ReleaseDTOMapper mapper = session.getMapper(ReleaseDTOMapper.class);
        
        HashMap<String,String> param = new HashMap<String,String>();
        param.put("STATE", "N");
        param.put("UPGRADE_ID","2");
        HashMap<String,String> result = mapper.getReleaseNote(param);
        System.out.println("Result: "+result);
        List<HashMap<String,String>> rs = mapper.getUpgradeNote();
        for(HashMap<String,String> r : rs){
            System.out.println("Result: "+r);
        }            
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if(session != null){
            session.close();
        }
    }
}

6.通用方法:使用自定義數據類型映射參數和結果集

mapper.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">
<mapper namespace="com.mybatis.manager.mapper.ReleaseDTOMapper">
  <resultMap id="BaseResultMap" type="com.mybatis.manager.persist.ReleaseNoteDTO" >
    <result column="RELEASE_ID" property="releaseId" jdbcType="INTEGER" />
    <result column="RELEASE_NAME" property="releaseName" jdbcType="VARCHAR" />
    <result column="RELEASE_DESC" property="releaseDesc" jdbcType="VARCHAR" />
    <result column="UPGRADE_ID" property="upgradeId" jdbcType="INTEGER" />
    <result column="STATE" property="state" jdbcType="VARCHAR" />
    <result column="CREATE_DATE" property="createDate" jdbcType="TIMESTAMP" />
    <result column="MOD_DATE" property="modDate" jdbcType="TIMESTAMP" />
    <result column="UPGRADE_DATE" property="upgradeDate" jdbcType="TIMESTAMP" />
    </resultMap>
  <select id="getReleaseNote" parameterType="com.mybatis.manager.persist.ReleaseNoteDTO" resultMap="BaseResultMap">
    SELECT rn.* FROM GPCM_RELEASE_NOTE rn where rn.state = #{state,jdbcType=VARCHAR} and rn.upgrade_id = #{upgradeId,jdbcType=INTEGER}
  </select>
</mapper>

  注意resultType -> resultMap,列與java對象的參數必需要對應,否則獲取的結果就是null。

  傳入的參數為一個是可以定義parameterType="java.lang.Integer",多個參數必需合為一個對象傳輸,如Map或自定義Dto。

  可以使用多表查詢,將結果集傳入一個自定義Dto中,結果集綁定如下:

<resultMap id = "Upgrade" type="com.mybatis.manager.persist.UpgradeNoteDto"> <result column="UPGRADE_ID" property="upgradeId" jdbcType="INTEGER" /> <result column="UPGRADE_NAME" property="upgradeName" jdbcType="VARCHAR" /> </resultMap> <resultMap id="BaseResultMap" type="com.mybatis.manager.persist.ReleaseNoteDto" > <result column="RELEASE_ID" property="releaseId" jdbcType="INTEGER" /> <result column="RELEASE_NAME" property="releaseName" jdbcType="VARCHAR" /> <result column="RELEASE_DESC" property="releaseDesc" jdbcType="VARCHAR" /> <association property = "upgrade" javaType="com.mybatis.manager.persist.UpgradeNoteDto" resultMap = "Upgrade"/> </resultMap>

property = "upgrade"在Dto中定義為

private UpgradeNoteDto upgrade;

ReleaseNoteDTO.java 自定義數據模型

public class ReleaseNoteDTO {
    private Integer releaseId;
    private String releaseName;
    private String releaseDesc;
    private Integer upgradeId;
    private String state;
    private Date createDate;
    private Date modDate;
    private Date upgradeDate;
    /*******************
    *GETTER/SETTER
    *******************/
}

interface.java

public interface ReleaseNoteDtoMapper {    
    public ReleaseNoteDto getReleaseNote(ReleaseNoteDto param);    
}

test.java

ReleaseNoteDTO param = new ReleaseNoteDTO();
param.setState("N");
param.setUpgradeId(2);
ReleaseNoteDTO result = mapper.getReleaseNote(param);
System.out.println("Result: "+result.getReleaseDesc());

7.基本應用的結構參考

附錄:相關參考資料

  官網中文教程 http://www.mybatis.org/mybatis-3/zh/getting-started.html


免責聲明!

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



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