05-springboot整合beetsql

BeetSql是一個全功能DAO工具, 同時具有Hibernate 優(yōu)點 & Mybatis優(yōu)點功能秀鞭,適用于承認以SQL為中心趋观,同時又需求工具能自動能生成大量常用的SQL的應用。

beetsql優(yōu)點

  • 開發(fā)效率
    • 無需注解锋边,自動使用大量內(nèi)置SQL皱坛,輕易完成增刪改查功能,節(jié)省50%的開發(fā)工作量
    • 數(shù)據(jù)模型支持Pojo豆巨,也支持Map/List這種快速模型剩辟,也支持混合模型
    • SQL 模板基于Beetl實現(xiàn),更容易寫和調(diào)試,以及擴展
  • 維護性
    • SQL 以更簡潔的方式贩猎,Markdown方式集中管理熊户,同時方便程序開發(fā)和數(shù)據(jù)庫SQL調(diào)試。
    • 可以自動將sql文件映射為dao接口類
    • 靈活直觀的支持支持一對一吭服,一對多嚷堡,多對多關(guān)系映射而不引入復雜的OR Mapping概念和技 - 術(shù)。
    • 具備Interceptor功能艇棕,可以調(diào)試蝌戒,性能診斷SQL,以及擴展其他功能
  • 其他
    • 內(nèi)置支持主從數(shù)據(jù)庫支持的開源工具
    • 支持跨數(shù)據(jù)庫平臺欠肾,開發(fā)者所需工作減少到最小瓶颠,目前跨數(shù)據(jù)庫支持mysql,postgres,oracle,sqlserver,h2,sqllite,DB2.

添加依賴

在上一節(jié)基礎(chǔ)上添加如下依賴:

 <!--beetsql-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>2.7.23</version>
</dependency>

<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetlsql</artifactId>
    <version>2.9.12</version>
</dependency>

<!--beetsql結(jié)合springboot-->
<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl-framework-starter</artifactId>
    <version>1.1.22.RELEASE</version>
</dependency>

整合階段

由于springboot沒有對 beatlsql的快速啟動裝配,所以需要我自己導入相關(guān)的bean刺桃,包括數(shù)據(jù)源粹淋,包掃描,事物管理器等瑟慈。
在啟動類中添加如下代碼:

   @Bean(initMethod = "init", name = "beetlConfig")
    public BeetlGroupUtilConfiguration getBeetlGroupUtilConfiguration() {
        BeetlGroupUtilConfiguration beetlGroupUtilConfiguration = new BeetlGroupUtilConfiguration();
        ResourcePatternResolver patternResolver = ResourcePatternUtils.getResourcePatternResolver(new DefaultResourceLoader());
        try {
            // WebAppResourceLoader 配置root路徑是關(guān)鍵
            WebAppResourceLoader webAppResourceLoader = new WebAppResourceLoader(patternResolver.getResource("classpath:/templates").getFile().getPath());
            beetlGroupUtilConfiguration.setResourceLoader(webAppResourceLoader);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //讀取配置文件信息
        return beetlGroupUtilConfiguration;

    }

    @Bean(name = "beetlViewResolver")
    public BeetlSpringViewResolver getBeetlSpringViewResolver(@Qualifier("beetlConfig") BeetlGroupUtilConfiguration beetlGroupUtilConfiguration) {
        BeetlSpringViewResolver beetlSpringViewResolver = new BeetlSpringViewResolver();
        beetlSpringViewResolver.setContentType("text/html;charset=UTF-8");
        beetlSpringViewResolver.setOrder(0);
        beetlSpringViewResolver.setConfig(beetlGroupUtilConfiguration);
        return beetlSpringViewResolver;
    }

    //配置包掃描
    @Bean(name = "beetlSqlScannerConfigurer")
    public BeetlSqlScannerConfigurer getBeetlSqlScannerConfigurer() {
        BeetlSqlScannerConfigurer conf = new BeetlSqlScannerConfigurer();
        conf.setBasePackage("com.stellar.springboot.bloglearning.beetsql.dao");
        conf.setDaoSuffix("Dao");
        conf.setSqlManagerFactoryBeanName("sqlManagerFactoryBean");
        return conf;
    }

    @Bean(name = "sqlManagerFactoryBean")
    @Primary
    public SqlManagerFactoryBean getSqlManagerFactoryBean(@Qualifier("datasource") DataSource datasource) {
        SqlManagerFactoryBean factory = new SqlManagerFactoryBean();

        BeetlSqlDataSource source = new BeetlSqlDataSource();
        source.setMasterSource(datasource);
        factory.setCs(source);
        factory.setDbStyle(new MySqlStyle());
        factory.setInterceptors(new Interceptor[]{new DebugInterceptor()});
        factory.setNc(new UnderlinedNameConversion());//開啟駝峰
        factory.setSqlLoader(new ClasspathLoader("/sql"));//sql文件路徑
        return factory;
    }


    //配置數(shù)據(jù)庫
    @Bean(name = "datasource")
    public DataSource getDataSource() {
        return DataSourceBuilder.create().url("jdbc:mysql://127.0.0.1:3306/test").username("root").password("root").build();
    }

    //開啟事務(wù)
    @Bean(name = "txManager")
    public DataSourceTransactionManager getDataSourceTransactionManager(@Qualifier("datasource") DataSource datasource) {
        DataSourceTransactionManager dsm = new DataSourceTransactionManager();
        dsm.setDataSource(datasource);
        return dsm;
    }

在resouces包下桃移,加META_INF文件夾,文件夾中加入spring-devtools.properties:

restart.include.beetl=/beetl-2.3.2.jar
restart.include.beetlsql=/beetlsql-2.3.1.jar

在templates下加一個index.btl文件葛碧。

舉個restful的栗子

實體類

public class Account {
    private int id ;
    private String name ;
    private double money;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }
}

