通常我们使用mysql,mybatis创建sql语句时都是采用xml,springboot很强大,可以全部采用注解的格式,这次我们使用Mybaties SqlProvider,完全脱离xml
@Select("select * from video")
// 下划线转驼峰,太麻烦,配置文件解决
/*@Results({
@Result(column = "cover_img",property = "coverImg")
})*/
List<Video> finAll();
@Select("select * from video where id=#{id}")
Video findById(int id);
//@Update("update video set title=#{title} where id=#{id}")
@UpdateProvider(type = VideoProvider.class,method = "updateVideo")
int update(Video video);
@Delete("delete from video where id=#{id}")
int delete(int id);
@Insert("INSERT INTO `xdclass`.`video`(`title`, `summary`, `cover_img`, `view_num`, `price`, `create_time`, `online`, `point`) " +
"VALUES ( #{title}, #{summary},#{coverImg} , #{viewNum}, #{price}, #{createTime}, #{online}, #{point});")
// 可以返回新增成功后这条数据的id,很有用
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
int save(Video video);
采用注解的形式可以完全脱离xml,但是当我们更新或者插入的时候,一些条件参数又如何添加,这时候SqlProvider出现了,我们上面的update语句就采用了。
新建VideoProvider类,新建方法
/**
* 更新video动态语句
* @param video
* @return
*/
public String updateVideo(final Video video){
return new SQL(){{
UPDATE("video");
//条件写法.
if(video.getTitle()!= null){
SET("title=#{title}");
}
if(video.getSummary()!= null){
SET("summary=#{summary}");
}
if(video.getCoverImg()!= null){
SET("coverImg=#{coverImg}");
}
if(video.getViewNum()!= null){
SET("viewNum=#{viewNum}");
}
if(video.getPrice()!= null){
SET("price=#{price}");
}
if(video.getOnline()!= null){
SET("online=#{online}");
}
if(video.getPoint()!= null){
SET("point=#{point}");
}
WHERE("id=#{id}");
}}.toString();
}
这样的话,动态的参数,动态语句就可以创建了!
上面的insert语句,再使用了@Options(useGeneratedKeys = true,keyProperty = “id”,keyColumn = “id”)注解之后,当我们新增一条记录之后就可以获得到新增的id
@Override
public int save(Video video) {
int save = videoMapper.save(video);
System.out.println("保存对象的id是:===="+video.getId());
return save;
}