- Mybatis的XML映射文件
- 类型别名typeAliases
- 结果映射ResultMap
- Mybatis解决连续条件使用
- 代码展示部分
前面我们是将SQL语句绑定在USerDao类中,下面我们使用的是更为灵活的方法,将SQL语句写到xml映射文件中。
使用xml映射的优点:
使用多条件映射的SQL语句时,例如:
SELECt * FROM t_user where birthday >= (#{date1}) and birthday <= (#{date2})
这条SQL语句中使用了有两个条件。
如果使用的是UserDao绑定的方法,这条SQL语句就得是固定不变的。当我们要只需要其中的一个查询条件,又不想传1=1给SQL。
XML映射就可以解决这种方法。
我们的XML映射和UserDao绑定的方法是可以混合使用的,但是注意的是,我们不可以在同一个方法中同时使用XML映射和UserDao绑定。使用方法在
Mybatis解决连续条件使用中参考使用。
使用XML映射的几个条件:
-
使用的XML映射文件需要放在与UserDao类同一个包下
-
使用的xml文件中的namespace和需要绑定的Dao接口全限定名一致
-
使用的XMl文件的ID需要和UserDao类的方法名一致
-
使用的返回类型需要和UserDao类的返回类型一致
- 上面我们使用的XML文件中返回的类别名书写太长,比较麻烦。
使用类型别名typeAliases可以简化返回别名的书写。
# 注:该类型别名加入到src/main/resources下的application.properties # 简化xml的开发 # mybatis类型别名 mybatis.type-aliases-package=com.test.bean
加入类别名之后我们只需要在返回别名中写User皆可。
-
每一个在包 com.iflytek.bean中的 Java Bean,默认会使用 Bean 的首字母小写的非限定类名来作为它的别名
-
如果需要修改默认的别名,可以使用@Alias注解,如
- 这里我插播一条能,调整dao类的日志输出等级,使其在控制台打印执行的SQL语句的application.properties配置
#调整dao类的日志输出等级,使其在控制台打印执行的SQL语句 logging.level.com.iflytek.dao=debug
输出效果如下
-
在数据库名与javaBean类属性名相同的情况下,MyBatis会自动匹配SQL与JavaBean中相同字段的参数作为返回。
-
在数据库名与javaBean类属性名不相同的情况下,就需要映射ResultMap来解决返回的问题。
注意, 节点中resultMap和resultType只能二选一
Mybatis解决连续条件使用这里说明标签==, 。这两个标签通常包含 标签使用。 1. where会判定第一个使用到的if标签并消除if标签中的前面的and连接词, 如果一个条件都没有使用到那么就默认为无条件SQL操作。 2. set会判定第一个使用到的if标签并消除if标签中的后面的 , 符号。
where代码段:
SELECT * FROM t_user and birthday >= (#{date1}) and birthday <= (#{date2})
set代码段:
update t_user where id=#{id} real_name=#{realName}, phone=#{phone}, email=#{email}
- 了解更多的SQL语句XML映射操作请参考Mybatis动态SQL
XML部分
UserDao部分
package com.test.dao;
import java.util.List;
import com.test.bean.User;
public interface UserDao {
// @Select("select * from t_user where id=#{id}")
public User getUserById(Integer id);
// @Select("select * from t_user where real_name like CONCAt('%',#{word},'%'); ")
public List getUserByWord(String word);
// @Select("select * from t_user")
public List getAllUsers();
public List getDate(String date1,String date2);
// //插入用户
// @Insert("insert into t_user( real_name, phone, email)"
// + " values ( #{realName}, #{phone}, #{email}) ")
public void insertUser(User user);
// //更新用户
// @Update("update t_user set real_name=#{realName},"
// + "phone=#{phone}, email=#{email} "
// + "where id=#{id}")
public void updateUser(User user);
// @Delete("delete from t_user where id=#{id}")
public void deleteUserById(Integer id);
}



