Mybatis (三)

来源:https://www.cnblogs.com/xuweiweiwoaini/archive/2018/02/02/8407204.html
-Advertisement-
Play Games

1 Mybatis的動態SQL簡介 2 if標簽 3 where標簽 4 trim標簽 5 choose-when-otherwise標簽(選擇分支) 6 set標簽 7 foreach標簽 8 內置參數 9 bind標簽 10 sql標簽 ...


1 Mybatis的動態SQL簡介

  • 動態SQL是Mybatis強大的特性之一,極大的簡化我們拼接SQL的操作。
  • 動態SQL元素和使用JSTL或其他類似基於XML的文本處理器相似。
  • Mybatis採用功能強大的OGNL表達式來簡化操作。
    • if
    • choose when otherwise
    • trim where set
    • foreach  

 

2 if標簽

  • 示例:
    • EmployeeMapper.java  
package com.xuweiwei.mybatis.mapper;

import com.xuweiwei.mybatis.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {

    public List<Employee> getEmployeeByIf(Employee employee);



}
    • EmployeeMapper.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.xuweiwei.mybatis.mapper.EmployeeMapper">

    <select id="getEmployeeByIf" parameterType="com.xuweiwei.mybatis.pojo.Employee" resultType="com.xuweiwei.mybatis.pojo.Employee">
        SELECT id,last_name,gender,email
        FROM employee
        WHERE
        <!--
            if標簽用來判斷,和jstl中的c:if功能類似
        -->
        <if test="id != null" >
            id = #{id}
        </if>
        <if test="lastName != null and lastName.trim() != ''">
            and last_name like #{lastName}
        </if>
        <if test="gender != null and gender.trim() != ''">
            and gender = #{gender}
        </if>
        <if test="email != null and email.trim() != ''">
            and email = #{email}
        </if>

    </select>


</mapper>

 

  • 但是,一旦id為null,那麼就會報錯。

  • 在where後面加1=1,然後在id前面加and id = #{id}
<?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.xuweiwei.mybatis.mapper.EmployeeMapper">

    <select id="getEmployeeByIf" parameterType="com.xuweiwei.mybatis.pojo.Employee" resultType="com.xuweiwei.mybatis.pojo.Employee">
        SELECT id,last_name,gender,email
        FROM employee
        WHERE  1=1
        <!--
            if標簽用來判斷,和jstl中的c:if功能類似
        -->
        <if test="id != null" >
            and id = #{id}
        </if>
        <if test="lastName != null and lastName.trim() != ''">
            and last_name like #{lastName}
        </if>
        <if test="gender != null and gender.trim() != ''">
            and gender = #{gender}
        </if>
        <if test="email != null and email.trim() != ''">
            and email = #{email}
        </if>

    </select>


</mapper>
  • 但是這種方法,太繁瑣了,有些人並不一定遵守啊。所以,針對這種情況,可以使用<where>標簽,它可以自動將多餘的and去掉。

 

3 where標簽

  • 示例:
    • EmployeeMapper.java  
package com.xuweiwei.mybatis.mapper;

import com.xuweiwei.mybatis.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {

    public List<Employee> getEmployeeByIf(Employee employee);



}
    • EmployeeMapper.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.xuweiwei.mybatis.mapper.EmployeeMapper">

    <select id="getEmployeeByIf" parameterType="com.xuweiwei.mybatis.pojo.Employee" resultType="com.xuweiwei.mybatis.pojo.Employee">
        SELECT id,last_name,gender,email
        FROM employee
        <!--
            where 標簽 可以將多餘的and去掉
        -->
        <where>
            <!--
           if標簽用來判斷,和jstl中的c:if功能類似
       -->
            <if test="id != null" >
                id = #{id}
            </if>
            <if test="lastName != null and lastName.trim() != ''">
                and last_name like #{lastName}
            </if>
            <if test="gender != null and gender.trim() != ''">
                and gender = #{gender}
            </if>
            <if test="email != null and email.trim() != ''">
                and email = #{email}
            </if>
        </where>


    </select>


</mapper>
    • 測試  
package com.xuweiwei.mybatis.test;

import com.xuweiwei.mybatis.mapper.EmployeeMapper;
import com.xuweiwei.mybatis.pojo.Employee;
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.Test;

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

