Mybatis中使用注解式开发可以简化配置文件,
sql 类型主要分成 : select@Select(
s
q
l
)
,
u
p
d
a
t
e
@
U
p
d
a
t
e
(
{sql}), update@Update(
sql),update@Update({sql}), insert@Insert(
s
q
l
)
,
d
e
l
e
t
e
(
sql), delete(
sql),delete({sql}).
@Results 用来设置table信息与bean相关字段的映射关系, 每一个字段的关系使用 @Result控制。
@ResultMap 可以通过Id,应用其他的Results
@MapKey 此注解应用将查询数据转为 Map<>, 注意的是MapKey()中的id最终调用bean的getId 获取数据,所以需要映射bean字段而不是table.
@Param注解:
@Param注解用于给方法参数起一个名字。使用原则:
在方法只接受一个参数的情况下,可以不使用@Param。
在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。
@Insert :
insert 时获取自增主键的方式:
法一:
@Options(useGeneratedKeys = true, keyColumn = “id列”, keyProperty = “接受的属性名”)
法二:
@SelectKey(statement=“SELECT LAST_INSERT_ID()”, keyProperty=“接受属性名”, before=false, resultType=Integer.class)
#与$的区别:
#{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符?:
对于 : INSERT INTO user (name) VALUES (#{name}); ==> INSERT INTO user (name) VALUES (?);
符
号
的
作
用
是
直
接
进
行
字
符
串
替
换
:
对
于
:
I
N
S
E
R
T
I
N
T
O
u
s
e
r
(
n
a
m
e
)
V
A
L
U
E
S
(
′
{} 符号的作用是直接进行字符串替换: 对于 : INSERT INTO user (name) VALUES ('
符号的作用是直接进行字符串替换:对于:INSERTINTOuser(name)VALUES(′{name}’); ==> INSERT INTO user (name) VALUES (‘tianshozhi’);
使用动态sql语句
一、使用注解的方式编写动态sql语句时需要加上,否则会报错
二、使用类的方式
将@select注解替换为@selectProvider注解,type属性为类名,method
为要使用的方法名
非结构化实例:
@SelectProvider(type = UserMapperProvider.class,method = “getUsers”)
List getUsers(User user);
class UserMapperProvider{
public String getUsers(User user){
SQL sql = new SQL();
sql.SELECT("id,username");
sql.SELECT("password");
sql.FROM("user");
if(user.getUsername() != null){
sql.WHERE("username = #{username}");
}
return sql.toString();
}
}
结构化实例:
@SelectProvider(type = UserMapperProvider.class,method = “getUsersBySql”)
List getUsers(User user);
class UserMapperProvider{
public String getUsers(User user){
return new SQL(){{
SELECT(“id,username”);
SELECT(“password”);
FROM(“user”);
if(user.getUsername() != null){
WHERE(“username = #{username}”);
}
}}.toString();
}
}