全局配置文件(SqlMapConfig.xml)的配置内容和顺序如下(顺序不能乱):
即配置加载properties文件,首先创建db.properties:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
db.username=root
db.password=root
那么配置文件:
注意,如果:
还是会加载properties文件中的username,因为先加载配置内容,再加载properties文件,后者会覆盖前者。
parameterType的值会和properties的属性值发生冲突。
对po类进行别名的定义,其中mybatis支持的别名有:
别名 | 原名 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
boolean | Boolean |
float | Float |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
当然也可以自定义别名:
那么在映射文件中就可以使用user来替代其全限定名。
在引入映射文件时有如下几种格式:
注意:后两种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下。
参考《mybatis框架——基本应用》中根据用户ID查询用户信息的映射文件
参考入门中添加用户的映射文件
在综合查询时,可能会根据用户信息、商品信息、订单信息等作为条件进行查询,用户信息中的查询条件由:用户的名称和性别进行查询。需要先创建pojo的包装类:
public class UserQueryVO {
private User user;//用户信息
//setget
}
然后在映射文件中:
在Mapper接口中:
public List findUserList(UserQueryVO vo);
同传递POJO对象一样,map的key相当于pojo的属性。映射文件如下:
使用resultType进行结果映射时,需要查询出的列名和映射的对象的属性名一致,才能映射成功。如果查询的列名和对象的属性名全部不一致,那么映射的对象为空;如果查询的列名和对象的属性名有一个一致,那么映射的对象不为空,但是只有映射正确那一个属性才有值。
说明:如果查询的sql的列名有别名,那么这个别名就是和属性映射的列名。
1.简单类型
注意,对简单类型的结果映射也是有要求的,查询的列必须是一列,才能映射为简单类型。综合查询时,需要根据综合查询的添加查询用户的总数,首先映射文件:
在Mapper接口中:
//综合查询用户总数
public int findUserCount(UserQueryVO vo);
2.Pojo对象和pojo列表
参考入门程序之根据用户ID查询用户信息和根据用户名称模糊查询用户列表
使用resultMap进行结果映射时,不需要查询的列名和映射的属性名必须一致。但是需要声明一个resultMap,来对列名和属性名进行映射。如,对以下sql查询的结果集进行对象映射:
Select id id_,username username_,sex sex_ from user where id = 1;
在映射文件中:
说明:
id标签:专门为查询结果中唯一列映射
result标签:映射查询结果中的普通列
在Mapper接口中:
public User findUserRstMap(int id);
在mybatis中,它提供了一些动态sql标签,可以让程序员更快的进行mybatis的开发,这些动态sql可以通过sql的可重用性。常用的动态sql标签:if标签、where标签、sql片段、foreach标签。
在综合查询时,查询条件由用户来输入,用户名称可以为空,需要满足这种情况下的sql编写:
解释:
除了可以将代码直接写在该处,还可以写在sql块中,然后调用:
AND username LIKE '%${user.username}%'
AND sex = #{user.sex}
注意:sql片段内,最好不用将where和select关键字声明在内。
可以循环传入参数值。综合查询时,会根据用户ID集合进行查询(批量删除),如下面SQL:
SELECT * FROM USER WHERE id IN (1,2,10)
首先修改包装pojo:
public class UserQueryVO {
private User user;//用户信息
private List idList;//ID集合
}
然后在sql片段中需要拼凑出:AND id IN (#{id},#{id},#{id})
AND id IN
#{id}
解释:
如果直接传递的是List集合,则: