当前位置:Gxlcms > 数据库问题 > 如何根据动态SQL代码自动生成DTO

如何根据动态SQL代码自动生成DTO

时间:2021-07-01 10:21:17 帮助过:3人阅读

test.dao; public class UserBlogDao { //@Select 注解指示该方法需自动生成DTO //默认类名: Result + 方法名, 默认包名:数据访问类的包名+"."+数据访问类的名称(小写) //可选参数:name 指定生成结果类的名称,如果未指定该参数,则采用默认类名 //可选参数:build 初始化调用参数的Java片段代码,替换默认的参数构造规则 @Select(name="test.result.UserBlogs") //!!! 保存后会自动修改该函数的返回值为: List -> List<UserBlogs> //第一次编写时,由于结果类还不存在, 为了保证能够编译正常, //函数的返回值 和 查询结果要用 泛值 替代, 保存后,插件会自动修改. //函数的返回值 和 查询结果 泛值的对应关系分三类如下: //1. List查询 //public DataTable method_name(...){... return Query.getList(); } 或 //public List method_name(...){... return Query.getList(); } // //2. Page查询 //public Page method_name(...){... return Query.Page(); } // //3. 单条记录 //public Object method_name(...){... return Query.getResult(); } // public List selectUserBlogs(int user_id){ Query q=TestDB.DB.createQuery(); q.add(""/**~{ SELECT a.id,a.name,b.title, b.content,b.create_time FROM user a, blog b WHERE a.id=b.user_id AND a.id=? }*/, user_id); return q.getList(); } }

上述代码保存后,插件就会自动生成一个DTO类:test.result.UserBlogs, 并自动将方法修改成如下的声明:

        public List<UserBlogs>  selectUserBlogs(int user_id){ 
            ...
            return q.getList(UserBlogs.class); 
        }

当然,如果对selectUserBlogs方法做了任何的修改(包括只是加了一个空格),保存文件后,插件也会自动更新UserBlogs。

同时,为了方便我们调试,插件也会在Eclipse的控制台窗口输出类似下面的信息:

2016-06-27 17:00:31 [I] ****** Starting generate result classes from: test.dao.UserBlogDao ******   
2016-06-27 17:00:31 [I] Create class: test.result.UserBlogs, from: [selectUserBlogs(int)]
SELECT a.id,a.name,b.title, b.content,b.create_time
    FROM user a, blog b    
        WHERE a.id=b.user_id AND a.id=0

顺便补充一下:

在Java代码中书写SQL,非常令人讨厌的一件事情就是Java语言中字符串的连接问题。使得大段的SQL代码中间要插很多的换行/转义符号,写起来很麻烦,看着也不舒服。monalisa-eclipse插件顺便也解决了多行字符串的书写问题。

例如:

    System.out.println(""/**~{
        SELECT * 
            FROM user
            WHERE name="zzg"
    }*/);

将会输出:

    SELECT * 
        FROM user
        WHERE name="zzg"

当然,为了快速书写,可以在Eclipse中把多行字符串的语法设置为一个代码模板。关于多行语法的更多细节可以参考: https://github.com/11039850/monalisa-db/wiki/Multiple-line-syntax

到这里,动态SQL代码自动生成DTO的思路和实现例子基本上就介绍完了, 欢迎大家提出各种有理无理的意见,一起讨论、进步,谢谢!

如何根据动态SQL代码自动生成DTO

标签:

人气教程排行