worker321 发表于 2018-10-19 09:44:24

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

  学习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)
  因为我已经完成了本次所展示的所有代码,所以提前展示一下代码结构

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

  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 ";
  }
  

  
}
  

  

  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 ━━━
  ┣ SQL:   insert into user (name,age,create_date) VALUES (?,?,?)
  ┣ 参数:    [曼斯坦因, 19, null]
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:52)
  ┣ 时间:    319ms
  ┣ 更新:   
  ┗━━━━━ Debug ━━━
  使用内置sql用户添加成功!!!!
  开始使用内置sql进行用户查询...
  ┏━━━━━ Debug ━━━
  ┣ SQL:   select * from user where id = ?
  ┣ 参数:   
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:60)
  ┣ 时间:    37ms
  ┣ 结果:    ]
  ┗━━━━━ Debug ━━━
  使用内置sql进行用户查询完毕!!
  开始使用内置sql更新用户信息...
  ┏━━━━━ Debug ━━━
  ┣ SQL:   update user set name=? where id = ?
  ┣ 参数:    [朱可夫, 1]
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:68)
  ┣ 时间:    168ms
  ┣ 更新:   
  ┗━━━━━ Debug ━━━
  使用内置sql更新用户信息成功!!!!
  开始进行模板查询...
  ┏━━━━━ Debug ━━━
  ┣ SQL:   select * from user where 1=1 and name=?
  ┣ 参数:    [曼斯坦因]
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:77)
  ┣ 时间:    91ms
  ┣ 结果:   
  ┗━━━━━ Debug ━━━
  打印查询结果:
  User
  User
  User
  User
  User
  User
  User
  User
  User
  User
  使用模板查询成功...
  开始使用sql文件中sql语句进行查询....
  ┏━━━━━ Debug ━━━
  ┣ SQL:    select * from user where 1=1
  ┣ 参数:    []
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:88)
  ┣ 时间:    78ms
  ┣ 结果:   
  ┗━━━━━ Debug ━━━
  User
  User
  User
  User
  User
  User
  User
  User
  User
  User
  User
  (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(){
  returnage;
  }
  public void setAge(Integer age ){
  this.age = age;
  }
  /**

[*]个人角色  @return
  /
  public Integer getRoleid(){
  returnroleid;
  }
  /**

[*]个人角色  @paramroleid
  /
  public void setRoleid(Integer roleid ){
  this.roleid = roleid;
  }

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


[*]人名  @return
  /
  public String getPername(){
  returnpername;
  }
  /**

[*]人名  @parampername
  /
  public void setPername(String pername ){
  this.pername = pername;
  }

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


  }

sample


[*]  注释
  select #use("cols")# from personwhere#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 userwhere#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 ━━━
  ┣ SQL:    select * from user where 1=1
  ┣ 参数:    []
  ┣ 位置:    main.TestBeetlSQL.main(TestBeetlSQL.java:88)
  ┣ 时间:    78ms
  ┣ 结果:   
  ┗━━━━━ Debug ━━━
  User
  User
  User
  User
  User
  User
  User
  User
  User
  User
  User
  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]
查看完整版本: BeetlSQL框架学习(一)——初识BeetlSQL,特点,内置sql的使用,Pojo代码生成等