欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis中#{}占位符與${}拼接符的用法說明

 更新時(shí)間:2021年02月22日 16:05:06   作者:pan_junbiao  
這篇文章主要介紹了MyBatis中#{}占位符與${}拼接符的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

1、關(guān)于#{}占位符

先來看以下的示例,該示例是MyBatis中的SQL映射配置文件(Mapper配置文件),在該配置中使用了#{}占位符。

<?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="test">
  <!-- 根據(jù)用戶編號(hào),查詢單個(gè)用戶實(shí)體 -->
  <select id="findUserById" parameterType="int" resultType="com.pjb.mybatis.po.User">
    SELECT * FROM tb_user WHERE id = #{id}
  </select>
 
  <!-- 新增用戶 -->
  <insert id="insertUser" parameterType="com.pjb.mybatis.po.User">
    INSERT INTO tb_user(user_name,blog_url,remark)
    VALUES(#{userName},#{blogUrl},#{remark});
  </insert>
</mapper>

在SQL映射配置文章中,輸入?yún)?shù)需要用占位符來標(biāo)識(shí)對(duì)應(yīng)的位置。

在傳統(tǒng)的JDBC編程中,占位符用“?”來標(biāo)識(shí),然后在加載SQL之前按照“?”的位置設(shè)置參數(shù)。

而“#{}”在MyBatis中也代表一種占位符,該符號(hào)接受輸入?yún)?shù),在大括號(hào)中編寫參數(shù)名稱來接受對(duì)應(yīng)參數(shù)。

“#{}”接受的輸入?yún)?shù)的類型可以是簡(jiǎn)單類型、普通JavaBean或者HashMap。

當(dāng)接受簡(jiǎn)單類型時(shí),“#{}”中可以寫“value”或者其他任意名稱。

如果接受的是JavaBean,它會(huì)通過OGNL讀取對(duì)象中的屬性值。

2、關(guān)于${}拼接符

再來看以下的示例,該示例是MyBatis中的SQL映射配置文件(Mapper配置文件),在該配置中使用了${}拼接符。

<?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="test">
  <!-- 根據(jù)用戶名稱,模糊查詢用戶列表 -->
  <select id="findUserByUserName" parameterType="java.lang.String" resultType="com.pjb.mybatis.po.User">
    SELECT * FROM tb_user WHERE user_name LIKE '%${value}%'
  </select>
</mapper>

在SQL映射配置文件中,有時(shí)候需要拼接SQL語(yǔ)句。例如在模糊查詢的時(shí)候,就需要在查詢條件的兩側(cè)拼接兩個(gè)“%”字符串,這個(gè)時(shí)候如果使用“#{}”占位符是不行的。在MyBatis中,“${}”在SQL配置文件中代表一個(gè)“拼接符號(hào)”,可以在原有SQL語(yǔ)句上拼接新的符合SQL語(yǔ)法的語(yǔ)句。

但是要注意的是,使用“${}”拼接的SQL語(yǔ)句,會(huì)引起SQL注入,所以一般不建議使用“${}”。

“${}”接受輸入?yún)?shù)的類型可以是簡(jiǎn)單類型、普通JavaBean或者HashMap。

當(dāng)接受簡(jiǎn)單類型時(shí),“${}”中只能寫“value”,而不能寫其他任意名稱。

如果接受的是JavaBean,它會(huì)通過OGNL讀取對(duì)象中的屬性值。

另外,在MyBatis 3.4.2之后,還可以在“${}”拼接符中設(shè)置一個(gè)默認(rèn)值,格式如下:

${屬性:默認(rèn)值}

即在所需引入的屬性名的后面添加“:”引號(hào),然后緊跟著填寫屬性不存在或?yàn)榭諘r(shí)的默認(rèn)值。

【示例】設(shè)置“${}”拼接符的默認(rèn)值。

(1)創(chuàng)建數(shù)據(jù)庫(kù)連接的屬性文件(db.properties)

在src目錄下創(chuàng)建db.propertie屬性文件,并使用“#”符號(hào)將屬性項(xiàng)jdbc.username和jdbc.password注釋掉,表示這兩個(gè)屬性項(xiàng)未進(jìn)行配置。

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_admin?useSSL=false&amp
#jdbc.username=root
#jdbc.password=123456