public class MybatisTest {
    /**
     * 查詢
     *
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        try {

            EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
            Employee emp = new Employee();
            emp.setId(3);
            emp.setEmail("[email protected]");
            List<Employee> employees = employeeMapper.getEmployeeByIf(emp);
            System.out.println(employees);



        } finally {
            session.close();
        }
    }


}

 

  • 但是,這樣也有問題,有人喜歡將and放在每個條件的最後,請看下麵的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.xuweiwei.mybatis.mapper.EmployeeMapper">

    <select id="getEmployeeByIf" parameterType="com.xuweiwei.mybatis.pojo.Employee" resultType="com.xuweiwei.mybatis.pojo.Employee">
        SELECT id,last_name,gender,email
        FROM employee
        <!--
            where 標簽 可以將多餘的and去掉
        -->
        <where>
            <!--
           if標簽用來判斷,和jstl中的c:if功能類似
       -->
            <if test="id != null" >
                id = #{id} and
            </if>
            <if test="lastName != null and lastName.trim() != ''">
                 last_name like #{lastName} and
            </if>
            <if test="gender != null and gender.trim() != ''">
                 gender = #{gender} and
            </if>
            <if test="email != null and email.trim() != ''">
                 email = #{email} and
            </if>
        </where>


    </select>


</mapper>
  • 此時,Mybatis內心是崩潰的,你們這些愚蠢的人類,就是瞎折騰。那麼此時可以使用trim標簽。

 

4 trim標簽

  • 示例:
    • EmployeeMapper.java  
package com.xuweiwei.mybatis.mapper;

import com.xuweiwei.mybatis.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {

    public List<Employee> getEmployeeByIf(Employee employee);



}
    • EmployeeMapper.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.xuweiwei.mybatis.mapper.EmployeeMapper">

    <select id="getEmployeeByIf" parameterType="com.xuweiwei.mybatis.pojo.Employee"
            resultType="com.xuweiwei.mybatis.pojo.Employee">
        SELECT id,last_name,gender,email
        FROM employee
        <!--
            trim標簽
            prefix:在trim標簽範圍內的所有語句,前面加上prefix屬性對應的值
            prefixOverrides:將在trim標簽範圍內的所有語句前面多餘的和prefixOverrides相等的值去掉
            suffix:和prefix相反
            suffixOverrides:和prefixOverrides相反
        -->
        <trim prefix="where" suffixOverrides="and">
            <!--
                if標簽用來判斷,和jstl中的c:if功能類似
            -->
            <if test="id != null">
                id = #{id} and
            </if>
            <if test="lastName != null and lastName.trim() != ''">
                last_name like #{lastName} and
            </if>
            <if test="gender != null and gender.trim() != ''">
                gender = #{gender} and
            </if>
            <if test="email != null and email.trim() != ''">
                email = #{email} and
            </if>
        </trim>

    </select>


</mapper>
    • 測試  
package com.xuweiwei.mybatis.test;

import com.xuweiwei.mybatis.mapper.EmployeeMapper;
import com.xuweiwei.mybatis.pojo.Employee;
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.Test;

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

public class MybatisTest {
    /**
     * 查詢
     *
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        try {

            EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
            Employee emp = new Employee();
            emp.setId(3);
            emp.setEmail("[email protected]");
            List<Employee> employees = employeeMapper.getEmployeeByIf(emp);
            System.out.println(employees);



        } finally {
            session.close();
        }
    }


}

 

  • 當然,針對2if標簽所面對的問題,也可以使用trim來解決,請看如下的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.xuweiwei.mybatis.mapper.EmployeeMapper">

    <select id="getEmployeeByIf" parameterType="com.xuweiwei.mybatis.pojo.Employee"
            resultType="com.xuweiwei.mybatis.pojo.Employee">
        SELECT id,last_name,gender,email
        FROM employee
        <!--
            trim標簽
            prefix:在trim標簽範圍內的所有語句,前面加上prefix屬性對應的值
            prefixOverrides:將在trim標簽範圍內的所有語句前面多餘的和prefixOverrides相等的值去掉
            suffix:和prefix相反
            suffixOverrides:和prefixOverrides相反
        -->
        <trim prefix="where" prefixOverrides="and">
            <!--
                if標簽用來判斷,和jstl中的c:if功能類似
            -->
            <if test="id != null">
                id = #{id}
            </if>
            <if test="lastName != null and lastName.trim() != ''">
                and last_name like #{lastName}
            </if>
            <if test="gender != null and gender.trim() != ''">
                and gender = #{gender}
            </if>
            <if test="email != null and email.trim() != ''">
                and email = #{email}
            </if>
        </trim>

    </select>


</mapper>

 

5 choose-when-otherwise標簽(選擇分支)

  • 示例:查詢雇員信息,如果id不是null,就用id查詢,以此類推。
    • EmployeeMapper.java  
package com.xuweiwei.mybatis.mapper;

import com.xuweiwei.mybatis.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {

    public List<Employee> getEmployeeByIf(Employee employee);



}
    • EmployeeMapper.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.xuweiwei.mybatis.mapper.EmployeeMapper">

    <select id="getEmployeeByIf" parameterType="com.xuweiwei.mybatis.pojo.Employee"
            resultType="com.xuweiwei.mybatis.pojo.Employee">
        SELECT id,last_name,gender,email
        FROM employee
        <where>
            <choose>
                <when test="id != null">
                    id = #{id}
                </when>
                <when test="lastName != null">
                    last_name like #{lastName}
                </when>
                <when test="gender != null">
                    gender = #{gender}
                </when>
                <otherwise>
                    email = #{email}
                </otherwise>
            </choose>
        </where>
    </select>


</mapper>

 

6 set標簽

  • 示例:根據指定的條件根據雇員信息
    • EmployeeMapper.java    
package com.xuweiwei.mybatis.mapper;

import com.xuweiwei.mybatis.pojo.Employee;

public interface EmployeeMapper {

    public boolean updateEmployee(Employee employee);



}
    • EmployeeMapper.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.xuweiwei.mybatis.mapper.EmployeeMapper">

   <update id="updateEmployee" parameterType="com.xuweiwei.mybatis.pojo.Employee">
       UPDATE employee
       SET
       <if test="lastName != null">
           last_name = #{lastName},
       </if>
       <if test="gender != null">
           gender = #{gender},
       </if>
       <if test="email != null">
           email = #{email}
       </if>
       <where>
           id = #{id}
       </where>


   </update>


</mapper>
    • 測試  
package com.xuweiwei.mybatis.test;

import com.xuweiwei.mybatis.mapper.EmployeeMapper;
import com.xuweiwei.mybatis.pojo.Employee;
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.Test;

import java.io.IOException;
import java.io.InputStream;

public class MybatisTest {
    /**
     * 查詢
     *
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        try {

            EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
            Employee emp = new Employee();
            emp.setGender("男");
            emp.setId(3);
            emp.setEmail("[email protected]");
            emp.setLastName("許飛");
            boolean flag  = employeeMapper.updateEmployee(emp);
            System.out.println(flag);



        } finally {
            session.close();
        }
    }


}

 

  • 這樣,看似沒有問題,如果一旦email為null的話,那麼資料庫就會發出錯誤
    • 測試代碼如下  
package com.xuweiwei.mybatis.test;

import com.xuweiwei.mybatis.mapper.EmployeeMapper;
import com.xuweiwei.mybatis.pojo.Employee;
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.Test;

import java.io.IOException;
import java.io.InputStream;

public class MybatisTest {
    /**
     * 查詢
     *
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        try {

            EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
            Employee emp = new Employee();
            emp.setGender("男");
            emp.setId(3);
            emp.setLastName("許飛");
            boolean flag  = employeeMapper.updateEmployee(emp);
            System.out.println(flag);



        } finally {
            session.close();
        }
    }


}

  

  • 所以,使用SET標簽,這樣Mybatis就會將多餘的逗號(,)幹掉
<?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.xuweiwei.mybatis.mapper.EmployeeMapper">

   <update id="updateEmployee" parameterType="com.xuweiwei.mybatis.pojo.Employee">
       UPDATE employee
       <set>
           <if test="lastName != null">
               last_name = #{lastName},
           </if>
           <if test="gender != null">
               gender = #{gender},
           </if>
           <if test="email != null">
               email = #{email}
           </if>
       </set>
       <where>
           id = #{id}
       </where>
   </update>


</mapper>

 

  • 當然,你也可以使用trim標簽哦。

 

7 foreach標簽

  • 示例:根據主鍵批量查詢雇員信息
    • SQL語句如下:  
SELECT `id`,`last_name`,`gender`,`email`,`department_id`
FROM `employee`
WHERE id IN (3,4,5);
    • EmployeeMapper.java  
package com.xuweiwei.mybatis.mapper;

import com.xuweiwei.mybatis.pojo.Employee;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EmployeeMapper {


    public List<Employee> findEmployeesByIds(@Param("ids") Integer[] ids);

}
    • EmployeeMapper.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.xuweiwei.mybatis.mapper.EmployeeMapper">


    <select id="findEmployeesByIds"  resultType="com.xuweiwei.mybatis.pojo.Employee">
        SELECT `id`,`last_name`,`gender`,`email`,`department_id`
        FROM `employee`
        <!--
            foreach標簽,遍歷集合
            collection:需要遍歷的集合
            item:將遍歷的每個元素設置到item中
            separator:每個元素之間的分割符
            open:將遍歷的結果拼湊一個開始的字元
            close:將遍歷的結果拼接一個結束的字元

        -->
        <foreach collection="ids" item="id" open="where id in ( " close=")" separator=",">
            #{id}
        </foreach>
    </select>


</mapper>
    • 測試  
package com.xuweiwei.mybatis.test;

import com.xuweiwei.mybatis.mapper.EmployeeMapper;
import com.xuweiwei.mybatis.pojo.Employee;
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.Test;

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

public class MybatisTest {
    /**
     * 查詢
     *
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        try {

            EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
            Integer[] ids = new Integer[3];
            ids[0] = 3;
            ids[1] = 4;
            ids[2] = 5;
            List<Employee> employees   = employeeMapper.findEmployeesByIds(ids);
            System.out.println(employees);



        } finally {
            session.close();
        }
    }


}

 

  • 以MySQL為例,foreach的第二種場景,就是批量插入,示例代碼如下
    • EmployeeMapper.java  
package com.xuweiwei.mybatis.mapper;

import com.xuweiwei.mybatis.pojo.Employee;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EmployeeMapper {


    public boolean insertEmployees(@Param("emps") List<Employee> emps);

}
    • EmployeeMapper.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.xuweiwei.mybatis.mapper.EmployeeMapper">


    <insert id="insertEmployees">
         INSERT INTO `employee` (`last_name`,`gender`,`email`)
         VALUES
         <foreach collection="emps" item="emp" separator=",">
             (#{emp.lastName},#{emp.gender},#{emp.email})
         </foreach>

    </insert>



</mapper>
    • 測試 
package com.xuweiwei.mybatis.test;

import com.xuweiwei.mybatis.mapper.EmployeeMapper;


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

-Advertisement-
Play Games
更多相關文章
  • 這裡的第一個演算法,沒什麼可以說的,一定是從最經典的冒泡演算法開始,會列出python版和c版 冒泡演算法很簡單,就是像冒泡一樣,把小的,也可以理解成輕的,從下麵浮出來 比如有個list = [3,2,5,4,1],先用3和2比,2輕,2浮上去,3沉下去,3再和5比,3比較輕,位置不變,5和4比,4浮上來 ...
  • 各位博主大大: 從這周周三開通博客到現在,已經三天了, 今天應該算是正式開始博客之路了。 先說好,本人比較懶,所以會不定時更新博客文章和隨筆哦, 還有就是大家有任何意見歡迎各種挖坑吐槽和小姐姐來討論哦,僅限純技術哦~~~~哈哈,因為小姐姐是純技術宅。 好了,先介紹自己吧,從開始寫程式到現在大概也有三 ...
  • 算術運算符: 算術運算符包含: +加法運算、 -減法運算、 *乘法運算、 /精確除法運算、 //地板除法運算、 %求餘運算、 **冪運算符 +加法運算: >>> a=1 >>> b=2 >>> c=a+b >>> c 3 -減法運算: >>> c=1000 >>> a=6000 >>> b=c-a.... ...
  • #之所以把這倆寫一起,並不是因為這倆有什麼關係,因為都太簡單,沒什麼可說的 #自定義函數的格式,def開頭,後面空格,在後面是函數名,接括弧,括弧里是入參參數 結果是1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n 說明下,這裡有個遞歸,遞歸在代碼里最好不要出現,因為每遞歸一次都會占用 ...
  • 2018-02-03 還好寫過大整數運算,順利地一編A過。(這道題就是一道大整數乘法的實現代碼) 簡單的說一下吧。大整數運算的思想就是用數組儲存數字,並且依靠數組進行進位的模擬。 當然這個用的是每1個存儲一格,要想優化時間的話可以考慮每4個存儲一格。 ...
  • Spring提供了一個工具類可以載入classpath下的文件,一般情況下無任何問題,但是當它作為公共的jar包中的工具來載入jar包中的文件時則報出找不到文件的錯誤. 點開看了一下這個工具類ResouceUtils.getFile()方法的源碼: 看了一下代碼結構簡單邏輯清晰,可能有問題的也就是上 ...
  • 一.創建表 django中ORM和資料庫的映射關係: 表名 <-------> 類名 欄位 <-------> 屬性 表記錄 <------->類實例對象 創建表就是一個創建類的過程: 外鍵,一對一,多對多: 二.添加記錄 三.查詢記錄 3.1 查詢相關API 3.2 基於對象的跨表查詢(子查詢) ...
  • 許久沒有寫了,雖然每天都有在學,但是學的東西也少了,後面難度慢慢加大,學習速度也是變慢了。這是許多天積累下來的筆記,從第一次接觸對象,到慢慢去瞭解,現在處於還待深入瞭解的狀態。萬物皆對象,那是不是說沒有對象的小伙伴不必擔心了呢? 萬物皆對象 終於到了對象這裡。面向對象程式設計(簡稱OOP),Java ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...