sql映射文件
mybatis最强大的低于就在于sql映射语句,mybatis专注于sql,对于开发人员来说,可以最大限度地调优,保证性能。
1.Mapper:映射文件的根节点,只有一个属性namespace(命名空间)
作用:(1)用于区分不同的mapper,全局唯一。
(2)绑定Dao接口,即面向接口编程,当绑定一个接口,就不需要编写该接口的实现类,会通过接口的完全限
定名找到对应的 mapper配置来执行sql语句,所以namspqce必须要先接口的完全限定名。
2.cache:配置给定命名空间的缓存。
3.cache-ref:从其他命名空间引用缓存配置。
4.resultMap:用来描述数据库结果集和对象的对应关系。
5.sql:可以重用的sql快,可以被其他语句使用。
6..insert:映射插入语句。
7.update:更新映射语句。
8.delete:删除映射语句。
9.select:映射查询语句。
使用select完成单条件查询
<!--传入实体类参数时最好不要写parameterType=“实体类路径”,更不要写mybatis不用的parameterMap,会报错的。不写的话只要mapper接口中传入此类,mybatis会自动处理传参,可以直接使用里面的属性值。-->
<select id = "getUser" resultType = "User" parameterType = "string">
select * from user where name like concat('%',#{name},'%') //按照姓名模糊查询。
</select>
id为GetUserByName的映射语句,参数类型为String,返回类型为User。
1.#{参数名}:告诉MyBatis生成的PreparedStatement参数,相对于JDBC,该参数被标识为‘?’。
2.id:命名空间的唯一标识符,可以被用来引用这条语句。
3.parameterType:查询语句传入的参数类型和完全限定名或者别名,支持基础数据类型和复杂数据类型,上述传入的
参数是个别名,代表Sting。
别名 | 映射类型 | 别名 | 映射类型 |
string | String | double | Double |
byte | Byte | float | Float |
long | Long | boolean | Boolean |
short | Short | date | Date |
int | Integer | map | Map |
integer | Integer | hashmap | HashMap |
arraylist | ArrayList | list | List |
4.resultType:查询语句结果返回类型完全限定名或者别名。别名使用方式跟parameterType一样。
使用select完成多条件查询
使用复杂数据类型,把条件参数封装为对象、Map进行入参。不管什么类型的参数,或者多少个参数,都可以封装为
一个Map进行入参,通过map的key或者传入的参值。
<select id="getUser" resultType="User" parameterType="map">
select * from user where userName like CONCAT('%',#{name},'%') and age= #{age}
</select>
使用resultMap完成查询结果的展现
resultMap:做自定义映射,实体类属性名和数据库列名不一致的情况下,并且可以指定要显示的列,使用灵活,应用广
泛。
实体类 User.xml
package com.mybatis.usermanage.entity;
public class User {
private Integer id;
private String name;
private Integer age;
//一对一查询使用
private School school;
//一对多查询使用
private set<Furniture> furnitureSet = new HashSet<Furniture>();
public User() {
super();
}
public User(Integer id,String name, Integer age,School school) {
super();
this.id = id;
this.name = name;
this.age = age;
this.school=school;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public School getSchool() {
return school;
}
public v