精华内容
下载资源
问答
  • 引言在用hibernate的时候发现idea能自动生成JavaBean,同时带有一些注解,这引起了我的好奇。当在学习Android的时候,我发现XUtils这个工具包中的DBUtils也能够使用类似hibernate的注解。于是乎在java编程思想中找了...

    引言

    在用hibernate的时候发现idea能自动生成JavaBean,同时带有一些注解,这引起了我的好奇。当在学习Android的时候,我发现XUtils这个工具包中的DBUtils也能够使用类似hibernate的注解。于是乎在java编程思想中找了找有关注解的用法。

    一 注解定义

    注解(也称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。注解来源于C#之类的其他语言。

    注解的语法比较简单,除了@符号外,它与java的固有语法一致。javaSE5中内置了三种注解:

    @Override:定义覆盖超类,当覆写对应不上被覆盖的方法,编译器发出错误提示。

    @Deprecated:当使用了该注解,即表示这个方法已经不推荐被使用。

    @SuppressWarnings:关闭不当的编译器警告。

    二 基本语法

    我们使用自定义的注解对一个方法进行注解:

    public class Testable{

    public void execute()

    {

    System.out.println("execute...");

    }

    @WETest

    void taskStart()

    {

    execute();

    }

    }

    在上边的代码中,我们对taskStart方法使用了注解,接下来我们对WETest注解进行定义:

    import java.lang.annotation.*;

    @Target(ElementType.METHOD)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface WETest{}

    三 定义注解

    我们给上边的注解添加一些内容:

    import java.lang.annotation.*;

    @Target(ElementType.METHOD)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface WETest{

    public int id();

    public String Notes() default "there is no Notes";

    }

    同样,我们对Testable类使用最新的注解:

    public class Testable{

    @WETest(id=666)

    public void execute()

    {

    System.out.println("execute...");

    }

    @WETest(id=666,Notes="this is a method")

    void taskStart()

    {

    execute();

    }

    }

    注解就是这么使用的,当注解内容没有填写时,他会使用默认的值,如execute方法,他没有定义Notes,那么Notes默认值为"there is no Notes"。

    四 元注解

    我们看到注解上边有两行内容,它们是元注解,专门对注解的解释。元注解一共有四种,分别是:

    @Target:表示该注解可以用到哪些地方,ElementType,CONSTRUCTOR构造器声明,FIELD域声明(包括enum实例),LOCAL_VARIABLE局部变量声明,METHOD方法,PACKAGE包,PARAMETER参数,TYPE类、接口或enum。

    Retention:表示需要在什么级别上使用,RetentionPolicy,SOURCE注解会被编译器丢掉,CLASS在class文件中可用会被VM抛弃,RUNTIME在VM运行期也会保留可以通过反射获取注解信息。

    Documented:将注解包含在Javadoc中。

    Inherited:允许子类继承父类中的注解。

    五 通过注解反射生成SQL语句

    接下来,我用一个例子来解释注解的作用。先编写一些注解定义:

    //DBTable.java            用来生成数据表

    package annotations;

    import java.lang.annotation.ElementType;

    import java.lang.annotation.Retention;

    import java.lang.annotation.RetentionPolicy;

    import java.lang.annotation.Target;

    @Target(ElementType.TYPE)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface DBTable {

    public String name() default "";

    }

    //Constraints.java        用来定义约束项

    package annotations;

    import java.lang.annotation.ElementType;

    import java.lang.annotation.Retention;

    import java.lang.annotation.RetentionPolicy;

    import java.lang.annotation.Target;

    @Target(ElementType.FIELD)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface Constraints {

    boolean primarykey() default false;

    boolean allownull() default true;

    }

    //PrimaryKey.java        将Constraints中的primarykey定义为真,表示为主键

    package annotations;

    import java.lang.annotation.*;

    @Target(ElementType.FIELD)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface PrimaryKey {

    Constraints constraints() default @Constraints(primarykey = true);

    }

    //SQLInteger.java         定义列的类型

    package annotations;

    import java.lang.annotation.*;

    @Target(ElementType.FIELD)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface SQLInteger {

    String name() default "";

    Constraints constraints() default @Constraints;

    }

    //SQLString.java        定义列的类型

    package annotations;

    import java.lang.annotation.*;

    @Target(ElementType.FIELD)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface SQLString {

    int value() default 64;

    String name() default "";

    Constraints constraints() default @Constraints;

    }

    接下来写一个javabean,使用上述注解:

    //User.java

    import annotations.Constraints;

    import annotations.DBTable;

    import annotations.SQLInteger;

    import annotations.SQLString;

    @DBTable(name="user")

    public class User {

    @SQLInteger(name="id",constraints = @Constraints(primarykey=true))

    public Integer id;

    @SQLString(value=30)

    public String name;

    @SQLString(name="passwd",constraints=@Constraints(allownull=false))

    public String password;

    /*可以不用

    public void setId(Integer id) {

    this.id = id;

    }

    public void setName(String name) {

    this.name = name;

    }

    public void setPassword(String password) {

    this.password = password;

    }

    public Integer getId() {

    return id;

    }

    public String getName() {

    return name;

    }

    public String getPassword() {

    return password;

    }*/

    }

    我们看到注解中可以使用注解,在SQLInteger中我们使用了Constraints注解。

    接下来我们写一个注解处理器:

    //Test.java

    import java.lang.annotation.Annotation;

    import java.lang.reflect.Field;

    import java.util.ArrayList;

    import java.util.List;

    import java.util.Scanner;

    import annotations.Constraints;

    import annotations.DBTable;

    import annotations.SQLInteger;

    import annotations.SQLString;

    public class Test {

    public static String getConstraints(Constraints con)

    {

    String constraints = "";

    if(!con.allownull())

    {

    constraints +=" NOT NULL";

    }

    if(con.primarykey())

    {

    constraints += " PRIMARY KEY";

    }

    return constraints;

    }

    public static void main(String[] args) throws ClassNotFoundException {

    Scanner s = new Scanner(System.in);

    String name = s.next();                                    //从控制台输入一个类名,我们输入User即可

    Class> cl = Class.forName(name);                         //加载类,如果该类不在默认路径底下,会报 java.lang.ClassNotFoundException

    DBTable dbTable = cl.getAnnotation(DBTable.class);         //从User类中获取DBTable注解

    if(dbTable == null){                                       //如果没有DBTable注解,则直接返回,我们写了,当然有

    return;

    }

    String tableName = (dbTable.name().length()<1)?cl.getName():dbTable.name();//获取表的名字,如果没有在DBTable中定义,则获取类名作为Table的名字

    List columnDefs = new ArrayList();

    for(Field field : cl.getDeclaredFields())                  //获取声明的属性

    {

    String columnName = null;

    Annotation[] anns = field.getDeclaredAnnotations();//获取注解,一个属性可以有多个注解,所以是数组类型

    if(anns.length 

    {

    continue;

    }

    if(anns[0] instanceof SQLInteger)                //判断注解类型

    {

    SQLInteger sInt = (SQLInteger)anns[0];

    columnName = (sInt.name().length()<1)?field.getName():sInt.name();//获取列名称与获取表名一样

    columnDefs.add(columnName+" INT"+getConstraints(sInt.constraints()));//使用一个方法,自己写的getConstraints(Constraints constraints)获取列定义

    }

    if(anns[0] instanceof SQLString)

    {

    SQLString sStr = (SQLString)anns[0];

    columnName = (sStr.name().length()<1)?field.getName().toUpperCase():sStr.name();

    columnDefs.add(columnName + " VARCHAR("+sStr.value()+")"+getConstraints(sStr.constraints()));

    }

    }

    StringBuilder createCommand = new StringBuilder("CREATE TABLE "+tableName+"(");

    for(String columnDef :columnDefs)

    {

    createCommand.append("\n    "+columnDef+",");

    }

    String tableCreate = createCommand.substring(0,createCommand.length()-1)+"\n);";

    System.out.println(tableCreate);                        //打印出来

    }

    }

    我们可以采用上述方法动态的处理一些数据,例如创建数据表。

    六 总结

    注意:注解不支持继承例如 extends @xxx。注解的default默认值不可以为null

    总结:使用注解可以减少对xml等外部文件的依赖,使得对类的定义可以在一处实现,避免了一个类两处定义的麻烦。spring和hibernate就采用的这样的方法。

    展开全文
  • 31.Oracle数据库SQL开发之 SQLPlus使用——自动生成SQL语句使用SQL语句来生成其他SQL语句。产生一些列DROP TABLE语句,如下:store@PDB1> SELECT 'DROP TABLE ' || table_name ||';' from user_tables;'DROPTABLE...

    31.Oracle数据库SQL开发之 SQLPlus使用——自动生成SQL语句

    使用SQL语句来生成其他SQL语句。

    产生一些列DROP TABLE语句,如下:

    store@PDB1> SELECT 'DROP TABLE ' || table_name ||';' from user_tables;

    'DROPTABLE'||TABLE_NAME||';'

    ----------------------------------------------------------------------

    DROP TABLECUSTOMERS;

    DROP TABLEPRODUCT_TYPES;

    DROP TABLEPRODUCTS;

    DROP TABLEPURCHASES;

    DROP TABLEEMPLOYEES;

    DROP TABLESALARY_GRADES;

    DROP TABLEPURCHASES_WITH_TIMESTAMP;

    DROP TABLEPURCHASES_TIMESTAMP_WITH_TZ;

    DROP TABLEPURCHASES_WITH_LOCAL_TZ;

    DROP TABLECOUPONS;

    DROP TABLEPROMOTIONS;

    DROP TABLEORDER_STATUS;

    DROP TABLEPRODUCT_CHANGES;

    DROP TABLEMORE_PRODUCTS;

    DROP TABLEMORE_EMPLOYEES;

    DROP TABLEDIVISIONS;

    DROP TABLEJOBS;

    DROP TABLEEMPLOYEES2;

    DROP TABLEALL_SALES;

    DROP TABLEPRODUCT_PRICE_AUDIT;

    DROP TABLEREG_EXPS;

    DROP TABLEPIVOT_SALES_DATA;

    DROP TABLEBINARY_TEST;

    23 rows selected.

    可以将SQL语句保存到一个文件中,供以后使用。

    很高级的事情,其实做起来也是比较简单。复杂事情都是由简单事情组成的嘛。

    展开全文
  • 安装插件MyBatis Log Plugin 点击File->Settings->Pligins搜索插件MyBatis Log Plugin并安装,安装完成后重启IDEA: 二。使用方法 1.在properties配置文件中加入以下配置,开启该插件: #开启MyBatis Log ...

    一。安装插件MyBatis Log Plugin

    点击File->Settings->Pligins搜索插件MyBatis Log Plugin并安装,安装完成后重启IDEA:
    在这里插入图片描述
    在这里插入图片描述

    二。使用方法

    1.在properties配置文件中加入以下配置,开启该插件:

    #开启MyBatis Log Plugin日志插件
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    

    2.右键打开该插件:
    在这里插入图片描述
    3.调用接口,该插件自动生成sql脚本日志:
    在这里插入图片描述

    展开全文
  • idea打印sql语句插件

    2021-05-12 17:13:51
    idea -> Settings-> plugins myBatis log plugin 这个插件可以打印sql语句

    idea -> Settings-> plugins

    myBatis log plugin
    这个插件可以打印sql语句

    展开全文
  • 我们在使用MyBatis的时候,打印出来的sql都是sql本体和参数分离,一两个参数倒也还好,参数多了复制起来就很麻烦了,使用插件MyBatis Log Plugin 可以完美解决这个问题。 重启IDEA后的操作如下: ...
  • It is written in JavaScript,crud for mysql.You can also use transactions very easily.mysqls 一款专为node.js生成sql语句插件,链式调用,使用灵活。支持生成sql语法,也支持生成语法之后直接调用,支持事物...
  • MSSQL语句自动生成

    2021-04-15 21:39:33
  • (1)所谓动态sql即SQL语句拼接拼接方式分为: ①if 判断语句 ②where 语句 ③choose when otherwise ④trim 替换语句 ⑤forEach 循环语句 案例使用表: DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( ...
  • 实现物理分页,提高分页性能。整理代码来自...使用方法:xxExampleexample=newxxExample();example.setLimitStart(page.getStartPage());example.setLimitEnd(page.getPageSize(...
  • 支持Access、MySql、Oracle、SQL Server四种类型的数据库,自动生成C#和Java实体类,自动生连接符为“&”和“+”的INSERT,UPDATE,DELETE,SELECT语句,支持简单的数据查询修改。更新日志:2014-03-20我实在是太懒...
  • 首先,在pom.xml中配置generator 插件所对应的配置文件 ${basedir}/src/main/resources/generator/generatorConfig.xml接下来是所需要的generatorConfig.xml,项目中位置如下:generatorConfig.xml文件内容如下:1 2 ...
  • Mybatis Log plugin安装1、什么是Mybatis Log plugin?2、安装步骤下载按安装包 IDEA 2020版本安装Mybatis Log plugin 今天在新电脑上安装...举个栗子,通常在找bug的时候都会查看执行了什么SQL,想把这条SQL拼接出
  • 根据实体类生成sql语句 package com.ovopark.utils; /** * @ClassName SqlGenator * @Description 根据实体类生成建库语句 * @Author wangshuai * @Date 2021/10/18 16:35 * @Version 1.0 **/ import org....
  • 介绍 tjx-cold(因为有这个想法的时候深圳很冷)用于根据配置模板,快速生成controller,service,serviceimpl 代码为什么要开发这款插件市面上有很多基于数据库生成代码的工具,但是我自己的工作流,是只用数据库生成...
  • 一、项目功能概述很多同学知道mybatis插件可以生成CURD代码,但是对于生成的代码不会使用。而这个案例我将会用一个http接口服务的项目,带领初学者如何使用mybatis自动生成的CURD代码,快速开发业务逻辑。二、项目...
  • 书写sql语句也这么久(嘿嘿大概2年了吧),从最初的学习到现在,都期盼能向VS那样有智能的提示,我敲一个单词,他就提示!那该多好啊!又可以减少错误,也提高了开发效率。哎…没办法,身边的人也都这样敲,看来是大家都...
  • mysqlsIt is written in JavaScript,crud for mysql.You can also use transactions very easily.mysqls 一款专为node.js生成sql语句插件,链式调用,使用灵活。支持生成sql语法,也支持生成语法之后直接调用,...
  • EF Core 日志跟踪sql语句1.新增自定义ILoggerProvider实现类public class EFLoggerProvider : ILoggerProvider{public ILogger CreateLogger(string categoryName) => new EFLogger(categoryName);public void ...
  • 使用注解开发的好处就是减少配置文件的使用。在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件。但是,当配置文件过多,...下面为各位展示下使用注解开发自动生成SQL语句的过程。首先先定义...
  • importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.List;importjava.util.Properties;importorg.apache.ibatis.executor....
  • WARNING ⚠:别学我,IDEA 有 DDL 一键生成 POJOs 插件,我丫的是 VSCode 党 o( ̄┰ ̄*)ゞ 算法步骤 简历一个 POJO 字符串模板,可以直接填充包名、导入语句、类名、字段语句 解析 DDLSQL 语句,得到类名(table ...
  • 这是一款拥有SQL智能提示功能的SQL Server和VS插件,能够根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择,自动脚本设置使代码简单易读,特别适合开发者不大熟悉脚本时候使用,使用...
  • 大家基本上都知道如何使用 MyBatis 执行任意 SQL,使用方法很简单,例如在一个 XXMapper.xml 中:${_parameter}你可以如下调用:sqlSession.selectList("executeSql", "select * from sysuser where enabled = 1");...
  • 另一种方式依赖于框架的支持,可以截获到方法的return语句,获取其执行的SQL语句, 有了SQL语句生成DTO就没有什么难度了。 如何修改代码 为了尽量减少程序员的工作,我们的代码生成器在生成完DTO后, 还需要将...
  • MySQL数据库:SQL语句的执行过程

    万次阅读 多人点赞 2021-02-22 03:59:20
    我们的系统在和 MySQL 数据库进行通信前,需要先和数据库建立连接,而这个功能就是由MySQL驱动底层帮我们完成的,建立完连接之后,我们只需要发送 SQL 语句就可以执行 CRUD 了。如下图所示: 一次 SQL 请求就会...
  • 前言:由于前面springboot项目集成mybatis时,查询数据库存在报错或无返回值的情况,所以就在想能不能在控制台打印出来sql执行的脚本,以便观察具体报错原因,平常在项目开发中出现返回值不符合预期等情况通常看下...
  • 主要用到了jsqlparser,前面有篇博客介绍过:为了给Mybatis分页插件增加对sql...简单讲一下处理的逻辑:通过对SqlServer进行分析,利用jsqlparser方便的解析,然后对sql结构进行修改,生成最后的分页语句。首先一个...
  • 用Elasticsearch 实现类似SQL中like的功能('%aaa%'),查询数据时,要前后模糊匹配,不要分词(用户输入AAA,检索的结果中AAA需要连在一起,不能是AABA) 1.2 所需知识点 1.2.1 phrase-matching phrase-matching ...
  • 在平常的开发中,可能很多人都是 CRUD,对 SQL 语句的语法很熟练,但是说起一条 SQL 语句在 MySQL 中是怎么执行的却浑然不知,今天我就由浅入深,带大家一点点剖析一条 SQL 语句在 MySQL 中是怎么执行的,吊打面试官...
  • 2、如果是微服务,有多个数据库的话 manager shown schemas 设置显示的schema(数据库) 3、关联项目和数据库 4、操作完成之后,alt+enter就可以将 * 替换成表对应的字段了

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,092
精华内容 22,036
关键字:

自动生成sql语句的插件