閱讀440 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Mybatis傳參總結

mybatis中手動寫sql,步驟是先在navicate中執行通過的sql,

如果是對象類型傳參,需要注意jdbcType轉換,比如:name = #{record.name,jdbcType=VARCHAR}


以下幾種方法比較常用,歡迎補充。


1.pom.xml中mybatis依賴1.2.0


<dependencies>
 <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>

</build>


2.基本類型和對象參數,可以是這樣:

ServerMapper.java:

int updateByExample(@Param("record") Server record, @Param("example") ServerExample example);


ServerMapper.xml:

<update  parameterType="map">
update server
set id = #{record.id,jdbcType=VARCHAR},
name = #{record.name,jdbcType=VARCHAR},
operatingsystem = #{record.operatingsystem,jdbcType=VARCHAR},
cpu = #{record.cpu,jdbcType=INTEGER},
applicant = #{record.applicant,jdbcType=VARCHAR},
status = #{record.status,jdbcType=VARCHAR}
<if test="_parameter != null">
<include ref />
</if>
</update>

3.僅有一個list參數,可以這樣:

ServerMapper.java:

List<ServerDetails> selectByServerIds(List<String> serverIds);


ServerMapper.xml,注意collection為:

<select  resultMap="ServerDetailsMap">

SELECT s.id, s.`name`,s.operatingsystem,s.cpu,s.disksize,s.memorysize,s.intranetip,s.vcluster,s.`owner`,s.environment,s.applicant,s.`status`,
ip.ip,ip.`status` as ipstatus, ip.segment,ip.remark,ip.line
from `server` as s , ippool as ip
where s.intranetip = ip.id
and s.id in
<foreach item="item" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>

可以傳遞一個 List 實例或者數組作為參數對象傳給 MyBatis。

當你這麼做的時,MyBatis 會自動將它包裝在一個 Map 中,用名稱作為key。List 實例將會以“” 作為key,而數組實例將會以“”作為key。


4.多個參數中包含list的情況,是這樣的(excRelatedServerIds是list類型):

ServerMapper.java文件中傳入的是包含list的map,ServerMapper.xml中的collection為


Map<String, Object> map = Maps.newHashMap();
map.put("env", env);
map.put("userId", userId);
map.put("excRelatedServerIds", excRelatedServerIds);
PageInfo<UserServerDetails> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(()-> serverMapper.selectPageByEnvAndUserExcRelated(map));

ServerMapper.xml:

 select us.id, us.user_id, us.server_id,
s.`name`, s.operatingsystem, s.cpu,s.disksize,s.memorysize, s.intranetip, s.vcluster,s.`owner`,s.environment,s.applicant,s.`status`,
ip.ip,ip.`status` as ipstatus,ip.segment,ip.remark , ip.line
from user_server as us,`server` as s, ippool as ip
where us.server_id = s.id and s.intranetip = ip.id
<if test="env != null">
and s.environment=#{env,jdbcType=INTEGER}
</if>

<if test="userId != null">
and us.user_id=#{userId,jdbcType=VARCHAR}
</if>

and s.id not in
<foreach item="item" index="index" collection="excRelatedServerIds" open="(" separator="," close=")">
#{item}
</foreach>

</select>





5.還有一種是按照順序傳參數,這種不推薦:


Mapper.java:

Public User selectUser(String name,String area);

Mapper.xml :

<select id="selectUser" resultMap="BaseResultMap">

select * from user_user_t where user_name = #{0} and user_area=#{1}

</select> 其中,#{0}代表接收的是dao層中的第一個參數,#{1}代表dao層中第二參數,更多參數一致往後加即可。



6.如果要封裝自己的返回類型,需要xml文件中定義並且去引用bean對象:

<resultMap  type="com.ServerDetails">
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="operatingsystem" jdbcType="VARCHAR" property="operatingsystem" />
<result column="cpu" jdbcType="INTEGER" property="cpu" />
<result column="disksize" jdbcType="INTEGER" property="disksize" />
<result column="memorysize" jdbcType="INTEGER" property="memorysize" />
<result column="intranetip" jdbcType="VARCHAR" property="intranetip" />
<result column="vcluster" jdbcType="VARCHAR" property="vcluster" />
<result column="owner" jdbcType="VARCHAR" property="owner" />
<result column="environment" jdbcType="INTEGER" property="environment" />
<result column="applicant" jdbcType="VARCHAR" property="applicant" />
<result column="status" jdbcType="VARCHAR" property="status" />
</resultMap>



參考:https://blog.csdn.net/u014687389/article/details/72778664?locationNum=8&fps=1

最後更新:2017-08-13 22:43:16

  上一篇:go  蘋果大戰FBI,四個回合的波折之後有哪些啟示?
  下一篇:go  人中急救穴 也可通過辨別疾病