1、关于mybatis的文件一般都是其mapper文件出错:
首先关于输入参数parameterType出错:
(1)基本数据类型:如果输入参数只有一个,其数据类型可以是基本数据类型,也可以是自己定的类型:包括int,String,Date,Integer这些。
但是要注意,在接口中的 int类型对应parameterType为int,若前面声明的是 Integer类型,则后面mapper文件中也要写Integer类型,否则报错。
//注意这里传递的类型:从controller传递过来的是Integer则,这个mapper中的parameterType必须是Integer
//若从Controller传递过来的是int,则mapper中parameterType必须是int。两者不能互用。
这个必须与controller层传递过来的类型一致。
另外在oo编程中,声明变量,能用包装类就用包装类,比如用Integer,而不用int。
int默认为0,Integer默认null。
持久层对象或者Controller、Service、Dao中用Integer。Mapper文件中用Integer
循环体,方法中用int。
这里回顾下java的基本数据类型:
基本数据类型和包装类的区别还是很大,这点估计你也是清楚的。
比如int a = 3;Integer b = new Integer(3);
a和b的值都是3,但a是值对象,b是引用对象,因此二者是不等同的。相较而言值对象使用起来更方便一些(不用手动创建对象已经实例化)
char是字符型,比如 char c = 'd',这里用的是单引号,字符串用的是双引号(String s = "s"),
它并不是整数类型,只不过jdk会对照ascII表把它转成对应的数字值,我们才可以利用这个特性。
在一般的开发中我们用String比较多而char比较少,因为char的场景多半都可以用string来处理,但这并不是说char就没有作用。只不过取决于与你编写代码的严谨程度。
另外在处理buffer流时用的都是char。
再次强调char不是整数类型,char(字符类型)在内存中占2个字节,而int(整数类型)占4个字节
关于String与char的关系:
(2)复杂数据类型:包含java实体类或者多个参数,或者Map;
关于多个参数传入有两种方法:仔细看下面的区别:
Map参数示例:
a:一种是将两个字段封装成map来进行传递给mapper文件。
xml文件
<select id="selectTeacher" parameterType="Map" resultType="com.myapp.domain.Teacher"> select * from Teacher where c_id=#{id} and sex=#{sex} </select>
java代码
Map<String,String> map=new HasMap<String,String>();
map.put("id","2");
map.put("sex","男");
List<Teacher> tList = teacherMapper.selectTeacher(map);
for (Teacher entityTemp : tList) {
System.out.println(entityTemp.toString()); }
b:第二种传入多个参数的方式:使用注解的方式来传入:
另外MyBatis还提供了一个使用注解来参入多个参数的方式。
这种方式需要在接口的参数上添加@Param注解
示例:
接口方法
public List<Teacher> selectTeacher(@Param(value="id") String id,@Param(value="sex") String sex);
XML文件
<select id="selectTeacher" parameterType="map",这里可以写也可以不写。resultType="com.myapp.domain.Teacher">
select * from Teacher where c_id=#{id} and sex=#{sex}
</select>
这个xml文件中,
备注:
mysql与java数据类型的对应: