< 返回版块

zhuxiujia 发表于 2023-02-18 01:37

Tags:【ChatGPT】当红ChatGPT结合Rbatis ORM的htmlsql的chatGPT法师魔法开发,提高项目可维护性

rbatis框架是一个类似mybatis3 dtd协议的RUST ORM框架,它支持htmlsql来解决复杂sql编写的问题。使用html中间语法更加利于类似chatGPT/必应这类大型AI通过生成XML的逻辑来实现复杂的业务SQL。与此同时,它还剥离了业务代码和htmlsql语句,让性能和开发效率兼顾。

与其他ORM框架相比,rbatis是唯一一个实现了mybatis3协议的框架。它支持的HTMLSQL语法类似于MyBatis中的XML配置文件,可以让开发者更加自由地使用SQL语句来访问数据库,而无需手动拼接SQL语句。同时,rbatis还支持许多高级特性,例如自动类型映射、分页查询等等。

在使用rbatis框架时,我们可以通过HTMLSQL来定义数据库操作。这是一种基于HTML的SQL语言,类似于XML的配置文件。可以使用条件判断、循环语句等语法来构建复杂的SQL查询。这使得我们可以在编写SQL时更加灵活,同时也避免了手动拼接SQL语句所带来的错误风险。

对于和AI系统配合开发,特别是chatGPT/必应这种大型AI系统的开发,使用rbatis框架可以有效加速开发进程。但由于Rust对所有权以及语法要求严格,chatGPT直接生成Rust代码有可能无法有效执行。不过,我们可以让chatGPT生成符合rbatis要求的HTML代码,并将OGNL改成Rust语法,同时无需CDATA转义。这种方案能够在保证rbatis框架的优势的同时,更加适应Rust语言的特性。

综上所述,rbatis框架的HTMLSQL语法可以极大地提高SQL查询的灵活性和可维护性,同时在AI系统开发中有着特别的优势。如果你正在寻找一个高效、灵活且可靠的ORM框架,那么rbatis框架无疑是一个值得考虑的选择。

-以上内容来自ChatGPT

下面是我和chatGPT的简单对话

我: 使用例子如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "https://raw.githubusercontent.com/rbatis/rbatis/master/rbatis-codegen/mybatis-3-mapper.dtd">
<mapper>
    <select id="select_by_condition">
        `select * from biz_activity where `
        <if test="name != ''">
            name like #{name}
        </if>
    </select>
</mapper>
    ///select page must have  '?:&PageRequest' arg and return 'Page<?>'
#[html_sql("example/example.html")]
async fn select_by_condition(rb: &mut dyn Executor, page_req: &PageRequest, name: &str) -> Page<BizActivity> { impled!() }
  • 我:
Syntax/method	Generated Rust code
<trim prefixOverrides=" and">` and name != '' `</trim>	sql.trim(" and")                      
<if test="key == 'id'"/>	if  key == "id"{}                     
<foreach collection="arg" index="key" item="item" open="(" close=")" separator=","/> 	for (key,item) in arg{}               
<continue/> 	for (key,item) in arg{ continue;}     
<set> 	sql.push_str("SET").trim("SET")       
<choose> 	match {}                              
<when test="true"> 	match true{ true=>{} _ => {} }        
<otherwise> 	match { _ =>{} }                      
<where> 	sql.push_str("WHERE").trim("WHERE")       
<bind name="a" value="1+1"></bind>	let a = rbs::Value::I32(1 + 1)            
` and name=#{name}`   	sql.push_str(" and name=?");args.push(rbs::Value::String(name));
` and name=${name}`    	sql.push_str(&format!(" and name={}",name));                    
` and age=${1 + 1}` 	sql.push_str(&format!(" and age={}", 1 + 1));    
` and name=${name + '_tag'}` 	sql.push_str(&format!(" and name={}",name + "_tag"));    
` and age=${age + 1}` 	sql.push_str(&format!(" and age={}", age + 1));    
` and bitand=${true  & true}` 	sql.push_str(&format!(" and bitand={}", true & true));    
` and cmp=${2 >  1}` 	sql.push_str(&format!(" and cmp={}",2 >  1));    
` and div=${2 /  1}` 	sql.push_str(&format!(" and div={}", 2 / 1));    
` and eq=${2 ==  1}` 	sql.push_str(&format!(" and eq={}", 2 == 1));    
` and mul=${2 *  1}` 	sql.push_str(&format!(" and mul={}", 2 * 1));    
` and not=${ !false }` 	sql.push_str(&format!(" and not={}", !false));    
` and rem=${ 2 % 1 }` 	sql.push_str(&format!(" and rem={}", 2 % 1));    
` and sub=${ 2 - 1 }` 	sql.push_str(&format!(" and sub={}", 2 - 1));    
`
  • 我:按照上面提到的html语法直接给出html代码,不要rust代码,给出 查询user表根据name是否为空。

  • ChatGPT: 回复 Sure, here's an example of an HTMLSQL query using RBatis to select records from the user table based on whether the name field is empty or not:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "https://raw.githubusercontent.com/rbatis/rbatis/master/rbatis-codegen/mybatis-3-mapper.dtd">
<mapper>
    <select id="select_by_condition">
        select * from user
        <where>
            <if test="name != ''">
                and name like #{name}
            </if>
        </where>
    </select>
</mapper>
  • 我:按照上面提到的html语法直接给出html代码,不要rust代码,给出 查询user表根据name和age 是否为空。
  • ChatGPT: 回复
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "https://raw.githubusercontent.com/rbatis/rbatis/master/rbatis-codegen/mybatis-3-mapper.dtd">
<mapper>
    <select id="select_by_condition">
        `select * from user where `
        <if test="name != ''">
            name like #{name}
        </if>
        <if test="age != ''">
            <if test="name != ''">
                and 
            </if>
            age = #{age}
        </if>
    </select>
</mapper>

  • 我: 按照上面提到的html语法直接给出html代码,不要rust代码,给出 查询user表根据name和age 是否为空,根据id降序,其中name建立了索引,like改为左匹配
  • ChatGPT: 回复
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "https://raw.githubusercontent.com/rbatis/rbatis/master/rbatis-codegen/mybatis-3-mapper.dtd">
<mapper>
    <select id="select_by_condition">
        `select * from user where `
        <if test="name != ''">
            name like #{name+'%'}
        </if>
        <if test="age != ''">
            <if test="name != ''">
                and 
            </if>
            age = #{age}
        </if>
        order by id desc
        name index hint
    </select>
</mapper>

评论区

写评论

还没有评论

1 共 0 条评论, 1 页