Mybatis的底层是JDBC,关于JDBC的操作,我们都知道有PreparedStatement (预处理)和Statement这两个,PreparedStatement可以防止SQL注入的危险,而在Mybatis中,传入参数的两种方式#{参数}、KaTeX parse error: Expected 'EOF', got '#' at position 6: {参数}。#̲对应的是采用PreparedS…{参数}对应的是Statement的方式。推荐使用#的方式。
相关用法:
使用#{}传入多个参数
如果Mapper接口中有多个参数,无论参数名是什么,在Mapper.xml文件中,参数都是arg0、arg1…或者param1、param2…
如果非要使用自己的参数名,可以通过@Param注解自定义
EmpMapper接口
public Integer addEmp1(String ename,String job) throws IOException;
public Integer addEmp2(String ename,String job) throws IOException;
采用#传入多个参数,在接口中对应的方法内有多个参数,无论参数名是什么,在Mapper.xml文件中,参数都是arg0、arg1…或者param1、param2…
<insert id="addEmp1">
insert into emp(ename,job)values(#{arg0},#{arg1})
</insert>
<insert id="addEmp2">
insert into emp(ename,job)values(#{param1},#{param2})
</insert>
如果非要使用自己的参数名,可以通过@Param注解自定义
public Integer addEmp4(@Param("ename")String ename,@Param("job")String job) throws IOException;
<insert id="addEmp4">
insert into emp(ename,job)values(#{ename},#{job})
</insert>
这边要说明一下,如何接口中对应的方法传入的参数是pojo对象,而映射文件里的是该对象的属性,则可以直接使用属性名
public Integer addEmp(Emp emp) throws IOException;
<insert id="addEmp" parameterType="emp">
insert into emp(ename,job)values(#{ename},#{job})
</insert>
##使用传入多个参数如果使用{}传入多个参数 如果使用传入多个参数如果使用,需要在Mapper种指定参数名字,如果没有指定@Param注解就会报错
public Emp getEmpById(@Param("empno")Integer empno) throws IOException;
<select id="getEmpById" resultType="emp">
select * from emp where empno=${empno}
</select>
这里如果使用$,只是单纯的指定@Param注解,进行新增和修改等DML操作,还是会报错
##包装类
pojo
public class UserWrapper {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
映射文件
<!-- 从包装对象中获取信息 包装对象的别名. 取信息 -->
<insert id="addUser4" parameterType="UserWrapper">
insert into t_user(name,age,favorites)values(#{user.name},#{user.age}
,#{user.favorites})
</insert>
不建议使用Map做参数。
##返回数据
###resultType
对于简单数据类型,例如查询总记录数、查询某一个用户名这一类返回值是一个基本数据类型的,直接写Java中的基本数据类型即可。
如果返回的是一个对象或者集合,并且对象中的属性和查询的字段名是一一对应的,那么resultType也可以直接写一个对象。
接口:
public Emp getEmpById(@Param("empno")Integer empno) throws IOException;
public List<Emp> selEmp() throws IOException;
映射文件:
<select id="getEmpById" resultType="emp">
select * from emp where empno=${empno}
</select>
<select id="selEmp" resultType="emp" resultMap="baseMap">
select * from emp
</select>
###resultMap
resultMap主要用来解决属性名和字段名不一致以及一对多、一对一查询等问题 字段名不一致时,首先可以通过取别名解决.
pojo
package com.zsl.pojo;
import java.util.List;
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgrA;//这里与数据库字段名称不同,数据库字段为mgr
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public