MyBatis入門2_增刪改查+資料庫欄位和實體欄位不一致情況

来源:http://www.cnblogs.com/luogg/archive/2017/05/06/6815882.html
-Advertisement-
Play Games

本文為博主辛苦總結,希望自己以後返回來看的時候理解更深刻,也希望可以起到幫助初學者的作用. 轉載請註明 出自 : "luogg的博客園" 謝謝配合! 當資料庫欄位和實體bean中屬性不一致時 之前資料庫Person名字欄位是name,PersonBean中屬性也是name,但是之後資料庫中修改為了u ...


本文為博主辛苦總結,希望自己以後返回來看的時候理解更深刻,也希望可以起到幫助初學者的作用.

轉載請註明 出自 : luogg的博客園 謝謝配合!

當資料庫欄位和實體bean中屬性不一致時

之前資料庫Person名字欄位是name,PersonBean中屬性也是name,但是之後資料庫中修改為了user_name,
  • 方法1:通過sql語句的欄位起別名,別名和實體中的對象屬性一致
    SELECT id,user_name as name,sex,age from person

    <select id="find" resultType="com.luogg.domain.Person">
            SELECT id,user_name as name,sex,age from person
    </select>
  • 方法2: mybatis最強大的地方 : reslutMap對象

    添加一個中介reslutMap標簽,並將select標簽中的resultType改為resultMap,並對應resultMap標簽的id.
    
    結果集:resultType 基礎類型,int,string,Person,
    resultMap 針對中介標簽resultMap而存在.
    <!--配置命名空間,命名空間+ .id 是唯一的sql語句標示符-->
<mapper namespace="com.luogg.mapper.PersonMapper">

    <!--中介,當資料庫欄位和實體bean對象屬性不一致時,做一個對應關係-->
    <resultMap id="personRM" type="com.luogg.domain.Person">
        <!--主鍵映射-->
        <id property="id" column="ID"></id>
        <!--普通欄位,property指實體屬性,column結果集的欄位名稱,一致的欄位可以不寫-->
        <result property="name" column="USER_NAME"></result>
    </resultMap>

    <!--查詢所有數據,參數有id,resultType結果集,parameterType參數-->
    <!--註意 : sql語句中如果有要填寫集合的,比如查詢所有數據,返回一個Person的結果集,那麼resultType參數直接寫 路徑+集合的類型
        比如: 返回一個Person集合,那麼就填寫Person Bean所在的路徑+Person-->
    <select id="find" resultMap="personRM">
        SELECT * from person
    </select>

    <!--通過ID查詢數據,當有查詢條件時,需要寫parameterType,返回結果集仍然是Person, #{id}或者${id}都可以-->
    <select id="selById" parameterType="int" resultType="com.luogg.domain.Person">
        SELECT * FROM person WHERE id = #{id}
    </select>
</mapper>

mybatis的增刪改查

新增人員信息

