myBatis的mapper映射文件之批量處理方式
#mybatis常見批量處理
在開發(fā)當(dāng)中,可能經(jīng)常會(huì)遇到批量處理這種情況,一般都再在java層面進(jìn)行,
其本質(zhì)是節(jié)省數(shù)據(jù)庫連接打開關(guān)閉的的次數(shù),占用更少的運(yùn)行內(nèi)存。
mybatis批量插入
<insert id="saveFeeRuleList" useGeneratedKeys="true" parameterType="java.util.List"> <selectKey resultType="java.lang.String" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO t_product_fee_rule( <include refid="Base_Column_List"/> ) VALUES <foreach collection="list" item="item" index="index" separator=","> ( #{item.id},#{item.productId}, #{item.feeCode},#{item.feeValue}, #{item.remarks} ) </foreach> </insert>
mybatis批量刪除
<delete id="removeProductAgent" parameterType="java.util.HashMap"> <foreach collection="maps.agentIds" item="item" index="index" open="" close="" separator=";"> DELETE FROM t_product_agent WHERE 1 = 1 AND product_id = #{maps.productId} AND agent_id = #{item} </foreach> </delete>
此處的maps接口中的@Param值對應(yīng),屬于自定義變量。
void removeProductAgent(@Param("maps")Map<String, Object> map);
mybatis批量修改
<update id="saveUpdateFeeRuleList" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="" close="" separator=";"> UPDATE t_product_fee_rule SET fee_value = #{item.feeValue}, remarks = #{item.remarks} WHERE id = #{item.id} </foreach> </update>
myBatis mapper文件詳解
本文的寫作目的主要是帶大家了解mapper的寫法
表結(jié)構(gòu):
CREATE TABLE customer ( id int(11) NOT NULL COMMENT ‘企業(yè)用戶ID', name varchar(45) DEFAULT NULL COMMENT ‘名稱', logo varchar(80) DEFAULT ‘' COMMENT ‘企業(yè)標(biāo)識(shí)', describe varchar(500) DEFAULT ‘' COMMENT ‘企業(yè)班車說明', is_enable tinyint(1) DEFAULT ‘0' COMMENT ‘是否啟用 1=啟用 0=不啟用', phone varchar(20) DEFAULT NULL COMMENT ‘客服電話', admin varchar(50) DEFAULT NULL COMMENT ‘管理員賬號', password varchar(80) DEFAULT NULL COMMENT ‘管理員密碼', uuid varchar(80) DEFAULT NULL COMMENT ‘企業(yè)唯一ID', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;
Mapper映射文件是在實(shí)際開發(fā)過程中使用最多的。
Mapper文件中包含的元素有
cache
– 配置給定命名空間的緩存。cache-ref
– 從其他命名空間引用緩存配置。resultMap
– 映射復(fù)雜的結(jié)果對象。sql
– 可以重用的 SQL 塊,也可以被其他語句引用。insert
– 映射插入語句update
– 映射更新語句delete
– 映射刪除語句select
– 映射查詢語句
本文的代碼都是用mybatis-generator生成的注釋部分是博主自己加的:
<?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綁定了與之對應(yīng)的接口,值是該接口的全限定名;這個(gè)參數(shù)有且只有一個(gè) --> <mapper namespace="cn.rainbowbus.dao.CustomerMapper"> <!-- 用來描述select語句返回字段與java屬性的映射關(guān)系。 可以有多個(gè)resultMap標(biāo)簽,用不同id區(qū)分不同標(biāo)簽。 可以實(shí)現(xiàn)一對多,多對多關(guān)系 --> <resultMap id="BaseResultMap" type="cn.rainbowbus.entity.Customer"> <!-- column是表中的字段名。 property是對應(yīng)的java屬性。 jdbcTyep: 數(shù)據(jù)庫中字段類型,它與Java中屬性類型有對應(yīng)關(guān)系,詳情看下表。 id:數(shù)據(jù)庫主鍵字段。 result:普通字段。 一對多標(biāo)簽 : collection> property:對應(yīng)的java屬性名 ofType:對應(yīng)的java屬類型 <id property="java屬性" column="author_third_id" jdbcType="BIGINT"/> <result property="java屬性" column="account_id" jdbcType="VARCHAR"/> --> <id column="id" jdbcType="INTEGER" property="id" /> <result column="name" jdbcType="VARCHAR" javaType="string" property="name" /> <result column="logo" jdbcType="VARCHAR" property="logo" /> <result column="describe" jdbcType="VARCHAR" property="describe" /> <result column="is_enable" jdbcType="BIT" property="isEnable" /> <result column="phone" jdbcType="VARCHAR" property="phone" /> <result column="admin" jdbcType="VARCHAR" property="admin" /> <result column="password" jdbcType="VARCHAR" property="password" /> <result column="uuid" jdbcType="VARCHAR" property="uuid" /> </resultMap> <!-- 可以重用的 SQL 塊,也可以被其他語句引用。 --> <sql id="Example_Where_Clause"> <where>/* where 可以自動(dòng)去除sql語句where關(guān)鍵字后的and關(guān)鍵字*/ /* 向sql傳遞數(shù)組或List, mybatis使用foreach解析,可以做批量處理。 collection:傳入的集合的變量名稱(要遍歷的值)。 item:每次循環(huán)將循環(huán)出的數(shù)據(jù)放入這個(gè)變量中。 open:循環(huán)開始拼接的字符串。 close:循環(huán)結(jié)束拼接的字符串。 separator:循環(huán)中拼接的分隔符。 */ <foreach collection="oredCriteria" item="criteria" separator="or"> /* 判斷語句,test值等于true執(zhí)行等于false跳過 test可以是一個(gè)值為Boolean型的計(jì)算語句 */ <if test="criteria.valid"> /* 前綴'and' 被'(' 替換 prefix:前綴覆蓋并增加其內(nèi)容 不寫的話默認(rèn)替換為空 suffix:后綴覆蓋并增加其內(nèi)容 不寫的話默認(rèn)替換為空 prefixOverrides:前綴判斷的條件 suffixOverrides:后綴判斷的條件 */ <trim prefix="(" prefixOverrides="and" suffix=")"> <foreach collection="criteria.criteria" item="criterion"> /* choose 是或(or)的關(guān)系。 choose標(biāo)簽是按順序判斷其內(nèi)部when標(biāo)簽中的test條件出否成立,如果有一個(gè)成立,則 choose 結(jié)束。 當(dāng) choose 中所有 when 的條件都不滿則時(shí),則執(zhí)行 otherwise 中的sql。 類似于Java 的 switch 語句,choose 為 switch,when 為 case,otherwise 則為 default。 */ <choose> <when test="criterion.noValue"> and ${criterion.condition} </when> <when test="criterion.singleValue"> and ${criterion.condition} #{criterion.value} </when> <when test="criterion.betweenValue"> and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} </when> <when test="criterion.listValue"> and ${criterion.condition} <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> #{listItem} </foreach> </when> </choose> </foreach> </trim> </if> </foreach> </where> </sql> <sql id="Update_By_Example_Where_Clause"> <where> <foreach collection="example.oredCriteria" item="criteria" separator="or"> <if test="criteria.valid"> <trim prefix="(" prefixOverrides="and" suffix=")"> <foreach collection="criteria.criteria" item="criterion"> <choose> <when test="criterion.noValue"> and ${criterion.condition} </when> <when test="criterion.singleValue"> and ${criterion.condition} #{criterion.value} </when> <when test="criterion.betweenValue"> and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} </when> <when test="criterion.listValue"> and ${criterion.condition} <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> #{listItem} </foreach> </when> </choose> </foreach> </trim> </if> </foreach> </where> </sql> <sql id="Base_Column_List"> <if test="fields == null"> id, name, logo, describe, is_enable, phone, admin, password, uuid </if> <if test="fields != null"> ${fields} </if> </sql> <!-- select查詢語句標(biāo)簽 id: 與namespace接口中的方法名對應(yīng) parameterType: 參數(shù)類型 resultMap : 返回值類型 自增IDset到對象中: useGeneratedKeys="true" keyProperty="id" keyColumn="id" 支持類型簡寫,詳情看下表 --> <select id="selectByExample" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="cn.rainbowbus.entity.CustomerExample" resultMap="BaseResultMap"> select <if test="distinct"> distinct </if> <include refid="Base_Column_List" />/*引入一個(gè)SQL模塊*/ from customer <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> <if test="orderByClause != null"> order by ${orderByClause} </if> <if test="startRow != null"> limit #{startRow} , #{pageSize} </if> </select> <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> select id,name,logo,describe,is_enable,phone,admin,password,uuid from customer where id = #{id,jdbcType=INTEGER} </select> <!-- delete刪除語句標(biāo)簽 id: 與namespace接口中的方法名對應(yīng) parameterType: 參數(shù)類型 --> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> delete from customer where id = #{id,jdbcType=INTEGER} </delete> <delete id="deleteByExample" parameterType="cn.rainbowbus.entity.CustomerExample"> delete from customer <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> </delete> <!--插入語句--> <insert id="insert" parameterType="cn.rainbowbus.entity.Customer"> insert into customer (id, name, logo, describe, is_enable, phone, admin, password, uuid ) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{logo,jdbcType=VARCHAR}, #{describe,jdbcType=VARCHAR}, #{isEnable,jdbcType=BIT}, #{phone,jdbcType=VARCHAR}, #{admin,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{uuid,jdbcType=VARCHAR} ) </insert> <insert id="insertSelective" parameterType="cn.rainbowbus.entity.Customer"> insert into customer <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if> <if test="name != null"> name, </if> <if test="logo != null"> logo, </if> <if test="describe != null"> describe, </if> <if test="isEnable != null"> is_enable, </if> <if test="phone != null"> phone, </if> <if test="admin != null"> admin, </if> <if test="password != null"> password, </if> <if test="uuid != null"> uuid, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> #{id,jdbcType=INTEGER}, </if> <if test="name != null"> #{name,jdbcType=VARCHAR}, </if> <if test="logo != null"> #{logo,jdbcType=VARCHAR}, </if> <if test="describe != null"> #{describe,jdbcType=VARCHAR}, </if> <if test="isEnable != null"> #{isEnable,jdbcType=BIT}, </if> <if test="phone != null"> #{phone,jdbcType=VARCHAR}, </if> <if test="admin != null"> #{admin,jdbcType=VARCHAR}, </if> <if test="password != null"> #{password,jdbcType=VARCHAR}, </if> <if test="uuid != null"> #{uuid,jdbcType=VARCHAR}, </if> </trim> </insert> <select id="countByExample" parameterType="cn.rainbowbus.entity.CustomerExample" resultType="java.lang.Long"> select count(*) from customer <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> </select> <update id="updateByExampleSelective" parameterType="map"> update customer <set> <if test="record.id != null"> id = #{record.id,jdbcType=INTEGER}, </if> <if test="record.name != null"> name = #{record.name,jdbcType=VARCHAR}, </if> <if test="record.logo != null"> logo = #{record.logo,jdbcType=VARCHAR}, </if> <if test="record.describe != null"> describe = #{record.describe,jdbcType=VARCHAR}, </if> <if test="record.isEnable != null"> is_enable = #{record.isEnable,jdbcType=BIT}, </if> <if test="record.phone != null"> phone = #{record.phone,jdbcType=VARCHAR}, </if> <if test="record.admin != null"> admin = #{record.admin,jdbcType=VARCHAR}, </if> <if test="record.password != null"> password = #{record.password,jdbcType=VARCHAR}, </if> <if test="record.uuid != null"> uuid = #{record.uuid,jdbcType=VARCHAR}, </if> </set> <if test="_parameter != null"> <include refid="Update_By_Example_Where_Clause" /> </if> </update> <update id="updateByExample" parameterType="map"> update customer set id = #{record.id,jdbcType=INTEGER}, name = #{record.name,jdbcType=VARCHAR}, logo = #{record.logo,jdbcType=VARCHAR}, describe = #{record.describe,jdbcType=VARCHAR}, is_enable = #{record.isEnable,jdbcType=BIT}, phone = #{record.phone,jdbcType=VARCHAR}, admin = #{record.admin,jdbcType=VARCHAR}, password = #{record.password,jdbcType=VARCHAR}, uuid = #{record.uuid,jdbcType=VARCHAR} <if test="_parameter != null"> <include refid="Update_By_Example_Where_Clause" /> </if> </update> <update id="updateByPrimaryKeySelective" parameterType="cn.rainbowbus.entity.Customer"> update customer <set> <if test="name != null"> name = #{name,jdbcType=VARCHAR}, </if> <if test="logo != null"> logo = #{logo,jdbcType=VARCHAR}, </if> <if test="describe != null"> describe = #{describe,jdbcType=VARCHAR}, </if> <if test="isEnable != null"> is_enable = #{isEnable,jdbcType=BIT}, </if> <if test="phone != null"> phone = #{phone,jdbcType=VARCHAR}, </if> <if test="admin != null"> admin = #{admin,jdbcType=VARCHAR}, </if> <if test="password != null"> password = #{password,jdbcType=VARCHAR}, </if> <if test="uuid != null"> uuid = #{uuid,jdbcType=VARCHAR}, </if> </set> where id = #{id,jdbcType=INTEGER} </update> <update id="updateByPrimaryKey" parameterType="cn.rainbowbus.entity.Customer"> update customer set name = #{name,jdbcType=VARCHAR}, logo = #{logo,jdbcType=VARCHAR}, describe = #{describe,jdbcType=VARCHAR}, is_enable = #{isEnable,jdbcType=BIT}, phone = #{phone,jdbcType=VARCHAR}, admin = #{admin,jdbcType=VARCHAR}, password = #{password,jdbcType=VARCHAR}, uuid = #{uuid,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER} </update> <update id="batchUpdateByKeys" parameterType="java.util.List"> update customer <trim prefix="set" suffixOverrides=","> <trim prefix="id =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.id !=null "> when #{item.id,jdbcType=INTEGER} then #{item.id,jdbcType=INTEGER} </if> <if test="item.id ==null "> when #{item.id,jdbcType=INTEGER} then customer.id </if> </foreach> </trim> <trim prefix="name =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.name !=null "> when #{item.id,jdbcType=INTEGER} then #{item.name,jdbcType=VARCHAR} </if> <if test="item.name ==null "> when #{item.id,jdbcType=INTEGER} then customer.name </if> </foreach> </trim> <trim prefix="logo =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.logo !=null "> when #{item.id,jdbcType=INTEGER} then #{item.logo,jdbcType=VARCHAR} </if> <if test="item.logo ==null "> when #{item.id,jdbcType=INTEGER} then customer.logo </if> </foreach> </trim> <trim prefix="describe =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.describe !=null "> when #{item.id,jdbcType=INTEGER} then #{item.describe,jdbcType=VARCHAR} </if> <if test="item.describe ==null "> when #{item.id,jdbcType=INTEGER} then customer.describe </if> </foreach> </trim> <trim prefix="is_enable =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.isEnable !=null "> when #{item.id,jdbcType=INTEGER} then #{item.isEnable,jdbcType=BIT} </if> <if test="item.isEnable ==null "> when #{item.id,jdbcType=INTEGER} then customer.is_enable </if> </foreach> </trim> <trim prefix="phone =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.phone !=null "> when #{item.id,jdbcType=INTEGER} then #{item.phone,jdbcType=VARCHAR} </if> <if test="item.phone ==null "> when #{item.id,jdbcType=INTEGER} then customer.phone </if> </foreach> </trim> <trim prefix="admin =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.admin !=null "> when #{item.id,jdbcType=INTEGER} then #{item.admin,jdbcType=VARCHAR} </if> <if test="item.admin ==null "> when #{item.id,jdbcType=INTEGER} then customer.admin </if> </foreach> </trim> <trim prefix="password =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.password !=null "> when #{item.id,jdbcType=INTEGER} then #{item.password,jdbcType=VARCHAR} </if> <if test="item.password ==null "> when #{item.id,jdbcType=INTEGER} then customer.password </if> </foreach> </trim> <trim prefix="uuid =case id" suffix="end,"> <foreach collection="recordList" index="index" item="item"> <if test="item.uuid !=null "> when #{item.id,jdbcType=INTEGER} then #{item.uuid,jdbcType=VARCHAR} </if> <if test="item.uuid ==null "> when #{item.id,jdbcType=INTEGER} then customer.uuid </if> </foreach> </trim> </trim> where id in( <foreach collection="recordList" index="index" item="item" separator=","> #{item.id,jdbcType=INTEGER} </foreach> ) </update> <insert id="batchInsert" parameterType="cn.rainbowbus.entity.Customer"> insert into customer (id, name, logo, describe, is_enable, phone, admin, password, uuid) values <foreach collection="list" item="item" index="index" separator="," > (#{item.id,jdbcType=INTEGER}, #{item.name,jdbcType=VARCHAR}, #{item.logo,jdbcType=VARCHAR}, #{item.describe,jdbcType=VARCHAR}, #{item.isEnable,jdbcType=BIT}, #{item.phone,jdbcType=VARCHAR}, #{item.admin,jdbcType=VARCHAR}, #{item.password,jdbcType=VARCHAR}, #{item.uuid,jdbcType=VARCHAR})</foreach> </insert> <delete id="batchDeleteByKeys" parameterType="java.lang.Integer"> delete from customer where id in ( <foreach collection="ids" index="index" item="id" separator=","> #{id} </foreach> ) </delete> </mapper>
注意
#{}占位符: 占位
如果傳入的是基本類型,那么#{}中的變量名稱可以隨意寫
如果傳入的參數(shù)是pojo類型,那么#{}中的變量名稱必須是pojo中的屬性.屬性名(user.username)
$ {}拼接符: 字符串原樣拼接(有sql注入的風(fēng)險(xiǎn))
如果傳入的是基本類型,那么中 的 變 量 名 必 須 是 v a l u e 如 果 傳 入 的 參 數(shù) 是 p o j o 類 型 , 那 么 {}中的變量名必須是value 如果傳入的參數(shù)是pojo類型,那么中的變量名必須是value如果傳入的參數(shù)是pojo類型,那么{}中的變量名稱必須是pojo中的屬性.屬性名(user.username)
注意:使用拼接符有可能造成sql注入,在頁面輸入的時(shí)候可以加入校驗(yàn),不可輸入sql關(guān)鍵字,不可輸入空格
注意:如果是取簡單數(shù)量類型的參數(shù),括號中的值必須為value
例: select * from user where username like ‘%${value}%'
可以這樣寫來解決sql注入:select * from user where username like ‘%' #{name}'%'(開發(fā)經(jīng)常使用)
動(dòng)態(tài)SQL
Mybatis提供了9種動(dòng)態(tài)sql標(biāo)簽:trim | where | set | foreach | if | choose | when | otherwise | bind。
1.判斷語句if
判斷語句,test值等于true執(zhí)行等于false跳過,test可以是一個(gè)值為Boolean型的計(jì)算語句
<if test="true"> </if>
2.修剪語句:trim
- 前綴'and' 被'(' 替換
prefix
:前綴覆蓋并增加其內(nèi)容 不寫的話默認(rèn)替換為空suffix
:后綴覆蓋并增加其內(nèi)容 不寫的話默認(rèn)替換為空prefixOverrides
:前綴判斷的條件suffixOverrides
:后綴判斷的條件
<trim prefix="(" suffix=")" prefixOverrides="and" ></trim>
3.循環(huán)語句:foreach
- 向sql傳遞數(shù)組或List, mybatis使用foreach解析,可以做批量處理。
collection
:傳入的集合的變量名稱(要遍歷的值)。item
:每次循環(huán)將循環(huán)出的數(shù)據(jù)放入這個(gè)變量中。open
:循環(huán)開始拼接的字符串。close
:循環(huán)結(jié)束拼接的字符串。separator
:循環(huán)中拼接的分隔符。
<foreach collection="oredCriteria" item="criteria" separator="or"></foreach>
4.選擇語句:choose
類似于Java 的 switch 語句,choose 為 switch,when 為 case,otherwise 則為 default。
choose 是或(or)的關(guān)系。choose標(biāo)簽是按順序判斷其內(nèi)部when標(biāo)簽中的test條件出否成立,如果有一個(gè)成立,則 choose 結(jié)束。當(dāng) choose 中所有 when 的條件都不滿則時(shí),則執(zhí)行 otherwise 中的sql。
<choose> <when test="false"> ... </when> <when test="true"> ... </when> <otherwise> ...同樣這不是必須的 </otherwise> </choose>
mapper對應(yīng)的Java接口文件:
package cn.rainbowbus.dao; import cn.rainbowbus.entity.Customer; import cn.rainbowbus.entity.CustomerExample; import java.util.List; import org.apache.ibatis.annotations.Param; public interface CustomerMapper { long countByExample(CustomerExample example); int deleteByExample(CustomerExample example); int deleteByPrimaryKey(Integer id); int insert(Customer record); int insertSelective(Customer record); List<Customer> selectByExample(CustomerExample example); Customer selectByPrimaryKey(Integer id); int updateByExampleSelective(@Param("record") Customer record, @Param("example") CustomerExample example); int updateByExample(@Param("record") Customer record, @Param("example") CustomerExample example); int updateByPrimaryKeySelective(Customer record); int updateByPrimaryKey(Customer record); int batchUpdateByKeys(@Param("recordList") List<Customer> recordList); void batchInsert(List<Customer> recordLst); int batchDeleteByKeys(@Param("ids") Integer[] ids); }
mybatis支持別名:
別名 | 映射類型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
map | Map |
jdbcType與JavaType的映射關(guān)系
jdbcType | Java Type |
---|---|
CHAR | String |
ARCHAR | String |
ONGVARCHAR | String |
UMERIC | java.math.BigDecimal |
ECIMAL | java.math.BigDecimal |
IT | boolean |
OOLEAN | boolean |
INYINT | byte |
SMALLINT | short |
INTEGER | int |
BIGINT | long |
REAL | float |
FLOAT | double |
DOUBLE | double |
BINARY | byte[] |
VARBINARY | byte[] |
LONGVARBINARY | byte[] |
DATE | java.sql.Date |
TIME | java.sql.Time |
TIMESTAMP | java.sql.Timestamp |
CLOB | Clob |
BLOB | Blob |
ARRAY | Array |
DISTINCT | mapping of underlying type |
STRUCT | Struct |
REF | Ref |
DATALINK | java.net.URL[color=red][/color] |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Mybatis映射文件詳解之mapper.xml文件
- Java?Mybatis的初始化之Mapper.xml映射文件的詳解
- 解決Mybatis映射文件mapper.xml中的注釋問題
- mybatis中映射文件(mapper)中的使用規(guī)則
- mybatis整合spring實(shí)現(xiàn)開啟mapper.xml映射文件掃描
- mybatis映射文件mapper.xml的具體寫法
- 解決Mybatis在IDEA中找不到mapper映射文件的問題
- Mybatis中Mapper映射文件使用詳解
- 詳解mybatis通過mapper接口加載映射文件
- MyBatis Mapper映射文件配置的實(shí)現(xiàn)
相關(guān)文章
springboot發(fā)布dubbo服務(wù)注冊到nacos實(shí)現(xiàn)方式
這篇文章主要介紹了springboot發(fā)布dubbo服務(wù)注冊到nacos實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09java中構(gòu)造方法及this關(guān)鍵字的用法實(shí)例詳解(超詳細(xì))
大家都知道,java作為一門內(nèi)容豐富的編程語言,其中涉及的范圍是十分廣闊的,下面這篇文章主要給大家介紹了關(guān)于java中構(gòu)造方法及this關(guān)鍵字用法的相關(guān)資料,需要的朋友可以參考下2022-04-04SpringBoot自動(dòng)裝配之@Import深入講解
由于最近的項(xiàng)目需求,需要在把配置類導(dǎo)入到容器中,通過查詢,使用@Import注解就能實(shí)現(xiàn)這個(gè)功能,@Import注解能夠幫我們吧普通配置類(定義為Bean的類)導(dǎo)入到IOC容器中2023-01-01SpringBoot 使用hibernate validator校驗(yàn)
這篇文章主要介紹了SpringBoot 使用hibernate validator校驗(yàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11SpringBoot自動(dòng)配置深入探究實(shí)現(xiàn)原理
在springboot的啟動(dòng)類中可以看到@SpringBootApplication注解,它是SpringBoot的核心注解,也是一個(gè)組合注解。其中@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三個(gè)注解尤為重要。今天我們就來淺析這三個(gè)注解的含義2022-08-08java 刪除數(shù)組元素與刪除重復(fù)數(shù)組元素的代碼
在java中刪除數(shù)組元素與過濾重復(fù)數(shù)組元素我們都會(huì)需要去遍歷數(shù)組然后根據(jù)我們設(shè)置的值或方法進(jìn)行去除數(shù)組2013-10-10使用okhttp替換Feign默認(rèn)Client的操作
這篇文章主要介紹了使用okhttp替換Feign默認(rèn)Client的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02