(2)啟用拼接符默認(rèn)值的配置

要使用“${}”拼接符中設(shè)置一個(gè)默認(rèn)值,需要在properties標(biāo)簽中設(shè)置啟用拼接符默認(rèn)值的配置項(xiàng)。

在MyBatis配置文件(mybatis-config.xml)中,使用<properties>標(biāo)簽加載數(shù)據(jù)庫(kù)連接屬性文件(db.properties),并在該標(biāo)簽中設(shè)置啟用拼接符默認(rèn)值的配置項(xiàng),該配置如下:

<!-- 加載用于數(shù)據(jù)庫(kù)配置的屬性文件 -->
<properties resource="db.properties">
  <!-- 啟用默認(rèn)值特性,這樣${}拼接符才可以設(shè)置默認(rèn)值 -->
  <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
</properties>

注意:在MyBatis配置文件(mybatis-config.xml)中,<properties>標(biāo)簽的配置必須寫在<settings>標(biāo)簽的上面,因?yàn)镸yBatis中的配置,不但有類型限制,還有順序限制。

必須按照:<properties>、<settings>、<typeAliases>、<typeHandlers>、…順序排放。

(3)編寫數(shù)據(jù)庫(kù)配置信息,并使用“${}”拼接符的默認(rèn)值。

說明:

由于在db.propertie屬性文件中,已經(jīng)將jdbc.username和jdbc.password屬性項(xiàng)注釋掉了,然后在上面的配置信息中,給username和password配置項(xiàng)中的“${}”拼接符中設(shè)置默認(rèn)值,這樣程序在啟動(dòng)時(shí),就會(huì)讀取默認(rèn)值。

補(bǔ)充:MyBatis映射——SQL占位符及傳參

簡(jiǎn)介

本篇主要講述Mybatis映射SQL通過#{}獲取引入類型參數(shù)的屬性值及通過@Param注解指定名稱傳參。

關(guān)于占位符與字符拼接:

占位符:占位符就是在某個(gè)地方占領(lǐng)一個(gè)位置,把它單獨(dú)作為某個(gè)東西,比如這里就是把它作為 值。

#{}表示一個(gè)占位符號(hào),通過#{}可以實(shí)現(xiàn) preparedStatement 向占 位符中設(shè)置值, 自動(dòng)進(jìn)行 java

類型和 jdbc 類型轉(zhuǎn)換。#{}可以有效防止 sql 注入。 #{}可以接 收簡(jiǎn)單類型值或 pojo 屬性值。 如果 parameterType 傳輸單個(gè)簡(jiǎn)單類型值,#{} 括號(hào)中可以是 value 或其它名稱。

字符拼接:字符拼接就是簡(jiǎn)單的對(duì)字符串拼接。沒有特殊的其它含義。

表 示 拼 接 s q l 串 , 通 過 可 以 將 p a r a m e t e r T y p e 傳 入 的 內(nèi) 容 拼 接 在 s q l 中 且 不 進(jìn) 行 j d b c 類 型 轉(zhuǎn) 換 , 可 以 將 p a r a m e t e r T y p e 傳 入 的 內(nèi) 容 拼 接 在 s q l 中 且 不 進(jìn) 行 j d b c 類 型 轉(zhuǎn) 換 , 可 以 接 收 簡(jiǎn) 單 類 型 值 或 p o j o 屬 性 值 , 如 果 p a r a m e t e r T y p e 傳 輸 單 個(gè) 簡(jiǎn) 單 類 型 值 , {}表示拼接 sql 串,通過可以將parameterType傳入的內(nèi)容拼接在sql中且不進(jìn)行jdbc類型轉(zhuǎn)換,可以將parameterType傳入的內(nèi)容拼接在sql中且不進(jìn)行jdbc類型轉(zhuǎn)換,{}可以接收簡(jiǎn)單類型值或 pojo 屬性值,如果 parameterType 傳輸單個(gè)簡(jiǎn)單類型值,表示拼接sql串,通過可以將parameterType傳入的內(nèi)容拼接在sql中且不進(jìn)行jdbc類型轉(zhuǎn)換,可以將parameterType傳入的內(nèi)容拼接在sql中且不進(jìn)行jdbc類型轉(zhuǎn)換,可以接收簡(jiǎn)單類型值或pojo屬性值,如果parameterType傳輸單個(gè)簡(jiǎn)單類型值,{}括號(hào)中只能是 value。