首先在PersonMapper.xml中添加insert標簽,我們的資料庫欄位user_name,Person實體屬性為name,不一致,區別開來.然後在TestMybatis中寫入代碼.
<!--添加人員-->
    <insert id="insert" parameterType="com.luogg.domain.Person">
        INSERT INTO person(id,user_name,age,sex) VALUES(#{id},#{name},#{age},#{sex})
    </insert>
package test;

import com.luogg.domain.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * Created by luogg on 2017/2/17.
 */
public class TestMybatis {
    //SqlSessionFactory為線程安全的
    private SqlSessionFactory factory;

    @Before
    public void init() throws IOException {
        String resource = "sqlMapConfig.xml";
        InputStream is = Resources.getResourceAsStream(resource);
        factory = new SqlSessionFactoryBuilder().build(is);
    }

    @Test //查詢所有
    public void findAll() throws IOException {
        /**
         * 測試資料庫的連接
         * 1.定義一個String類型的變數resource,指向剛纔配置的連接資料庫的xml文件
         * 2.創建一個輸入流,來讀取我們的資料庫配置文件
         * 3.輸入流創建工廠.
         * 4.有了工廠之後open工廠
         * 5.通過session訪問配置文件中的sql語句
         */

        SqlSession session = factory.openSession();

        //如何訪問PersonMapper.xml中的sql語句呢? 命名空間+ .id
        List<Person> list = session.selectList("com.luogg.mapper.PersonMapper.find");
        System.out.println(list.size());
        for(Person p : list){
            System.out.println(p);
        }
    }
    @Test //通過ID查詢人員信息
    public void selById(){
        SqlSession session = factory.openSession();
        Person p = session.selectOne("com.luogg.mapper.PersonMapper.selById",1);
        System.out.println(p);
    }

    @Test //添加人員信息
    public void add(){
        SqlSession session = factory.openSession();
        Person p = new Person();
        p.setId(4);
        p.setName("luogg");
        p.setAge(22);
        p.setSex(1);
        int i = session.insert("com.luogg.mapper.PersonMapper.insert",p);
        session.commit();
        if(i==1){
            System.out.print("添加人員成功");
        }
    }
}

修改人員信息 , 查詢總的記錄條數

prsonMapper.xml文件

<!--修改成員信息-->
    <update id="update" parameterType="com.luogg.domain.Person">
        UPDATE person SET user_name=#{name},age=#{age} WHERE id=#{id}
    </update>

    <!--查詢總的記錄-->
    <select id="count" resultType="int">
        SELECT COUNT(*) FROM person
    </select>

TestMybatis.java文件

@Test //修改人員信息
    public void updatePer(){
        SqlSession session = factory.openSession();
        Person p = new Person();
        p.setId(4);
        p.setName("luoggg");
        //p.setSex(1);
        p.setAge(23);
        int i = session.update("com.luogg.mapper.PersonMapper.update",p);
        session.commit();
        if(i==1){
            System.out.print("修改信息成功");
        }
    }

    @Test //查詢總的記錄條數
    public void selCount(){
        SqlSession session = factory.openSession();
        int i = session.selectOne("com.luogg.mapper.PersonMapper.count");
        System.out.println(i);
    }
    

條件查詢

根據條件查詢
<!--帶條件查詢-->
    <select id="selByL" parameterType="map" resultMap="personRM">
        SELECT <include refid="cols"/> FROM person
        where user_name like #{name}
        AND sex=#{sex}
    </select>
    

@Test //帶條 件查詢
    public void selByL(){
        SqlSession session = factory.openSession();
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("name","luo%");
        map.put("sex",1);
        List<Person> list = session.selectList("com.luogg.mapper.PersonMapper.selByL",map);
        System.out.println(list.size());
        for(Person p : list){
            System.out.println(p);
        }
    }
    

這裡寫圖片描述


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • https://developer.xamarin.com/samples/xamarin-forms/Navigation/MasterDetailPage/ https://blog.xamarin.com/material-design-for-your-xamarin-forms-andro... ...
  • /// <summary> /// 加密 /// </summary> /// <param name="Text"></param> /// <returns></returns> public static string Encrypt(string Text) { return Encrypt ...
  • C 訪問修飾符 分類 C 訪問修飾符一共有五種,分別為private, internal, protected, protected internal, public。 它們都可以用來修飾類中的成員,如欄位,屬性,方法,事件等。對於修飾class,enum,struct,嵌套類,及其各自預設修飾符的 ...
  • 重放攻擊 重放攻擊是指黑客通過抓包的方式,得到客戶端的請求數據及請求連接,重覆的向伺服器發送請求的行為。 比如你有一個 “購買” 的操作,當你點擊購買按鈕時,向伺服器發送購買的請求。而這時黑客對你的請求進行了抓包,得到了你的傳輸數據。 因為你填寫的都是真實有效的數據,是可以購買成功的,因此他不用做任 ...
  • .NET Core 2.0預覽版及.NET Standard 2.0 Preview 這個月也就要發佈了。 具體相關信息可以查看之前的文章 ".NET Core 2.0及.NET Standard 2.0" 。 今天來實際體驗.NET Core 2.0,正式版發佈還需要一段時間。 .NET Core ...
  • 詳情見:cookie與session的區別與聯繫 ...
  • csrf攻擊,即cross site request forgery跨站(功能變數名稱)請求偽造,這裡的forgery就是偽造的意思。網上有很多關於csrf的介紹,比如一位前輩的文章淺談CSRF攻擊方式,參考這篇文章簡單解釋下:csrf 攻擊能夠實現依賴於這樣一個簡單的事實:我們在用瀏覽器瀏覽網頁時通常會打 ...
  • 那些網上說的JDK什麼的的問題,我求你們不要誤人子弟好嗎? 出現在這個的原因就是ADT也就是你的SDK manager 的Tools版本跟你的SDK版本不相容,如果你的是SDK 23.0.2那你的Tools 時版本也要是這個,如果你實在不會,那就把所有的Tools全部下載下來就可以的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...