2.【Mybatis】中paramtype输入映射详解

一、输入映射
前言Mybatis的配置文件中的select,insert,update,delete有一个属性parameter来接收mapper接口方法中的参数。可以接收的类型有简单类型和复杂类型,但是只能是一个参数。这个属性是可选的,因为Mybatis可以通过TypeHandler来判断传入的参数类型,默认值是unset.

1.各种java的基本数据类型。常用的有int,String等。

	<!--
	根据ID查询
	parameterType="参数的类型",目前只支持一个参数
	where teamId=#{id}: #{id}表示参数 id-自定义,只需要符合命名规范即可,没有实际对应意义
	-->
    <select id="queryById" parameterType="int" resultType="com.kxb.demo.pojo.Team">
        select * from team where teamId=#{id}
    </select>
    <!--删除一个球队 -->
    <delete id="del" >
        delete from team where teamId=#{id}
    </delete>
这两条语句发现输入映射即使省略了也可以执行成功,但是最好不要省,按照规范来写,养成好习惯。

用#{变量名}来取值,这里的变量名是任意的,可以用value或者是其它的什么值,这里用id是为了便于理解,并不存在什么对应关系的。因为java反射主只能够得到方法参数的类型,而无从知道参数的名字的。

2.各种类型的bean,.取值用#{属性名}。这里的属性名是和传入的bean中的属性名一一对应的,不是你随意命名的。

	<update id="update" parameterType="com.kxb.demo.pojo.Team">
        update team set teamName=#{teamName},location=#{location}
        where teamId=#{teamId}
    </update>
    <!--添加一个球队
	parameterType="com.kkb.pojo.Team" 将对象作为参数,
	#{值} 值必须是实体类中的属性名称,其实就是占位符?
	-->
    <insert id="add" parameterType="com.kxb.demo.pojo.Team" >
        INSERT INTO `team` (`teamName`, `location`, `createTime`)
        VALUES (#{teamName}, #{location}, #{createTime})
    </insert>

3.Map

传入map类型,直接通过#{keyname}就可以引用到键对应的值。使用@param注释的多个参数值也会组装成一个map数据结构,和直接传递map进来没有区别。

mapper接口:

List<Team> queryByRange2(@Param("min") Integer min, @Param("max") Integer max);
	<!--方式1:通过注解的方式:
	#{}中的名称必须与接口的方法中的参数注解@Param()保持一致
	select * from team where teamId >=#{param1} and teamId &lt;= #{param2}; 不推荐,但是语法也是正确的,但是不能使用arg0,arg1......
	-->
	<select id="queryByRange2" resultType="com.kkb.pojo.Team">
			select * from team where teamId >=#{min} and teamId &lt;= #{max};
	</select>

mapper接口:

List<Team> queryByRange3(Map<String,Object> map);
	<!--方式2:通过map来传递多个参数:映射文件中的参数占位符必须和map中的String类型的字段名称一样-->
	<select id="queryByRange3" resultType="com.kkb.pojo.Team">
			select * from team where teamId >=#{min} and teamId &lt;= #{max};
	</select>
@Test
public void test03(){
		TeamMapper teamDao= sqlSession.getMapper(TeamMapper.class);
		Map<String, Object> map=new HashMap<>();
		map.put("min",1001);
		map.put("max",2000);
		List<Team> teamList3 = teamDao.queryByRange3(map);
		for (Team team : teamList3) {
		System.out.println(team);
	}
}

4.List类型,用语句来进行迭代

mapper接口中添加方法:

void addList(List<Team> list);
	<!--批量添加-->
    <insert id="addList" >
        INSERT INTO team (teamName,location) VALUES
        <!--collection:要遍历的集合;参数是集合类型,直接写list
        item:遍历的集合中的每一个数据
        separator:将遍历的结果用,分割-->
        <foreach collection="list" item="t" separator=",">
            (#{t.teamName},#{t.location})
        </foreach>
    </insert>
//批量添加
        List<Team> list = new ArrayList<>();
        for (int i = 0; i <10 ; i++) {
            Team team = new Team();
            team.setTeamName("火箭");
            list.add(team);
        }
        teamDao.addList(list);
        sqlSession.commit();
<foreach collection="list" item="t" separator=",">当中collection名字不能随便取,要和实参一样。parameterType可以省略。

5.对象类型中的集合属性

对于单独传递的List或Array,在SQL映射文件中映射时,只能通过list或array来引用。但是如果对象类型有属性的类型为List或Array,则在sql映射文件的foreach元素中,可以直接使用属性名字来引用。

mapper接口:

List<User> selectByExample(UserExample example);
< where >
   < foreach collection = "oredCriteria" item = "criteria" separator = "or" >
     < if test = "criteria.valid" >

在这里,UserExample有一个属性叫oredCriteria,其类型为List,所以在foreach元素里直接用属性名oredCriteria引用这个List即可。

item="criteria"表示使用criteria这个名字引用每一个集合中的每一个List或Array元素

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[1\]提到,tk-mybatis支持自定义映射文件,可以通过编写XML文件来定义映射关系。在XML文件,需要指定命名空间(namespace)和具体的SQL语句,可以使用if条件语句来动态生成SQL查询条件。\[1\] 引用\[2\]提到,当使用tk.mybatis时,如果在自定义SQL过程使用了resultMap的collection映射,并在生成的Bean添加了自定义的List,可能会导致Mapper文件映射报错。\[2\] 引用\[3\]提到,继承Mapper接口后,可以继承Mapper的通用crud方法。例如,在UserMapper接口继承了Mapper<User>接口,就可以直接使用通用的crud方法。同时,可以在UserMapper接口自定义方法,如findByUser方法,用于自定义查询操作。\[3\] 综上所述,tk.mybatis可以通过自定义映射文件来定义SQL映射关系,并且支持继承Mapper接口来使用通用的crud方法。同时,可以在Mapper接口自定义方法来实现自定义的查询操作。 #### 引用[.reference_title] - *1* *3* [1_整合 tk mybatis](https://blog.csdn.net/XJ0927/article/details/111594058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [tk.mybatis使用resultmap进行collection映射问题](https://blog.csdn.net/weixin_33985507/article/details/91610227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kplusone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值