以下使用的数据库是Mysql。
在resultMap 中定义数据库字段对应的字段类型。
TINYINT 类型,可以直接用 布尔类型去映射。命名时,避免使用is开头,可以用 type,或者status 结尾。
也可以使用property,如下所示
###Mybatis动态Sql:
Mapper.xml如下:
如果不想写1=1,也可以直接使用where标签。
where标签知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的,where 标签也知道如何将他们去除。
示例如下:
对应的Dao层如下:
此处直接将对象作为方法参数,假设参数为Order对象,传递到xml中的参数就包括了Order对象的属性变量,如上的id、serialId。
List selectOrderList(Order order);
如果仅有一两个变量,也可以直接传递变量,如下:
List selectOrderList( @Param("id ")Integer id , @Param("serialId ")String serialId );
通过 标签将字段或查询条件包装起来,就可以用引用,减少重复。
id, user_name , code
and t.user_name= #{userName}
choose 按顺序判断其内部 when 标签中的 test 条件出否成立。类似于 java的 switch()。
and t.user_code = #{ code1 }
and t.user_code = #{ code2 }
and t.user_code = #{ code3 }
###Mybatis模糊查询:
模糊查询可以使用LIKE关键字和CONCAT()函数。
假设要查询的字段为product,从Dao层传递过来的参数为productName。
示例如下:
WHERE 1=1
AND product LIKE CONCAT('%',#{ productName , jdbcType=VARCHAR },'%')
###Mybatis使用IN关键字指定条件范围:
IN关键字,需要通过foreach标签来实现。
其中,collection对应的是Dao层传递过来的参数(一般是集合或数组),
如果懒得使用 @Param(“”)指定参数名称,可以直接用 collection=“list”。
item是自己命名的,表示范围中的变量名称。
separator是指分隔符。index是指下标。
示例如下:
对应的Dao层为:
String queryOrderListByCondition(@Param("clientIdList")List clientIdList);
###Mybatis查询条件范围判断。
经常需要用Mysql查询在某个时间段的数据。
由于Mybatis中可能会将大于号>和小于号<视为标签,所以需要加上 字符。
示例如下:
WHERE 1=1
= #{ beginTime , jdbcType=VARCHAR } ]]>
###Mybatis多表查询。
多表查询,分为一对一、一对多、多对多。
简单的Sql语句,一对一可以通过association标签实现,一对多和多对多通过collection标签实现。
详情见: https://www.cnblogs.com/expiator/p/9328338.html
复杂的Sql语句,可以直接设置返回的resultMap为Map,通过Map的键值对解析。
示例如下:
对应的Dao层如下:
List
返回类型为List
//....
//忽略其他无关逻辑
List
对应sql语句:
insert into 表名 (字段1,字段2,字段3) values (字段1的值,字段2的值,字段3的值);
xml如下所示:
其中的useGeneratedKeys=“true” keyProperty="id"表示主键自动产生。
而clientId 、clientSecret 、clientName 、eCheck 都是属于Developer类的属性。在Dao层传递对象过来后,可以使用该对象的属性。
insert into t_bd_developer
client_id,
client_secret,
client_name,
isCheck,
#{clientId,jdbcType=VARCHAR},
#{clientSecret,jdbcType=VARCHAR},
#{clientName,jdbcType=VARCHAR},
#{eCheck,jdbcType=INTEGER},
其中的 useGeneratedKeys=“true” keyProperty=“id” 表示自动产生主键,并将自动生成的主键通过keyProperty这个属性返回。
Dao层则如下所示:
int insert(Developer developer);
当jdbcType="DATE"类型时,返回的时间只有年月日(yyyy-MM-dd)的,当jdbcType=“TIMESTAMP”的时候,返回的时间是年月日和时分秒(yyyy-MM-dd HH:mm:ss)
比如createDate为 2019-04-17,createTime为 2019-04-17 22:25:28,处理如下:
可以使用 @Mapkey。
xml跟平常的一样:
Mapper类,在方法上面添加一个注解 @MapKey(“userName”),括号里的值可以写User对象的一个字段 ,作为 map的 key,方法的返回类型为 Map
public interface UserMapper {
@MapKey("userName")
Map getUserMapper(String ids);
}
https://www.cnblogs.com/expiator/p/9328338.html
https://blog.csdn.net/u011781521/article/details/79669180
https://www.cnblogs.com/cyttina/p/3894428.html