DAO

@SqlResultSetMapping(name="account.md")
public interface BeetSqlAccountDao extends BaseMapper<Account> {

    @SqlStatement(params = "name")
    Account selectAccountByName(String name);
}

controller

@RestController
@RequestMapping("/beetsqlAccount")
public class BeetSqlAccountController {

    @Autowired
    BeetSqlAccountDao beetSqlAccountDao;

    @RequestMapping(value = "/list",method = RequestMethod.GET)
    public List<Account> getAccounts(){
       return beetSqlAccountDao.all();
    }

    @RequestMapping(value = "/{id}",method = RequestMethod.GET)
    public Account getAccountById(@PathVariable("id") int id){
        return beetSqlAccountDao.unique(id);
    }

    @RequestMapping(value = "",method = RequestMethod.GET)
    public Account getAccountById(@RequestParam("name") String name){
        return beetSqlAccountDao.selectAccountByName(name);
    }

    @RequestMapping(value = "/{id}",method = RequestMethod.PUT)
    public  String updateAccount(@PathVariable("id")int id , @RequestParam(value = "name",required = true)String name,
    @RequestParam(value = "money" ,required = true)double money){
        Account account=new Account();
        account.setMoney(money);
        account.setName(name);
        account.setId(id);
        int t= beetSqlAccountDao.updateById(account);
        if(t==1){
            return account.toString();
        }else {
            return "fail";
        }
    }

    @RequestMapping(value = "",method = RequestMethod.POST)
    public  String postAccount( @RequestParam(value = "name")String name,
                                 @RequestParam(value = "money" )double money) {
        Account account = new Account();
        account.setMoney(money);
        account.setName(name);
        KeyHolder t = beetSqlAccountDao.insertReturnKey(account);
        if (t.getInt() > 0) {
            return account.toString();
        } else {
            return "fail";
        }
    }
}

參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末借杰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子进泼,更是在濱河造成了極大的恐慌蔗衡,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乳绕,死亡現(xiàn)場離奇詭異绞惦,居然都是意外死亡,警方通過查閱死者的電腦和手機洋措,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門济蝉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菠发,你說我怎么就攤上這事王滤。” “怎么了滓鸠?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵雁乡,是天一觀的道長。 經(jīng)常有香客問我糜俗,道長蔗怠,這世上最難降的妖魔是什么墩弯? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮寞射,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锌钮。我一直安慰自己桥温,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布梁丘。 她就那樣靜靜地躺著侵浸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氛谜。 梳的紋絲不亂的頭發(fā)上掏觉,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音值漫,去河邊找鬼澳腹。 笑死,一個胖子當著我的面吹牛杨何,可吹牛的內(nèi)容都是我干的酱塔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼危虱,長吁一口氣:“原來是場噩夢啊……” “哼羊娃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起埃跷,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蕊玷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弥雹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垃帅,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年缅糟,在試婚紗的時候發(fā)現(xiàn)自己被綠了挺智。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡窗宦,死狀恐怖赦颇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赴涵,我是刑警寧澤媒怯,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站髓窜,受9級特大地震影響扇苞,放射性物質(zhì)發(fā)生泄漏欺殿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一鳖敷、第九天 我趴在偏房一處隱蔽的房頂上張望脖苏。 院中可真熱鬧,春花似錦定踱、人聲如沸棍潘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亦歉。三九已至,卻和暖如春畅哑,著一層夾襖步出監(jiān)牢的瞬間肴楷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工荠呐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赛蔫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓直秆,卻偏偏與公主長得像濒募,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子圾结,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容