beetsql的sql模板及mapper

beetlsql如果碰到特殊的sql語句怎麼辦?

那就需要自己動手實現sql語句了。

我們在classpath下新建一個叫sql的文件夾,裏面新建個user.md或者user.sql

selectLikeName
===
select * from user 
	where 1 =1 
@if(!isEmpty(name)){
	and name like #name#
@}

然後執行:

       
		Map<String, String> map = new HashMap<>();
		map.put("name", "%tom%");
		List<User> list = sqlManager.select("user.selectLikeName", User.class, map);
		System.out.println(list);

 這時候發現是查詢成功了啊。

問答解析:

1.爲什麼md或者sql文件要建在sql文件夾下,建在其他地方不好嗎?

在Sqlmanager創建的時候,會新建個SQLLoader sqlLoader = new ClasspathLoader();

我們打開下ClasspathLoader的構造方法:

public  ClasspathLoader() {
		this("/sql");
}

可以得知,你什麼參數都不寫,則默認是classpath/sql

2.md文件或者sql文件是什麼?

這個就是sql語句存放的文件了,文件是以beetl模板爲基礎的。

它的格式就是這樣

sql名

===

sql語句



sql名

===

sql語句

一個文件裏可以有很多個sql

那麼這個sql語句的sqlid就是文件名前綴加上sql名。

比如我上面寫的例子,它的sqlid就是user.selectLikeName

那麼我就可以使用SqlManager根據sqlid去查詢了。

3.爲什麼sql模板裏的定界符是@符號?

因爲beetlsql.jar包裏,根目錄下有了一個btlsql.properties

它裏面對定界符做了配置:

DELIMITER_STATEMENT_START=@
DELIMITER_STATEMENT_END=

4.我的user.md模板名字取其他名字行不行?我叫user1.md

最好不要這樣,最好和實體類一一對應,因爲這個名字還有其他作用。

但這種方式是純屬硬編碼,還是比較坑的。

去查詢的話要硬編碼sqlid

beetsql提供了另一種方案,不必硬編碼,這種方案就是mapper方案

我們新建一個UserDao的接口,繼承BaseMapper.這個BaseMapper是beetlsql提供的一個接口,裏面有很多方法。

然後我們根據user.md裏寫的sql語句,再寫一個方法。sql名對應方法名,包括參數。

import java.util.List;

import org.beetl.sql.core.annotatoin.Param;
import org.beetl.sql.core.mapper.BaseMapper;

import com.bai.btsql.domin.User;

public interface UserDao extends BaseMapper<User>{
	List<User> selectLikeName(@Param("name")String name);
}

那麼再試一下:

List<User> list2 = sqlManager.getMapper(UserDao.class).selectLikeName("%tom%");

發現也是可以執行並且成功的 。

這個就不必硬編碼了。

而且你還可以使用Basemapper裏的一大堆單表操作方法,它裏面的方法很多都和SqlManager裏面的一樣。

那麼你需要注意的一點是,命名。

UserDao 對應的就user.md或者user.sql

如果瞎起名,是找不到sql模板的然後調用對應的方法的。

那麼如果真的想瞎起名怎麼辦呢?

beetlsql提供了一個註解@SqlResource

@SqlResource("user.md")
public interface UserDao extends BaseMapper<User>{
	List<User> selectLikeName(@Param("name")String name);
	@SqlResource("aaa.md")
	List<User> selectAAA();
}

該註解既可以加在類上,也可以是方法上。對應不同的sql模板。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章