mybatis与java传参方式简述

在SSM框架中,我们会使用mybatis做java与数据库之间的交互。在最基本的CRUD操作中,有时我们会传递不同类型的数据给sql数据库,如基本数据类型,自定义类,list/set集合,Map集合等等。

本文将给出java部分和mybatis部分关键代码的书写注意事项,对于不同的参数,该如何与mybatis进行数据交互。

一、java–>mybatis传入参数
1. 若干普通参数
java部分代码:
@Repository
public interface TestRepository {
	int selectMessage(String name, int age);
}
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.test.TestRepository ">
 <select id="selectMessage" resultType="java.lang.Integer">
        select id from testUser
        where name = #{param1} and age=#{param2}
    </select>
</mapper>

在这种写法中,param1,2…表示的是参数在java方法中的形参顺序,从1开始计数。

2.自定义类
java部分代码:
@Repository
public interface TestRepository {
	int selectMessage(User user);
}

class User{
	private String name;
	private int age;
	// get/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.test.TestRepository ">
 <select id="selectMessage" paramType="User" resultType="java.lang.Integer">
        select id from testUser
        where name = #{name} and age=#{age}
    </select>
</mapper>

在此种写法中,#{}内部直接写类的属性名即可。

注:要写paramType="",里面的值是User的全路径。

可以在mybatis的配置文件中写别名,写别名之后就不需要再写User的全路径了。

 <!--项目下所有的类名-->
    <typeAliases>
        <!--User类-->
        <typeAlias type="com.test.User" alias="User"/>
    </typeAliases>

此时,根据alias的值来识别当前User具体是哪一个类文件。

3.普通数据类型List集合
java部分代码:
@Repository
public interface TestRepository {
	List<Integer> selectMessage(List<String> names);
}
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.test.TestRepository ">
 <select id="selectMessage" paramType="java.lang.String" resultType="java.lang.Integer">
        select id from testUser
        where name IN 
         <foreach collection="list" item="name" index="index" open="(" close=")" separator=",">
            #{name}
        </foreach>
    </select>
</mapper>

此时foreach标签内的collection固定写法list即可。

注:此时paramType与resultType,里面的值是集合内的数据类型,如(String,Integer),而不是java.util.List。
4.普通数据类型Set集合
java部分代码:
@Repository
public interface TestRepository {
	List<Integer> selectMessage(Set<String> names);
}
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.test.TestRepository ">
 <select id="selectMessage" paramType="java.lang.String" resultType="java.lang.Integer">
        select id from testUser
        where name IN 
         <foreach collection="collection" item="name" index="index" open="(" close=")" separator=",">
            #{name}
        </foreach>
    </select>
</mapper>
与list不同,除list以外的集合,在foreach标签内统一写成collection即可。
注:此时paramType与resultType,里面的值是集合内的数据类型,如(String,Integer),而不是java.util.List。
5.对象数据类型List集合
java部分代码:
@Repository
public interface TestRepository {
	List<Integer> selectMessage(List<User> users);
}
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.test.TestRepository ">
  <select id="test" parameterType="com.test.User" resultType="java.lang.Integer">
        SELECT id FROM user WHERE name IN
        <foreach collection="list" item="user" index="index" open="(" close=")" separator=",">
            #{user.name}
        </foreach>
    </select>
</mapper>

在此种写法中,#{}内部直接写类的属性名即可。

注:要写paramType="",里面的值是User的全路径。

可以在mybatis的配置文件中写别名,写别名之后就不需要再写User的全路径了。

 <!--项目下所有的类名-->
    <typeAliases>
        <!--User类-->
        <typeAlias type="com.test.User" alias="User"/>
    </typeAliases>

此时,根据alias的值来识别当前User具体是哪一个类文件。

6.对象数据类型Set集合
此种与上面的list集合基本一致,注意将collection的值从list改为collection即可。
二、mybatis–>java接收参数
上述示例接收到的有普通参数与普通类型参数的List集合接收方式。
因此这里只记录常见的map类型参数接收与自定义类的类型接收。
1. Map类型数据
java部分代码:
@Repository
public interface TestRepository {
	List<Map<String, Object>> test(int id);
}
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.test.TestRepository ">
 <select id="test" parameterType="java.lang.Integer" resultType="java.util.Map">
        SELECT id,name,age FROM User WHERE id = #{param1}
    </select>
</mapper>

这里的resultType需要写java.util.Map

java遍历数据部分
		// 通过id拿到数据库中的数据
        List<Map<String, Object>> ids = myTestService.test(id);
        // 对数据进行遍历
        for (Map<String, Object> keyValue : ids) {
            // 获取user对象的id
            Integer uid = Integer.parseInt(keyValue.get("id").toString());
            // 获取user对象的name
            String uname = keyValue.get("name").toString();
            // 打印输出结果
            System.out.println(id+":"+uname);
        }

注:
1.我们的repository的返回类型固定List<Map<String, Object>>
2. 每一个list内的map都对应数据库中的一行记录。其中map的key对应select语句中的列名,value对应列名下的具体值。
2. 自定义类数据
java部分代码:
@Repository
public interface TestRepository {
	User test(int id);
}
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.test.TestRepository ">
     <select id="test" parameterType="java.lang.Integer" resultType="User">
        SELECT id,name,age FROM user WHERE id = #{param1}
    </select>
</mapper>

这里的resultType需要写自定义类名,若写了别名,则不需要写类的全路径

3. 自定义类集合数据
java部分代码:
@Repository
public interface TestRepository {
	List<User> test(int id1, int id2);
}
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.test.TestRepository ">
<select id="test" parameterType="java.lang.Integer" resultType="User">
        SELECT id,name,age FROM test WHERE id IN (#{param1},#{param2})
    </select>
</mapper>
与第二种自定义类的写法基本一致。仅需注意此时的resultType为User而非list即可。

至此,关于java与mabatis的传参方式总结完毕。如有不清楚的地方,欢迎下方留言。如有错误欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值