最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Java的MyBatis框架中建立接口進行CRUD操作的方法

 更新時間:2016年04月06日 14:57:53   作者:紅燒獅子頭  
這篇文章主要介紹了在Java的MyBatis框架中建立接口進行CRUD操作的方法,CRUD是指在做計算處理時的增加(Create)、重新取得數(shù)據(jù)(Retrieve)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫,需要的朋友可以參考下

以接口操作的方式編程
一般來講,我們建立映射SQL接口的類時通常會這樣:

 public static void testBasicQuery(int id) {
    SqlSession session = MybatisUtils.getSqlSession();
    try {
      /*
       * 此處的david.mybatis.demo.IVisitorOperation.basicQuery必須和下圖中配置里面的namespace對應
       */
      Visitor visitor = (Visitor) session.selectOne("david.mybatis.demo.IVisitorOperation.basicQuery", id);
      MybatisUtils.closeSession(session);
      System.out.println(visitor);
    } catch (Exception e) {
      // TODO: handle exception
    }
  }
<!-- 此處namespace對應的就是你所傳的String參數(shù) -->
<mapper namespace="david.mybatis.demo.IVisitorOperation">
<!-- 此處的resultType就是對應剛剛你在typeAlias節(jié)點里面規(guī)定的別名 -->
  <select id="basicQuery" parameterType="int" resultType="Visitor">
    select * from visitor where id=#{id} and
    Status>0 order by Id
  </select>
</mapper>

這樣其實在真正的開發(fā)過程中如果兩邊的名字一不小心沒有對應上,就會出現(xiàn)異常。為了避免這樣的情況我們可以采取接口的方式來進行相應的操作,下面我們來修改這段東西。

首先我們在包名為david.mybatis.demo的下面新建一個IVisitOperation類,表示今后將要操作數(shù)據(jù)庫所有方法的接口,如下所示:

package david.mybatis.demo;

import java.util.List;

import david.mybatis.model.PagenateArgs;
import david.mybatis.model.Visitor;

public interface IVisitorOperation {  
  /*
   * 基礎查詢
   */
  public Visitor basicQuery(int id);
}

  public static void testBasicQueryByInterfaceWay(int id) {
    SqlSession session = MybatisUtils.getSqlSession();
    try {
      IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);
      Visitor visitor = vOperation.basicQuery(id);
      MybatisUtils.closeSession(session);
      System.out.println(visitor);
    } catch (Exception e) {
      // TODO: handle exception
    }
  }

這樣就大功告成了,這樣我們就不必為手動書寫方法名可能導致的不匹配而煩惱了。

CRUD操作
下面將講解創(chuàng)建基于單表操作的CRUD與GetList操作,為了創(chuàng)建一點測試數(shù)據(jù)我們先弄個Add方法吧

繼續(xù)在上次的IVisitorOperation接口類中添加add,delete,update,query與getList接口方法,如下所示:

  /*
   * 基礎查詢
   */
  public Visitor basicQuery(int id);

  /*
   * 添加訪問者
   */
  public int add(Visitor visitor);
  
  /*
   * 刪除訪問者
   */
  public int delete(int id);
  
  /*
   * 更新訪問者
   */
  public int update(Visitor visitor);
  
  /*
   * 查詢訪問者
   */
  public Visitor query(int id);
  
  /*
   * 查詢訪問者List
   */
  public List<Visitor> getList();

對于相應的CRUD操作,在VisitorMapper.xml的<mapper>節(jié)點下分別對應insert,update,delete,select節(jié)點,具體配置詳情參數(shù)說明課參照官網 http://mybatis.github.io/mybatis-3/sqlmap-xml.html
這個示例中要的配置如下,傳遞的參數(shù)用#{parameter_name},當然也可直接用${parameter_name},

