1深入Mybatis映射配置文件
1.1查询语句
接口中
ListqueryAllUser(); User queryUserById(Integer id);
xml配置文件中
select * from user
1.2插入语句
接口中
int insertUser(User user);
xml配置文件中
insert into user (username,nick_name,email) values (#{username},#{nickName},#{email})
1.3删除语句
接口中
void deleteUserById(Integer id);
XML配置中
delete from user where id = #{id}
1.4更新语句
接口中
void updateUser(User user);
XML配置中
update user set password = #{password} where id = #{id}
1.5当接口中参数和XML配置取值时名称不一样时
在接口中的参数前加注解
User queryUserById(@Param("id") Integer xxxxxxxId);
在XML中取值时用注解指定的名称
2.#{}与${}的区别
* 它俩都可以获取接口调用中传递过来的参数
* #{}会将参数作为占位符,使用预编译语句(PreparedStatement)执行
* ${}会直接用实际参数替换${}, 参数可以作为SQL的一部分。
在某些特殊场合下只能用${},不能用#{}。例如:在使用排序时ORDER BY ${id},如果使用#{id},则会被解析成ORDER BY “id”,这显然是一种错误的写法。
3.结果集如何映射
3.1ResultType方式
ResultType方式适用于数据库结果集可以直接映射成一个Java类的情况
Java实体类:
@Getter
@Setter
@ToString
public class User {
private Integer id;
private String username;
private String nickName;
private String password;
private String email;
private Timestamp lastLoginTime;
}
使用方法:
3.2ResultMap方式
ResultMap方式适用于复杂的结果集映射,比如数据库返回的结果集中的列名和JavaBean无法一一对应,或者对象间存在一对一、一对多关联映射时。
解决数据库列名与Java类中属性名不一致的映射问题
... ...
在查询语句中将resultType换成resultMap
解决一对一映射查询问题
实体类
@Getter
@Setter
@ToString
public class King {
private Integer id;
private String name;
private Queen queen; //一个对象中的属性引用了另一个对象
}
@Getter
@Setter
@ToString
public class Queen {
private Integer id;
private Integer kId;
private String name;
}
映射文件
解决一对多映射查询问题
实体类
@Getter
@Setter
@ToString
public class King {
private Integer id;
private String name;
private List girls; // 一个对象的属性引用了若干个其他类型的对象
}
@Getter
@Setter
@ToString
public class Girl {
private Integer id;
private Integer kId;
private String name;
}
映射文件