關(guān)于@Param:

在用注解來簡(jiǎn)化xml配置的時(shí)候(比如Mybatis的Mapper.xml映射文件中的sql參數(shù)引入);

@Param注解的作用是給參數(shù)命名,參數(shù)命名后就能根據(jù)名字得到參數(shù)值,正確的將參數(shù)傳入sql語(yǔ)句中(一般通過#{}的方式,${}會(huì)有sql注入的問題)。

#{}: 解析為一個(gè) JDBC 預(yù)編譯語(yǔ)句(prepared statement)的參數(shù)標(biāo)記符,一個(gè) #{ } 被解析為一個(gè)參數(shù)占位符 。 ${}: 僅僅為一個(gè)純碎的 string 替換,在動(dòng)態(tài) SQL 解析階段將會(huì)進(jìn)行變量替換。

MyBatis 的真正強(qiáng)大在于它的映射語(yǔ)句

Mapper.xml映射文件中定義了操作數(shù)據(jù)庫(kù)的sql,每個(gè)sql是一個(gè)statement,映射文件是mybatis的核心。

映射文件中有很多屬性,常用的就是parameterType(輸入類型)、resultType(輸出類型)、resultMap()、rparameterMap()。

實(shí)例步驟

先建好實(shí)體類Teacher和接口類

Teacher類

package com.lanou3g.mybaties.bean;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Teacher {
  private Integer id;
  private String tname;
  private Integer age;
  private Integer salary;
public Teacher(){}
  @Override
  public String toString() {
    return "Teacher{" +
        "id=" + id +
        ", tname='" + tname + '\'' +
        ", salary=" + salary +
        ", remark='" + remark + '\'' +
        ", age=" + age +
        '}';
  }
  private String remark;
  public Teacher(Integer id, String tname, Integer age, Integer salary, String remark) {
    this.id = id;
    this.tname = tname;
    this.age = age;
    this.salary = salary;
    this.remark = remark;
  }
  public Teacher(Integer id) {
    this.id = id;
  }  
}

接口類

package com.lanou3g.mybaties.dao;
import com.lanou3g.mybaties.bean.Teacher;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TeacherDao {
  List<Teacher> queryAll();
  Teacher queryById(int id);
  Teacher queryByIdAndAge(@Param("id") int id, @Param("age") int age);
  int insertTeacher(Teacher teacher);
  int insertTeacherByParam(@Param("tname") String tname, @Param("age") int age);
  int updateTeacherById(Teacher teacher);
  int deleteTeacherById(int id);
}

主要還是xml配置文件的配置,下面是 mybatis_conf.xml文件,它主要引入外部的properties文件(用于配置數(shù)據(jù)源)、定義類型別名(全局)、配置多套環(huán)境的數(shù)據(jù)庫(kù)連接參數(shù)及引入哪些Mapper映射文件等

mybatis_conf.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>
  <properties resource="jdbc.properties" />
  <settings>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  </settings>
  <typeAliases>
    <!--這樣我們就可以在mybatis的的上下文中使用Teacher來代替全路徑名了,減少配置的復(fù)雜度。 -->
    <typeAlias type="com.lanou3g.mybaties.bean.Teacher" alias="Teacher" />
  <!--default屬性,這個(gè)屬性作用就是指定當(dāng)前情況下使用哪個(gè)數(shù)據(jù)庫(kù)配置,
  也就是使用哪個(gè)<environment>節(jié)點(diǎn)的配置,
  default的值就是配置的<environment>標(biāo)簽元素的id值。-->
  <environments default="test">
    <environment id="test">
      <!-- 事務(wù)管理器:
     MANAGED: 這個(gè)配置就是告訴mybatis不要干預(yù)事務(wù),具體行為依賴于容器本身的事務(wù)處理邏輯。
     JDBC: 這個(gè)配置就是直接使用了 JDBC 的提交和回滾設(shè)置,它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)作用域。
    -->
      <!-- 使用jdbc事務(wù)管理 -->
      <transactionManager type="JDBC"/>
      <!-- 數(shù)據(jù)庫(kù)連接池 -->
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
      </dataSource>
    </environment>
  </environments>
  <!--<mappers>用來在mybatis初始化的時(shí)候,告訴mybatis需要引入哪些Mapper映射文件。-->
  <mappers>
    <!--通過class屬性指定mapper接口名稱,此時(shí)對(duì)應(yīng)的映射文件必須與接口位于同一路徑下,
    并且名稱相同-->
    
    <!--通過resource屬性引入classpath路徑的相對(duì)資源-->
    <mapper resource="mapper/TeacherMapper.xml" />
   
  </mappers>