前者的方式,Mybatis會把它轉化為參數(shù)化的形式例如 insert into table (name) values (#{name}) => insert into table (name) values ( ? ) (Mysql情況下)

后者的方式,Mybatis會原封不動的不做任何操作把參數(shù)傳過來,例如  insert into table (name) values (${name}) => insert into table (name) values ( [你所傳的值] ),傳aa,這里就是aa,傳'aa'這里就是'aa'。

<?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="david.mybatis.demo.IVisitorOperation">
  <!-- 
    useGeneratedKeys="true"代表是否使用自增長序列, 
    keyProperty="Id"指定自增長列是哪一列, 
    parameterType="Visitor"指定IVisitorOperation接口類中定義中所傳的相應類型
    resultType 表示返回的類型,例如query中的visitor
    resultMap 自定義的返回類型,是返回復雜類型是的最佳首選,也是mybatis里最強大的武器
   -->
  <insert id="add" parameterType="Visitor" useGeneratedKeys="true"
    keyProperty="Id">
    insert into Visitor (Name, Email, Status, CreateTime)
    values (#{name}, #{email}, #{status}, #{createTime})
  </insert>
  <delete id="delete" parameterType="int">
    delete from Visitor where
    status>0 and id = #{id}
  </delete>
  <update id="update" parameterType="Visitor">
    update Visitor set Name =
    #{name}, Email=#{email}, Status=#{status} where id=#{id} and Status>0;
  </update>
  <select id="query" parameterType="int" resultType="Visitor">
    select Id,
    Name, Email, Status, CreateTime from visitor where id=#{id} and
    Status>0 order by Id
  </select>
  <select id="basicQuery" parameterType="int" resultType="Visitor">
    select * from visitor where id=#{id} and
    Status>0 order by Id
  </select>
  <select id="getList" resultMap="visitorRs">
    <include refid="getListSql" />
  </select>
  <resultMap type="Visitor" id="visitorRs">
    <id column="Id" property="id" />
    <result column="Name" property="name" />
    <result column="Email" property="email" />
    <result column="Status" property="status" />
    <result column="CreateTime" property="createTime" />
  </resultMap>
  <sql id="getListSql">
    select * from Visitor where
    status>0
  </sql>
</mapper>

此處注意的一點是:操作節(jié)點中的ID要對應接口定義中的接口名字,參數(shù)類型也要相應對應,例如接口里是add(Visitor visitor),那么在配置insert節(jié)點的時候id="add",parameterType="Visitor"

否則會報相應的異常,例如id節(jié)點不對應接口名稱會出現(xiàn)如下異常:

201646145316272.png (1228×153)

大家可以注意到在VisitorMapper.xml這個配置文件中在獲取list的時候,使用的是resultMap,使用resultMap的情況下你可以指定你自己的sql語句與哪些字段相映射,因為有時候你可以不需要那么多列,那你在配置映射的時候也不需要配置那么多映射,或者說你的列有起過別名,那么就不能直接使用resultType="Visitor"的方式進行映射,因為Mybatis默認映射方式是通過Javabean的屬性名與表的字段是否一致來匹配的,也可以通過配置<configuration>節(jié)點下的<settings>屬性值來控制是否映射的時候以Javabean中的駝峰命名方式配置如下。

<settings>
  <setting name="mapUnderscoreToCamelCase" value="false" />
</settings>

具體其他修改Mapper的其他配置可以通過 http://mybatis.github.io/mybatis-3/configuration.html#settings 查看。
對于Visitor的Mapper類如下:

<mapper namespace="david.mybatis.demo.IVisitorOperation">
  <sql id="getListSql">
    select id as visitor_id, name, email, status, createtime from Visitor where
    status>0
  </sql>
  <select id="getList" resultMap="visitorRs">
    <include refid="getListSql" />
  </select>
  <!-- 
    這里指的注意的地方是property屬性,里面的字段一定要和你在實體里面定義的屬性一樣,此處區(qū)分大小寫
    否則會出現(xiàn)默認setter為屬性賦值的時候找不到相應屬性的異常,大家可以試下
    column屬性對應于查詢語句返回結果集的名字,如果有為相應字段起過別名例如吧id變?yōu)榱藇isitor_id
    那么相應的column名字也要對應上
  -->
  <resultMap type="Visitor" id="visitorRs">
    <id column="visitor_id" property="id" />
    <result column="Name" property="name" />
    <result column="Email" property="email" />
    <result column="Status" property="status" />
    <result column="CreateTime" property="createTime" />
  </resultMap>
</mapper>

這里要大家還會注意到有一個節(jié)點<sql>節(jié)點,這個的用處就是提取公用的sql語句或者說字段,以便其他地方復用,其他詳細說明用法可以參照 http://mybatis.github.io/mybatis-3/sqlmap-xml.html。
剩下的就是和剛剛一樣的操作了,大家可以在demo程序里建立一個DemoRun的類存放各類測試方法,如下:

package david.mybatis.demo;

import java.util.Arrays;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import david.mybatis.model.BasicQueryArgs;
import david.mybatis.model.CRUD_Enum;
import david.mybatis.model.Channel;
import david.mybatis.model.PagenateArgs;
import david.mybatis.model.Visitor;
import david.mybatis.model.Website;

public class DemoRun {

  public static void testBasicQuery(int id) {
    SqlSession session = MybatisUtils.getSqlSession();
    try {
      /*
       * 此處的david.mybatis.demo.IVisitorOperation.basicQuery必須和下圖中配置里面的namespace對應
       */
      Visitor visitor = (Visitor) session.selectOne("david.mybatis.demo.IVisitorOperation.basicQuery", id);
      MybatisUtils.closeSession(session);
      System.out.println(visitor);
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
  }
  
  public static void testBasicQueryByInterfaceWay(int id) {
    SqlSession session = MybatisUtils.getSqlSession();
    try {
      IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);
      Visitor visitor = vOperation.basicQuery(id);
      MybatisUtils.closeSession(session);
      System.out.println(visitor);
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
  }

  /*
   * 批量添加訪問者記錄
   */
  public static void addVisitors() {
    SqlSession session = MybatisUtils.getSqlSession();
    List<Visitor> visitors = Arrays.asList(new Visitor[] { new Visitor("mongodb", "mongodb@gmail.com"),
        new Visitor("redis", "redis@gmail.com"), new Visitor("memcached", "memcached@gmail.com"),
        new Visitor("CouchDB", "CouchDB@gmail.com"), new Visitor("HBase", "HBase@gmail.com"),
        new Visitor("Bigtable", "Bigtable@gmail.com"), new Visitor("Hive", "Hive@gmail.com"),
        new Visitor("MapReduce", "MapReduce@gmail.com"), });

    for (Visitor visitor : visitors) {
      addVisitor(visitor, session);
    }
    MybatisUtils.closeSession(session);
    MybatisUtils.showMessages(CRUD_Enum.List, visitors.size());
  }

  /*
   * 添加訪問者信息
   */
  @SuppressWarnings("unused")
  private static void addVisitor(Visitor visitor, SqlSession session) {
    if (session == null)
      session = MybatisUtils.getSqlSession();
    IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);
    int recordCount = vOperation.add(visitor);
    session.commit();
    if (session == null)
      MybatisUtils.closeSession(session);
    MybatisUtils.showMessages(CRUD_Enum.Add, recordCount);
  }

  /*
   * 重載添加訪問者
   */
  public static void addVisitor(Visitor visitor) {
    addVisitor(visitor, null);
  }

  /*
   * 刪除訪問者信息
   */
  public static void deleteVisitor(int id) {
    SqlSession session = MybatisUtils.getSqlSession();
    IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);
    int recordCount = vOperation.delete(id);
    session.commit();
    MybatisUtils.closeSession(session);
    MybatisUtils.showMessages(CRUD_Enum.Delete, recordCount);
  }

  /*
   * 更新訪問者信息
   */
  public static void updateVisitor(int id) {
    SqlSession session = MybatisUtils.getSqlSession();
    IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);
    Visitor visitor = vOperation.query(id);
    System.out.println("原始對象:" + visitor);
    String name = visitor.getName();
    if (name.contains("updated")) {
      visitor.setName(name.substring(0, name.indexOf("updated")));
    } else {
      visitor.setName(name + "updated");
    }
    int recordCount = vOperation.update(visitor);
    session.commit();
    MybatisUtils.closeSession(session);
    MybatisUtils.showMessages(CRUD_Enum.Update, recordCount);
    System.out.println("更新后對象:" + visitor);
  }

  /*
   * 查詢訪問者信息
   */
  public static void queryVisitor(int id) {
    SqlSession session = MybatisUtils.getSqlSession();
    IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);
    Visitor visitor = vOperation.query(id);
    MybatisUtils.closeSession(session);
    MybatisUtils.showMessages(CRUD_Enum.Query, 1);
    System.out.println(visitor);
  }

  /*
   * 查詢訪問者列表
   */
  public static void queryVisitorList() {
    SqlSession session = MybatisUtils.getSqlSession();
    IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);
    List<Visitor> visitors = vOperation.getList();
    for (Visitor visitor : visitors) {
      System.out.println(visitor);
    }
    MybatisUtils.closeSession(session);
    MybatisUtils.showMessages(CRUD_Enum.List, visitors.size());
  }  
}

