DBGUI库:构建Java界面-数据库小型应用的首选框架(非常适合Java课设/MySQL课设

DBGUI

  • A lib to build java database/gui small project easily.
  • Write java project just like write an android project.
  • A good simple for newer to lean the annotation and generic.
  • But the running speed is a little lower than raw code.

说明

Intellij IDEA 2016.2.5 Project
项目依赖gson / mysql-connector-java。
导入本库dbgui.jar(build_dbgui_jar目录下),以及以上两个依赖库,即可使用。

使用-DB

  1. 准备工作:请先在mysql中,创建数据库和数据表。
  2. 数据库相关工具使用前需要进行一次初始化操作: Dbgui.initDatabase(dbName,userName,passWord)
    使用结束后,或者项目运行结束时,可以根据需要释放: Dbgui.releaseDatabase()
  3. 创建MODEL:为每一张表创建一个对应的Model类。
    类名的全小写要与数据表名一致(类名首字母可以大写,保证其全小写一致即可)。
    类中的每个字段(变量),需要与数据表对应的列完全一致,区分大小写。
    变量可见性随意。 Model中的自增主键,或者写入Model到数据库需要忽略的键, 请使用@AutoIncrement修饰。
  4. 创建DAO:创建接口,对数据库进行操作,允许使用@Query注解和@Modiy注解。
    • @Query注解:数据库查询注解,返回类型List
    • @Modiy注解:数据库增删改注解,返回类型boolean
    • 可以直接在注解的value项写sql语句, 使用?数字代表要替换的参数,数字从1开始。
      @Query("slelct * from user where uid = ?1")
      List getUserById(String uid);
      @Modify("delete from user where uid = ?1")
      boolean deleteUserById(String uid);
      
      查询全部和插入数据可以使用table属性。 @Query可以使用increaseSortdecreaseSort进行排序,值为字段名。
      @Query(table = User.class, decreaseSort = 'uid')
      List getAllUser();
      @Modify(table = User.class)
      boolean addUser(User user); //参数只能为单个Model对象
      
      高级用法:@Query可以使用groupMerge进行聚合,值为字段名。 如果要以多列做参考,用井号(#)分隔。 返回类型为List>
      //返回值中,每组`List`的年龄相同。
      @Query(table = User.class, groupMerge = 'age')
      List> getAllUser();
      //返回值中,每组`List`的性别和年龄年龄相同。
      //也就是说,该接口返回的分组数目,会比上个接口多。
      @Query(table = User.class, groupMerge = 'gender#age')
      List> getAllUser();
      
      高级用法:@Query可以使用onePage指定分页。 另注,分页属于后期处理分页,性能相对原生SQL分页可能慢一些。 此时方法参数中需要添加一个参数int pageNumber作为最后一个参数。 当调用时,传入Query.ALL_PAGE时返回所有结果,传入1为首页。 可通过GuiUtil.getPageCount(...)获取全部结果的页数。
      @Query(table = User.class, onePage = 10)
      List> getAllUser();
      
  5. 创建Service类,使用@AutoCreate注解修饰需要自动生成的DAO接口对象。 DAO接口不必写其实现。
    public class UserService {
        @AutoCreate
        UserDao userDao;
    }
    
  6. 创建Service类对象,调用Dbgui.processAutoCreate(obj)执行注解解析。 之后就可以使用Service类对象中的DAO了。 说明:如果Service类继承自本库的gui包下的界面元素,不必进行注解解析的调用。
    UserService userService = new UserService();
    Dbgui.processAutoCreate(userService);
    userService.getAllUsser();
    
  7. 特殊的一些操作,可以直接使用DatabaseUtil.getConnection() 获取到数据库连接,然后自行进行数据库操作。

使用-GUI

在本库的gui包下,包含4个绝对布局组件,分别是 AbsolutelyFrame,AbsolutelyPanel,AbsolutelyModelDialog,AbsolutelyDialog。 以上组件均使用绝对布局(即setLayout(null)), 通过与GUI相关注解配合使用,便于快速创建界面。

  1. @View注解的value接收数组,内容定义如下。 可以修饰类中的变量,或者修饰JFrameJDialog。 scroll = true可在外部自动添加JScrollPane
    @View //仅初始化组件
    @View({"800,600"}) //表示大小
    @View({"0,0,800,600"}) //表示位置
    @View({"显示文本","位置或大小"})
    @View({"名称(setName)","显示文本","位置或大小"})
    
  2. @Click添加监听,修饰方法。 方法参数允许为空,或者为JButton。 注解的value为按钮变量名,为空表示类中所有按钮。
    @Click //将类中所有按钮都绑定此方法
    void onAllButtonClick(JButton button){}
    @Click("btnAdd") //将变量`JButton btnAdd`绑定此方法。
    void onAddButtonClick(){}
    
  3. @CollectView用于集合变量, type指定需要集合的变量类型, 如果需要集合的类型继承自JTextComponent, 可以使用editable = false表示集合后禁用编辑。 修饰的变量类型为List<需要集合的type>, 或者使用view包下的EditableGroup,ClickableGroup
    @CollectView(type = JTextField.class)
    EditableGroup editableGroup;
    @CollectView(type = JTextField.class)
    List textFieldGroup;
    
  4. @ViewBinder(index)@View(index)对应,以及@DialogSuccess, 可以用于AbsolutelyModelDialog中。
    类继承自AbsolutelyModelDialog后, 确认对话框返回成功的按钮用@DialogSuccess修饰, 类中组件用@View修饰时,可以添加index属性, 在Model类中的变量使用@ViewBinder(index)与对应组件 设置相同的index。 这样,当成功按钮点击后,将自动将界面内index对应的编辑组件 的值,写入到Model对象对应index的变量, 并在dialogModelInfo中将该对象返回。
    对话框使用显示:
new MyDialog().setSuccessListener(...).showSelf();
  1. 直接继承自swing组件的类, 需要在构造器使用Dbgui.processView(this); 进行注解解析。

使用-VIEW

自定义的VIEW主要是列表,其中适配器列表类ModelTableList, 类似于安卓的自定义列表。(Nx1) 另外,请优先考虑JList和JTable,最后考虑本组件。
对于自定义的列表对象,若继承自ModelTableList, 可通过updateItems(List)进行数据显示。 并通过注解@ViewBinder(index)@View(index)进行数据绑定, 直接将Model的数据显示到对应的View, 而不必在bindModelHolder(...)方法中手动设置数据。
继承自AdapterTableListAdapterVerticalList的类, 通过notifyChanged()进行数据显示。 另外,由于Java有时候存在UI不刷新问题, 可以调用scrollToTop()确保刷新。 注解可以对列表类进行修饰:

  1. @ListTitle指定列表标题栏。缺省表示无标题栏。
  2. @ListItemWidth指定列表每列宽度。缺省表示列均分宽度。
  3. @ListItemHeight这顶列表最小行高。缺省表示默认最小行高。 若ViewHolder重写方法getAbsolutelyHeight(), 返回值大于最小行高时,将使用返回值 最为行高。
  4. @ListColumnCount指定列数。缺省表示单列。 若指定了@ListTitle则本参数被忽略。 若指定了@ListItemWidth,但数目小于该列数,多余的列将均分剩余宽度。
  5. @ListBorder指定列表边框粗细和颜色。缺省使用默认边框。
  6. 组件PagePanel为简易翻页栏,可直接添加到界面, 通过setPageListener设定页面跳转监听,通过setPage设置初始页面或跳转页面即可。

使用-UTIL

  1. DbGui数据库配置、注解解析相关的工具。
  2. GuiUtil界面相关的常用工具。 推荐一个GuiUtil.showToast,类似android.widget.Toast, 非常有趣。

--------------------------------------------------------------------------------
参考文章出处:
https://github.com/yushulinfeng/LibDbgui


你可能感兴趣的:(DBGUI库:构建Java界面-数据库小型应用的首选框架(非常适合Java课设/MySQL课设)