设为首页 收藏本站
查看: 3360|回复: 0

[经验分享] BeetlSQL框架学习(一)——初识BeetlSQL,特点,内置sql的使用,Pojo代码生成等

[复制链接]

尚未签到

发表于 2018-10-19 09:44:24 | 显示全部楼层 |阅读模式
  学习BeetlSQL总结(1)
  一.BeetlSQL特点:
  1.开发效率:
  (1)无需注解,能自动使用大量的内置sql,快速完成增,删,改,查的功能
  (2)数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型
  (3)SQL模板基于B eetl实现,更容易写和调试,以及扩展
  (4)可以针对单个表(或者视图)生成Pojo类和sql模型,甚至是整个数据库,能有效的减少代码的编写量
  2.维护性:
  (1)SQL以更加简洁的方式,Markdown方式集中管理,同时方便程序的开发和数据库sql的调试
  (2)可以自动将sql文件自动映射为dao接口类
  (3)灵活直观的支持一对一,一对多,多对多的关系映射而不引入复杂的OR Maping概念和技术
  (4)具备Interceptor功能,可以调试,性能诊断SQL,以及扩展其他的功能
  3.其他:
  (1)内置支持主从数据库支持的开源工具
  (2)性能数倍于JPA,Mybatis
  (3)支持跨数据库平台,将开发者的工作量减少到最少,目前支持的跨数据库有mysql,postgres,oracle,sqlserver,h2,sqllite,DB2
  二,以mevan工程为例(理解BeetlSQL)
  因为我已经完成了本次所展示的所有代码,所以提前展示一下代码结构
DSC0000.jpg

  1.创建mevan工程(BeetlSQL)
  我已经创建好了mevan工程,结构如下:
DSC0001.jpg

  2.添加BeetlSQL框架(配置pom.xml)
  


  4.0.0
  cn.com.dhcc.beetl
  BeetlSQL
  war
  0.0.1-SNAPSHOT
  BeetlSQL Maven Webapp
  http://maven.apache.org
  
  
  
  junit
  junit
  3.8.1
  test
  
  
  
  
  ch.qos.logback
  logback-classic
  1.2.3
  
  
  
  
  com.ibeetl
  beetl
  2.8.6
  
  
  
  com.ibeetl
  beetlsql
  2.10.31
  
  
  
  mysql
  mysql-connector-java
  8.0.11
  
  
  
  BeetlSQL
  
  

  

  

  3.因为我们是要对数据库进行操作,所以第二步我们创建数据库及数据库表
  

CREATE DATABASE beetlsql;  
USE beetlsql;
  