DemoRun類
運行一下后一個簡單的基于單表CRUD,DEMO就完成啦

201646145447423.png (741×644)

相關文章

  • idea打開項目后無法顯示目錄結構,只能顯示.iml文件問題

    idea打開項目后無法顯示目錄結構,只能顯示.iml文件問題

    這篇文章主要介紹了idea打開項目后無法顯示目錄結構,只能顯示.iml文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 簡單的理解java集合中的HashSet和HashTree幾個重寫方法

    簡單的理解java集合中的HashSet和HashTree幾個重寫方法

    這篇文章主要介紹了簡單的理解java集合中的HashSet和HashTree幾個重寫方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • knife4j+springboot3.4異常無法正確展示文檔

    knife4j+springboot3.4異常無法正確展示文檔

    本文主要介紹了knife4j+springboot3.4異常無法正確展示文檔,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • SpringBoot中使用JWT的實戰(zhàn)

    SpringBoot中使用JWT的實戰(zhàn)

    本文主要介紹了SpringBoot中使用JWT的實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Spring中Controller應用深入理解

    Spring中Controller應用深入理解

    這篇文章主要介紹了Spring項目中的Controller,Spring Controller本身也是一個Spring Bean,只是它多提供了Web能力,只需要造類上提供@Controller注解即可
    2022-12-12
  • SpringBoot后端進行數(shù)據(jù)校驗JSR303的使用詳解

    SpringBoot后端進行數(shù)據(jù)校驗JSR303的使用詳解

    這篇文章主要介紹了SpringBoot后端進行數(shù)據(jù)校驗JSR303的使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • spring自定義注解及使用方法詳細例子

    spring自定義注解及使用方法詳細例子

    這篇文章主要給大家介紹了關于spring自定義注解及使用方法的相關資料,Spring 是一個非常強大的框架,可以使用自定義注解來完成許多任務,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • java原碼補碼反碼關系解析

    java原碼補碼反碼關系解析

    這篇文章主要為大家詳細介紹了java原碼補碼反碼的關系,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • SpringBoot項目中如何解決跨域問題的最新方案?

    SpringBoot項目中如何解決跨域問題的最新方案?

    跨域問題是瀏覽器為了保護用戶的信息安全,實施了同源策略(Same-Origin Policy),即只允許頁面請求同源(相同協(xié)議、域名和端口)的資源,當 JavaScript 發(fā)起的請求跨越了同源策略,即請求的目標與當前頁面的域名、端口、協(xié)議不一致時,瀏覽器會阻止請求的發(fā)送或接收
    2025-03-03
  • Spring?MVC?請求映射路徑的配置實現(xiàn)前后端交互

    Spring?MVC?請求映射路徑的配置實現(xiàn)前后端交互

    在Spring?MVC中,請求映射路徑是指與特定的請求處理方法關聯(lián)的URL路徑,這篇文章主要介紹了Spring?MVC?請求映射路徑的配置,實現(xiàn)前后端交互,需要的朋友可以參考下
    2023-09-09

最新評論

杨浦区| 阿拉善右旗| 邹平县| 东安县| 博野县| 积石山| 务川| 拉萨市| 静乐县| 抚顺市| 惠安县| 岑巩县| 彰武县| 青铜峡市| 玉田县| 哈巴河县| 类乌齐县| 武山县| 峨边| 临邑县| 顺平县| 温泉县| 林甸县| 兴宁市| 吉安市| 容城县| 华亭县| 阳原县| 沙坪坝区| 年辖:市辖区| 中西区| 郓城县| 天柱县| 合阳县| 宜都市| 阿合奇县| 承德市| 天柱县| 泗阳县| 芦溪县| 随州市|