如何将java代码把数据传入到映射文件的sql语句中?可以通过映射文件中的mapper标签中找到对应的sql语句,并且在标签上添加parameterType属性。表示dao接口中方法的参数的数据类型。
对应的映射文件的查询语句:
<select id="selectStudentById" parameterType="java.lang.Integer" resultType="com.bjpowernode.entity.Student">
select id,name,email,age from student where id=#{id}
</select>
对应的方法:
public interface StudentDao {
public abstract Student selectStudentById(Integer id);
}
parameterType : dao接口中方法参数的数据类型。 parameterType它的值是java的数据类型全限定名称或者是mybatis定义的别名 例如:parameterType="java.lang.Integer" parameterType="int" 注意:parameterType不是强制的,mybatis通过反射机制能够发现接口参数的数类型。 所以可以没有。 一般我们也不写。
问题:我们如何控制传递多个参数的情况呢?一共有四种方式,下面我主要介绍两种。
第一种:通过java参数别名与映射文件#{}中名称相同方式进行传递
对应的方法:在方法上加入@Param注解,里面的值是自定义参数名称。
public interface StudentDao {
public abstract List<Student> selectMultiParam(@Param("myname") String name,
@Param("myage") Integer age);
}
对应的映射文件含多个条件的查询语句:
<select id="selectMultiObject" resultType="com.bjpowernode.entity.Student">
select id,name, email,age from student where
name=#{myname} or age=#{myage}
</select>
在传递多个参数时,sql语句中的#{@param名称}.因此通过名称相同进行传递。
第二种:通过对象进行传递
对应的方法:
public interface StudentDao {
public abstract List<Student> selectMultiObject(QueryParam param);
}
对应的QueryParam类型:
public class QueryParam {
private String paramName;
private Integer age;
public String getParamName() {
return paramName;
}
public void setParamName(String paramName) {
this.paramName = paramName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public QueryParam(String paramName, Integer age) {
this.paramName = paramName;
this.age = age;
}
public QueryParam() {
}
@Override
public String toString() {
return "QueryParam{" +
"paramName='" + paramName + '\'' +
", age=" + age +
'}';
}
}
对应的映射文件:
<select id="selectMultiObject" resultType="com.bjpowernode.entity.Student">
select id,name, email,age from student where
name=#{paramName} or age=#{age}
</select>
利用的#{}名称和该对象的属性名相同来进行传递参数的
那又是如何得到结果集的呢?
主要介绍一种,用java对象进行接收:
resultType结果类型, 指sql语句执行完毕后, 数据转为的java对象, java类型是任意的。
resultType结果类型的值 1. 类型的全限定名称 2. 类型的别名, 例如 java.lang.Integer别名是int
处理方式:
1. mybatis执行sql语句, 然后mybatis调用类的无参数构造方法,创建对象。
2. mybatis把ResultSet指定列值与同名的属性。
例子中展示的即为:将select后的id、name、email、age这几个值传到Student类中相同的属性名中。然后返回
<select id="selectMultiPosition" resultType="com.bjpowernode.domain.Student">
select id,name, email,age from student
</select>
对等的jdbc
ResultSet rs = executeQuery(" select id,name, email,age from student" )
while(rs.next()){
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"))
}