SpringBoot 集成 JFinal的ActiveRecordPlugin 實(shí)現(xiàn)輕量級(jí)的CURD

官方文檔傳送:ActiveRecord 概述

首先引入以下依賴(lài)

<!--實(shí)現(xiàn)jfinal activerecord-->
<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>activerecord</artifactId>
    <version>4.9.06</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.4</version>
</dependency>

增加一個(gè)配置類(lèi)(Kotlin實(shí)現(xiàn)代碼,Java同理)

/**
 * 集成 JFinal 的 ActiveRecordPlugin 實(shí)現(xiàn)輕量級(jí)db操作
 */
@Configuration
class JActiveRecordConfig {
    private val logger = LoggerFactory.getLogger(JActiveRecordConfig::class.java)

    @Value(“\${spring.datasource.business.jdbc-url}”)
    private lateinit var jdbcUrl: String

    @Value(“\${spring.datasource.business.username}”)
    private lateinit var username: String

    @Value(“\${spring.datasource.business.password}”)
    private lateinit var password: String

    @Value(“\${spring.datasource.business.driver-class-name}”)
    private lateinit var driverClassName: String

    @Bean
    fun initActiveRecordPlugin(): ActiveRecordPlugin {
        // 配置druid數(shù)據(jù)庫(kù)連接池插件
        val druidPlugin = DruidPlugin(jdbcUrl, username, password, driverClassName)

        // 加強(qiáng)數(shù)據(jù)庫(kù)安全
        val wallFilter = WallFilter()
        wallFilter.dbType = “mysql”
        druidPlugin.addFilter(wallFilter)
        druidPlugin.start()

        // 配置ActiveRecord插件
        val arp = ActiveRecordPlugin(druidPlugin)
        arp.setTransactionLevel(Connection.TRANSACTION_READ_COMMITTED)
        arp.setShowSql(true)
        arp.devMode = true

        // 所有映射在 MappingKit 中自動(dòng)化搞定
        _MappingKit.mapping(arp)
        
        // 與 jfinal web 環(huán)境唯一的不同是要手動(dòng)調(diào)用一次相關(guān)插件的start()方法
        arp.start()
        logger.info(“**** JFinal Active Record Init complete! ****”)
        return arp
    }
}

_MappingKit 代碼如下:

class _MappingKit {
    companion object{
        fun mapping(arp: ActiveRecordPlugin) {
            arp.addMapping(JHolder.TABLE_NAME, JHolder::class.java)
        }
    }
}

Model 的定義如下:

class JHolder : Model<JHolder>() {
    companion object {
        const val TABLE_NAME = “base_holder”
        val dao = JHolder().dao()
    }
}

至此,集成已經(jīng)完成,可以直接在項(xiàng)目中使用了!

以下是摘抄自官方文檔中的代碼示例:

// 創(chuàng)建name屬性為James,age屬性為25的User對(duì)象并添加到數(shù)據(jù)庫(kù)
new User().set(“name”, “James”).set(“age”, 25).save();
 
// 刪除id值為25的User
User.dao.deleteById(25);
 
// 查詢(xún)id值為25的User將其name屬性改為James并更新到數(shù)據(jù)庫(kù)
User.dao.findById(25).set(“name”, “James”).update();
 
// 查詢(xún)id值為25的user, 且僅僅取name與age兩個(gè)字段的值
User user = User.dao.findByIdLoadColumns(25, “name, age”);
 
// 獲取user的name屬性
String userName = user.getStr(“name”);
 
// 獲取user的age屬性
Integer userAge = user.getInt(“age”);
 
// 查詢(xún)所有年齡大于18歲的user
List<User> users = User.dao.find(“select * from user where age>18”);
 
// 分頁(yè)查詢(xún)年齡大于18的user,當(dāng)前頁(yè)號(hào)為1,每頁(yè)10個(gè)user
Page<User> userPage = User.dao.paginate(1, 10, “select *”, “from user where age > ?”, 18);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容