CREATE TABLE USER(
  id INT(11) NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(64) DEFAULT NULL,
  age INT(4) DEFAULT NULL,
  username VARCHAR(64) DEFAULT NULL COMMENT '用户名',
  roleId INT(11) DEFAULT NULL COMMENT '用户角色',
  create_date DATETIME NULL DEFAULT NULL,
  PRIMARY KEY(id)
  
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  

  4.接下来编写数据表user对应的entity实体类(后面将展示代码自动生成)
  

package cn.com.dhcc.beetlsql.entity;  

  
import java.util.Date;
  
//用户实体类

  
public>
  private Integer>  private Integer age;
  //用户角色
  private Integer roleId;
  private String name;
  //用户名称
  private String userName;
  private Date createDate;
  

  public User() {
  

  }
  


  public User(Integer>  super();

  this.id =>  this.age = age;
  this.roleId = roleId;
  this.name = name;
  this.userName = userName;
  this.createDate = createDate;
  }
  

  public Integer getId() {

  return>  }

  public void setId(Integer>
  this.id =>  }
  public Integer getAge() {
  return age;
  }
  public void setAge(Integer age) {
  this.age = age;
  }
  public Integer getRoleId() {
  return roleId;
  }
  public void setRoleId(Integer roleId) {
  this.roleId = roleId;
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public String getUserName() {
  return userName;
  }
  public void setUserName(String userName) {
  this.userName = userName;
  }
  public Date getCreateDate() {
  return createDate;
  }
  public void setCreateDate(Date createDate) {
  this.createDate = createDate;
  }
  

  @Override
  public String toString() {

  return "User [id=" +>  + ", createDate=" + createDate + "]";
  }
  

  
}
  

  

  5.下来我们写一个main方法来对BeetlSQL进行功能测试以及理解
  (1)建立数据库的连接,这里我们没有写配置文件,各项数据库连接所需参数就在主方法中设定
  

String mysqlDriver="com.mysql.jdbc.Driver";  String url="jdbc:mysql://localhost:3306/beetlsql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false";
  String userName="root";
  String password="qitao1996";
  ConnectionSource source=ConnectionSourceHelper.getSimple(mysqlDriver, url, userName, password);
  DBStyle mysql=new MySqlStyle();
  

  //SQL语句放于classpath的sql目录下

  SQLLoader loader=new>  //数据库命名和java命名一样,所以采用DefaultNameConversion,还有一个UnderlinedNameConversion下划线风格的
  UnderlinedNameConversion nc=new UnderlinedNameConversion();
  //最后,创建一个SQLManager,DebugInterceptor,不是必须的,但可以通过它查看SQL的执行情况
  SQLManager sqlManager=new SQLManager(mysql, loader,source,nc,new Interceptor[]{new DebugInterceptor()});
  

  

  (2)接下里我们就先使用内置的sql语句对数据库表进行操作,代码如下
  

//1.使用内置的生成的sql新增用户,如果需要获取主键,可以传入KeyHolder  System.out.println("开始使用内置sql进行用户添加...");
  User user=new User();
  user.setAge(19);
  user.setName("曼斯坦因");
  int num=sqlManager.insert(user);
  if(num>0) {
  System.out.println("使用内置sql用户添加成功!!!!");
  }
  

  //2.使用内置sql查询用户

  int>  System.out.println("开始使用内置sql进行用户查询...");

  user=sqlManager.unique(User.class,>  System.out.println("使用内置sql进行用户查询完毕!!");
  

  //3.更新(修改)数据,仅仅根据id更新值不为null的列
  System.out.println("开始使用内置sql更新用户信息...");
  User newUser=new User();
  newUser.setId(1);
  newUser.setName("朱可夫");
  int num1=sqlManager.updateTemplateById(newUser);
  if(num1>0) {
  System.out.println("使用内置sql更新用户信息成功!!!!");
  }
  

  //4.模板查询
  User query=new User();
  query.setName("曼斯坦因");
  System.out.println("开始进行模板查询...");
  List userList=sqlManager.template(query);
  System.out.println("打印查询结果:");
  for(User u:userList) {
  System.out.println(u);
  }
  System.out.println("使用模板查询成功...");
  

  执行结果如下:
  开始使用内置sql进行用户添加...
  ┏━━━━━ Debug [user._gen_insert] ━━━
  ┣ SQL:   insert into user (name,age,create_date) VALUES (?,?,?)
  ┣ 参数:    [曼斯坦因, 19, null]
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:52)
  ┣ 时间:    319ms
  ┣ 更新:    [1]
  ┗━━━━━ Debug [user._gen_insert] ━━━
  使用内置sql用户添加成功!!!!
  开始使用内置sql进行用户查询...
  ┏━━━━━ Debug [user._gen_selectById] ━━━
  ┣ SQL:   select * from user where id = ?
  ┣ 参数:    [1]
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:60)
  ┣ 时间:    37ms
  ┣ 结果:    [User [id=1, age=19, roleId=null, name=朱可夫, userName=null, createDate=null]]
  ┗━━━━━ Debug [user._gen_selectById] ━━━
  使用内置sql进行用户查询完毕!!
  开始使用内置sql更新用户信息...
  ┏━━━━━ Debug [user._gen_updateTemplateById] ━━━
  ┣ SQL:   update user set name=? where id = ?
  ┣ 参数:    [朱可夫, 1]
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:68)
  ┣ 时间:    168ms
  ┣ 更新:    [1]
  ┗━━━━━ Debug [user._gen_updateTemplateById] ━━━
  使用内置sql更新用户信息成功!!!!
  开始进行模板查询...
  ┏━━━━━ Debug [user._gen_selectByTemplate] ━━━
  ┣ SQL:   select * from user where 1=1 and name=?
  ┣ 参数:    [曼斯坦因]
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:77)
  ┣ 时间:    91ms
  ┣ 结果:    [10]
  ┗━━━━━ Debug [user._gen_selectByTemplate] ━━━
  打印查询结果:
  User [id=2, age=19, roleId=null, name=曼斯坦因, userName=mansitanying, createDate=null]
  User [id=3, age=19, roleId=null, name=曼斯坦因, userName=deguoyuanshuai, createDate=null]
  User [id=4, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=5, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=6, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=7, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=8, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=9, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=10, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=11, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  使用模板查询成功...
  开始使用sql文件中sql语句进行查询....
  ┏━━━━━ Debug [user.select] ━━━
  ┣ SQL:    select * from user where 1=1
  ┣ 参数:    []
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:88)
  ┣ 时间:    78ms
  ┣ 结果:    [11]
  ┗━━━━━ Debug [user.select] ━━━
  User [id=1, age=19, roleId=null, name=朱可夫, userName=null, createDate=null]
  User [id=2, age=19, roleId=null, name=曼斯坦因, userName=mansitanying, createDate=null]
  User [id=3, age=19, roleId=null, name=曼斯坦因, userName=deguoyuanshuai, createDate=null]
  User [id=4, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=5, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=6, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=7, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=8, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=9, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=10, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=11, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  (3)展示代码生成:
  ##1.我们先在数据库中建立一张person表,用以生成Pojo类以及sql
  

CREATE TABLE person(  id INT(11) NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(64) DEFAULT NULL,
  age INT(4) DEFAULT NULL,
  pername VARCHAR(64) DEFAULT NULL COMMENT '人名',
  roleId INT(11) DEFAULT NULL COMMENT '个人角色',
  create_date DATETIME NULL DEFAULT NULL,
  PRIMARY KEY(id)
  
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  

  ##2.用以生成代码的代码:
  

//利用genPojoCodeToConsole 生成代码  System.out.println("开始生成代码:");
  try {
  sqlManager.genPojoCodeToConsole("person");
  sqlManager.genSQLTemplateToConsole("person");
  sqlManager.genSQLTemplateToConsole("user");
  } catch (Exception e) {
  e.printStackTrace();
  }
  System.out.println("代码生成结束....");
  

  执行结果:
  开始生成代码:
  package com.test;
  import java.math.*;
  import java.util.Date;
  import java.sql.Timestamp;
  import org.beetl.sql.core.annotatoin.Table;
  /*



  •   gen by beetlsql 2018-08-17*/
      @Table(name=" beetlsql.person>br/>*/

      @Table(name="beetlsql.person")
    public>
      private Integer>  private Integer age ;
      /
      个人角色
      /
      private Integer roleid ;
      private String name ;
      /
      人名
      /
      private String pername ;
      private Date createDate ;
      public Person() {
      }
      public Integer getId(){

      return >  }

      public void setId(Integer>
      this.id =>  }
      public Integer getAge(){
      return  age;
      }
      public void setAge(Integer age ){
      this.age = age;
      }
      /**

    • 个人角色  @return
        /
        public Integer getRoleid(){
        return  roleid;
        }
        /**

    • 个人角色  @param  roleid
        /
        public void setRoleid(Integer roleid ){
        this.roleid = roleid;
        }

      public String getName(){
      return  name;
      }
      public void setName(String name ){
      this.name = name;
      }
      /**


    • 人名  @return
        /
        public String getPername(){
        return  pername;
        }
        /**

    • 人名  @param  pername
        /
        public void setPername(String pername ){
        this.pername = pername;
        }

      public Date getCreateDate(){
      return  createDate;
      }
      public void setCreateDate(Date createDate ){
      this.createDate = createDate;
      }


  }

sample


  •   注释
      select #use("cols")# from person  where  #use("condition")#

cols
  

id,NAME,age,pername,roleId,create_date  

updateSample
  

id=#id#,NAME=#name#,age=#age#,pername=#pername#,roleId=#roleid#,create_date=#createDate#  

condition
  

1 = 1  
@if(!isEmpty(id)){

  and>  
@}
  
@if(!isEmpty(name)){
  and NAME=#name#
  
@}
  
@if(!isEmpty(age)){
  and age=#age#
  
@}
  
@if(!isEmpty(pername)){
  and pername=#pername#
  
@}
  
@if(!isEmpty(roleid)){
  and roleId=#roleid#
  
@}
  
@if(!isEmpty(createDate)){
  and create_date=#createDate#
  
@}
  

  
sample
  

  ===


  •   注释
      select #use("cols")# from user  where  #use("condition")#

cols
  

id,name,age,username,roleId,create_date  

updateSample
  

id=#id#,name=#name#,age=#age#,username=#username#,roleId=#roleid#,create_date=#createDate#  

condition
  

1 = 1  
@if(!isEmpty(id)){

  and>  
@}
  
@if(!isEmpty(name)){
  and name=#name#
  
@}
  
@if(!isEmpty(age)){
  and age=#age#
  
@}
  
@if(!isEmpty(username)){
  and username=#username#
  
@}
  
@if(!isEmpty(roleid)){
  and roleId=#roleid#
  
@}
  
@if(!isEmpty(createDate)){
  and create_date=#createDate#
  
@}
  

  
(4)利用外部sql文件进行数据库表的操作
  

  ##1.编写md格式的sql文件结构以及内容如下(以查询为例)
  

select  
====
  

  select * from user where 1=1
  @if(!isEmpty(age)){
  and age=#age#
  @}
  @if(!isEmpty(name)){
  and name=#name#
  @}
  

  ##2.主方法代码
  

    //5.利用sql文件中sql语句进行查询  User query2 = new User();
  query.setName("xiandafu");
  System.out.println("开始使用sql文件中sql语句进行查询....");
  List list2 = sqlManager.select("user.select",User.class,query2);
  for(User u:list2) {
  System.out.println(u);
  }
  System.out.println("sql文件中sql语句进行查询成功...");
  

  执行结果:
  开始使用sql文件中sql语句进行查询....
  ┏━━━━━ Debug [user.select] ━━━
  ┣ SQL:    select * from user where 1=1
  ┣ 参数:    []
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:88)
  ┣ 时间:    78ms
  ┣ 结果:    [11]
  ┗━━━━━ Debug [user.select] ━━━
  User [id=1, age=19, roleId=null, name=朱可夫, userName=null, createDate=null]
  User [id=2, age=19, roleId=null, name=曼斯坦因, userName=mansitanying, createDate=null]
  User [id=3, age=19, roleId=null, name=曼斯坦因, userName=deguoyuanshuai, createDate=null]
  User [id=4, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=5, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=6, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=7, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=8, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=9, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=10, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  User [id=11, age=19, roleId=null, name=曼斯坦因, userName=null, createDate=null]
  sql文件中sql语句进行查询成功...
  这里我们看见了sql文件,本章不做详细说明,我们先来简单的了解一下sql问价可能的编写%EF%BC%885%EF%BC%89%E7%AE%80%E5%8D%95%E4%BA%86%E8%A7%A3sql%E6%96%87%E4%BB%B6%E7%9A%84%E7%BC%96%E5%86%99
  ##1.%E9%87%87%E7%94%A8md%E6%A0%BC%E5%BC%8F%EF%BC%8C===%E4%B8%8A%E9%9D%A2%E6%98%AFsql%E8%AF%AD%E5%8F%A5%E7%9A%84%E5%94%AF%E4%B8%80%E6%A0%87%E7%A4%BA%EF%BC%8C%E4%B8%8B%E9%9D%A2%E5%88%99%E6%98%AFsql%E8%AF%AD%E5%8F%A5

  ##2.@%E5%92%8C%E5%9B%9E%E8%BD%A6%E7%AC%A6%E6%98%AF%E5%AE%9A%E7%95%8C%E7%AC%A6%E5%8F%B7%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%9C%A8%E9%87%8C%E9%9D%A2%E5%86%99beetl%E8%AF%AD%E5%8F%A5

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623461-1-1.html 上篇帖子: exchange server 2013 In-Place eDiscovery问题 下篇帖子: Exchange Server 角色要求计算器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表