</configuration>

TeacherMapper.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">
<!-- namespace對(duì)應(yīng)空Dao接口的全名 -->
<!--namespace屬性
在MyBatis中,Mapper中的namespace用于綁定Dao接口的,即面向接口編程。
它的好處在于當(dāng)使用了namespace之后就可以不用寫接口實(shí)現(xiàn)類,
業(yè)務(wù)邏輯會(huì)直接通過這個(gè)綁定尋找到相對(duì)應(yīng)的SQL語(yǔ)句進(jìn)行對(duì)應(yīng)的數(shù)據(jù)處理-->
<mapper namespace="com.lanou3g.mybaties.dao.TeacherDao">
  <!-- 此處的id是查詢語(yǔ)句的名稱,對(duì)應(yīng)接口中的方法名 -->
  <!--指定 resultType 返回值類型時(shí) Teacher 類型的,
    Teacher 在這里是一個(gè)別名,代表的是 com.lanou3g.mybaties.bean.Teacher
    對(duì)于引用數(shù)據(jù)類型,都是將大寫字母轉(zhuǎn)小寫,比如 HashMap 對(duì)應(yīng)的別名是 'hashmap'
    基本數(shù)據(jù)類型考慮到重復(fù)的問題,會(huì)在其前面加上 '_',比如 byte 對(duì)應(yīng)的別名是 '_byte'
-->
  <select id="queryAll" resultType="Teacher">
    <!--
     通過 resultType 指定查詢的結(jié)果是 Teacher 類型的數(shù)據(jù)
     只需要指定 resultType 的類型,MyBatis 會(huì)自動(dòng)將查詢的結(jié)果映射成 JavaBean 中的屬性
      -->
  select * from teacher;
 </select>
  <!-- 帶一個(gè)簡(jiǎn)單類型的參數(shù), 這種情況下parameterType屬性可以省略,
  mybatis可以自動(dòng)推斷出類型 -->
  <select id="queryById" resultType="Teacher">
        select * from teacher where id = #{id};
  </select>
  <!-- 帶兩個(gè)參數(shù),需要在接口中通過@Param注解指定名稱(因?yàn)榫幾g時(shí)參數(shù)名不會(huì)保留) -->
  <select id="queryByIdAndAge" resultType="Teacher">
    select * from teacher where id = #{id} and age &lt;= #{age};
  </select>
  <!-- insert、update、delete的返回值都是int(影響行數(shù)) -->
  <!-- 自定義類型參數(shù),通過#{屬性名}可以直接獲取引入類型參數(shù)的屬性值 -->
  <insert id="insertTeacher" parameterType="Teacher">
    insert into teacher(tname) values (#{tname});
  </insert>
  <insert id="insertTeacherByParam">
    insert into teacher(tname, age) values (#{tname}, #{age});
  </insert>
  <update id="updateTeacherById" parameterType="Teacher">
    update teacher set tname = #{tname}, age = #{age} where id = #{id}
  </update>
  <delete id="deleteTeacherById">
    delete from teacher where id = #{id};
  </delete>
</mapper>

前面完成后,就要測(cè)試了。不過在測(cè)試時(shí)需要實(shí)例化創(chuàng)建對(duì)象,因要實(shí)現(xiàn)多個(gè)方法,在這先建MyBatisTools.java工具類,其主要進(jìn)行封裝Mybatis初始化操作,要求支持創(chuàng)建多env sqlSessionFactory,整個(gè)應(yīng)用生命周期內(nèi)相同env的sqlSessionFactory對(duì)象只有一個(gè)(這個(gè)類不要過于探究,會(huì)用即可)。

MyBatisTools.java

package com.lanou3g.mybaties;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.concurrent.ConcurrentHashMap;
/**
 * 封裝Mybatis初始化操作
 * 支持創(chuàng)建多env sqlSessionFactory
 * 整個(gè)應(yīng)用生命周期內(nèi)相同env的sqlSessionFactory對(duì)象只有一個(gè)
 */
@Slf4j
public class MyBatisTools {
  private static ConcurrentHashMap<String, SqlSessionFactory> factoryMap = new MyConcurrentHashMap();
  private static MyBatisTools myBatisTools;
  private MyBatisTools() {}
  public static MyBatisTools getInstance() {
    if(myBatisTools == null) {
      synchronized (MyBatisTools.class) {
        if(myBatisTools == null) {
          myBatisTools = new MyBatisTools();
        }
      }
    }
    log.debug("當(dāng)前一共有: " + factoryMap.size() +"個(gè)SqlSessionFactory實(shí)例");
    log.debug("他們分別是: " + factoryMap);
    return myBatisTools;
  }
  public SqlSessionFactory getSessionFactory(String env) {
    try {
      // 1. 讀入配置文件
      InputStream in = Resources.getResourceAsStream("mybatis_conf.xml");
      // 2. 構(gòu)建SqlSessionFactory(用于獲取sqlSession)
      SqlSessionFactory sessionFactory = null;
      synchronized (factoryMap) {
        if(factoryMap.containsKey(env)) {
          return factoryMap.get(env);
        } else {
          sessionFactory = new SqlSessionFactoryBuilder().build(in, env);
          factoryMap.put(env, sessionFactory);
        }
      }
      return sessionFactory;
    } catch (Exception e) {
      log.error("初始化SqlSessionFactory失敗", e);
      return null;
    }
  }
  public SqlSession openSession() {
    return getSessionFactory(null).openSession();
  }
  public SqlSession openSession(boolean autoCommit) {
    return getSessionFactory(null).openSession(autoCommit);
  }
  public SqlSession openSession(ExecutorType executorType, boolean autoCommit) {
    return getSessionFactory(null).openSession(executorType, autoCommit);
  }
}
/**
 * 繼承原生ConcurrentHashMap,處理null key問題
 */
class MyConcurrentHashMap extends ConcurrentHashMap {
  @Override
  public Object put(Object key, Object value) {
    if(key == null) {
      key = "null";
    }
    return super.put(key, value);
  }
  @Override
  public boolean containsKey(Object key) {
    if(key == null) {
      key = "null";
    }
    return super.containsKey(key);
  }
  @Override
  public Object get(Object key) {
    if(key == null) {
      key = "null";
    }
    return super.get(key);
  }
}

最后就是測(cè)試,在AppTest類測(cè)試

AppTest

@Slf4j
public class AppTest 
{
  /**
   * Rigorous Test :-)
   */
  TeacherDao teacherDao = null;
  @Before
  public void setUp() {  
    teacherDao = MyBatisTools.getInstance().openSession(true).getMapper(TeacherDao.class);
  }
  /**
   * 練習(xí)查詢多個(gè)庫(kù)(用到了多環(huán)境配置)
   */ 
  @Test
  public void textqueryById(){
    Teacher teacher=teacherDao.queryById(1);
    System.out.println(teacher);
  }
  @Test
  public void text(){
    List<Teacher> teachers=teacherDao.queryAll();
    System.out.println(teachers);
  }
  /**
   * 多個(gè)參數(shù)查詢語(yǔ)句
   */
  @Test
  public void testQueryByIdAndAge() {
    Teacher teacherList = teacherDao.queryByIdAndAge(1, 65);
    log.info("查詢結(jié)果:" + teacherList);
  }
  @Test
  public void testInsert() {
    // 新增Teacher表
    System.out.println("--------------插入前:");
    List<Teacher> teacherList = teacherDao.queryAll();
    System.out.println(teacherList);
    int ret = teacherDao.insertTeacher(new Teacher("好人"));
    log.info("影響的行數(shù): " + ret);
    // 比較low的寫法(不推薦)
    //int ret = teacherDao.insertTeacherByParam("哈哈哥", 99);
    //log.info("影響的行數(shù): " + ret);
    System.out.println("--------------插入后:");
    teacherList = teacherDao.queryAll();
    System.out.println(teacherList);
  }
  @Test
  public void testUpdate() {
    Teacher teacher = new Teacher();
    teacher.setId(6);
    teacher.setAge(99);
    teacher.setTname("喬巴老師");
    int rows = teacherDao.updateTeacherById(teacher);
    log.info("更新行數(shù):" + rows);
  }
  @Test
  public void testDelete() {
    int rows = teacherDao.deleteTeacherById(13);
    log.info("刪除行數(shù):" + rows);
  }
  @Test
  public void testinsertTeacherByParam(){
int row=teacherDao.insertTeacherByParam("hh",22);
    System.out.println(row);
  }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Java面試必備之AQS阻塞隊(duì)列和條件隊(duì)列

    Java面試必備之AQS阻塞隊(duì)列和條件隊(duì)列

    我們大概知道AQS就是一個(gè)框架,把很多功能都給實(shí)現(xiàn)了(比如入隊(duì)規(guī)則,喚醒節(jié)點(diǎn)中的線程等),我們?nèi)绻褂玫脑捴恍枰獙?shí)現(xiàn)其中的一些方法(比如tryAcquire等)就行了!這次主要說說AQS中阻塞隊(duì)列的的入隊(duì)規(guī)則還有條件變量,需要的朋友可以參考下
    2021-06-06
  • Java synchronized同步方法詳解

    Java synchronized同步方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java synchronized同步方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java中HashSet和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中HashSet和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java中HashSet和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下
    2017-04-04
  • java實(shí)現(xiàn)數(shù)字轉(zhuǎn)換人民幣中文大寫工具

    java實(shí)現(xiàn)數(shù)字轉(zhuǎn)換人民幣中文大寫工具

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)數(shù)字轉(zhuǎn)換人民幣中文大寫工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 淺談mybatisPlus的Ipage分頁(yè)和map參數(shù)的問題

    淺談mybatisPlus的Ipage分頁(yè)和map參數(shù)的問題

    這篇文章主要介紹了mybatisPlus的Ipage分頁(yè)和map參數(shù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Mybatis-Plus開發(fā)提速器mybatis-plus-generator-ui詳解

    Mybatis-Plus開發(fā)提速器mybatis-plus-generator-ui詳解

    這篇文章主要介紹了Mybatis-Plus開發(fā)提速器mybatis-plus-generator-ui,本文簡(jiǎn)要介紹一款基于Mybatis-Plus的代碼自助生成器,文章通過實(shí)例集成的方式來詳細(xì)講解mybatis-plus-generator-ui,從相關(guān)概念到實(shí)際集成案例,以及具體的擴(kuò)展開發(fā)介紹,需要的朋友可以參考下
    2022-11-11
  • Java 爬蟲服務(wù)器被屏蔽的解決方案

    Java 爬蟲服務(wù)器被屏蔽的解決方案

    這篇文章主要介紹了Java 爬蟲服務(wù)器被屏蔽的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 詳解Java方法method的定義與調(diào)用及重載

    詳解Java方法method的定義與調(diào)用及重載

    方法,也稱函數(shù),如果想要重復(fù)一段或者多段代碼塊的使用,可以將這些代碼封裝成一個(gè)方法,方法具體表現(xiàn)為某種行為,使用方法可以提高代碼的復(fù)用性
    2022-04-04
  • Java中Buffer緩沖區(qū)的ByteBuffer類詳解

    Java中Buffer緩沖區(qū)的ByteBuffer類詳解

    這篇文章主要介紹了Java中Buffer緩沖區(qū)的ByteBuffer類詳解,ByteBuffer類是Java NIO庫(kù)中的一個(gè)重要類,用于處理字節(jié)數(shù)據(jù),它提供了一種靈活的方式來讀取、寫入和操作字節(jié)數(shù)據(jù),ByteBuffer類是一個(gè)抽象類,可以通過靜態(tài)方法創(chuàng)建不同類型的ByteBuffer對(duì)象,需要的朋友可以參考下
    2023-10-10
  • @SpringBootTest 注解報(bào)紅問題及解決

    @SpringBootTest 注解報(bào)紅問題及解決

    這篇文章主要介紹了@SpringBootTest 注解報(bào)紅問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論