首页 文章 精选 留言 我的

精选列表

搜索[orm框架],共10000篇文章
优秀的个人博客,低调大师

真正智慧的 ORM,sagacity-sqltoy-5.2.30 发版

开源地址: github:https://github.com/sagframe/sagacity-sqltoy gitee:https://gitee.com/sagacity/sagacity-sqltoy idea 插件 (可直接在 idea 中检索安装):https://github.com/threefish/sqltoy-idea-plugins 更新内容 1、优化并行分页,使用统一的线程池减少线程池的创建和销毁 2、DataSourceUtils增加initialize方法,强化线程安全 3、优化部分代码提升效率 感谢 rabbit 进行深度压力测试,编写并行分页的优化 sqltoy 的关键优势: //------------------了解 sqltoy的关键优势: -------------------------------------------------------------------------------------------*/ //1、最简最直观的sql编写方式(不仅仅是查询语句),采用条件参数前置处理规整法,让sql语句部分跟客户端保持高度一致 //2、sql中支持注释(规避了对hint特性的影响,知道hint吗?搜oracle hint),和动态更新加载,便于开发和后期维护整个过程的管理 //3、支持缓存翻译和反向缓存条件检索(通过缓存将名称匹配成精确的key),实现sql简化和性能大幅提升 //4、支持快速分页和分页优化功能,实现分页最高级别的优化,同时还考虑到了cte多个with as情况下的优化支持 //5、支持并行查询 //6、根本杜绝sql注入问题 //7、支持行列转换、分组汇总求平均、同比环比计算,在于用算法解决复杂sql,同时也解决了sql跨数据库问题 //8、支持保留字自动适配 //9、支持跨数据库函数自适配,从而非常有利于一套代码适应多种数据库便于产品化,比如oracle的nvl,当sql在mysql环境执行时自动替换为ifnull //10、支持分库分表 //11、提供了取top、取random记录、树形表结构构造和递归查询支持、updateFetch单次交互完成修改和查询等实用的功能 //12、sqltoy的update、save、saveAll、load 等crud操作规避了jpa的缺陷,参见update(entity,String...forceUpdateProps)和updateFetch //13、提供了极为人性化的条件处理:排它性条件、日期条件加减和提取月末月初处理等 //14、提供了查询结果日期、数字格式化、安全脱敏处理,让复杂的事情变得简单,大幅简化sql或结果的二次处理工作 //-----------------------------------------------------------------------------------*/ sqltoy 特点介绍: sqltoy 的核心构建思想 sqltoy 的对比 mybatis (plus) 的核心点:查询语句编写、可阅读性、可维护性 对象化 crud 是基础,但 sqltoy 有针对性的改进:update、updateSaveFetch、updateFetch 等 sqltoy 的缓存翻译,大幅减少表关联简化 sql,让你的查询性能成几何级提升 极致的分页,同样帮助你实现查询的性能大幅提升 快速分页:@fast () 实现先取单页数据然后再关联查询,极大提升速度 分页优化器:page-optimize 让分页查询由两次变成 1.3~1.5 次 (用缓存实现相同查询条件的总记录数量在一定周期内无需重复查询 sqltoy 的分页取总记录的过程不是简单的 select count (1) from (原始 sql);而是智能判断是否变成:select count (1) from 'from 后语句 ', 并自动剔除最外层的 order by sqltoy 支持并行查询:parallel="true",同时查询总记录数和单页数据,大幅提升性能 便利的跨数据库统计计算:数据旋转 便利的跨数据库统计计算:无限极分组统计 (含汇总求平均) 便利的跨数据库统计计算:同比环比

优秀的个人博客,低调大师

真正智慧的 ORM,sagacity-sqltoy-5.2.29 发版

开源地址: github:https://github.com/sagframe/sagacity-sqltoy gitee:https://gitee.com/sagacity/sagacity-sqltoy idea 插件 (可直接在 idea 中检索安装):https://github.com/threefish/sqltoy-idea-plugins 更新内容 1、优化雪花算法主键策略单例初始化定义,增加init初始化方法,避免线程安全 感谢网友:rabbit的反馈 sqltoy 的关键优势: //------------------了解 sqltoy的关键优势: -------------------------------------------------------------------------------------------*/ //1、最简最直观的sql编写方式(不仅仅是查询语句),采用条件参数前置处理规整法,让sql语句部分跟客户端保持高度一致 //2、sql中支持注释(规避了对hint特性的影响,知道hint吗?搜oracle hint),和动态更新加载,便于开发和后期维护整个过程的管理 //3、支持缓存翻译和反向缓存条件检索(通过缓存将名称匹配成精确的key),实现sql简化和性能大幅提升 //4、支持快速分页和分页优化功能,实现分页最高级别的优化,同时还考虑到了cte多个with as情况下的优化支持 //5、支持并行查询 //6、根本杜绝sql注入问题 //7、支持行列转换、分组汇总求平均、同比环比计算,在于用算法解决复杂sql,同时也解决了sql跨数据库问题 //8、支持保留字自动适配 //9、支持跨数据库函数自适配,从而非常有利于一套代码适应多种数据库便于产品化,比如oracle的nvl,当sql在mysql环境执行时自动替换为ifnull //10、支持分库分表 //11、提供了取top、取random记录、树形表结构构造和递归查询支持、updateFetch单次交互完成修改和查询等实用的功能 //12、sqltoy的update、save、saveAll、load 等crud操作规避了jpa的缺陷,参见update(entity,String...forceUpdateProps)和updateFetch //13、提供了极为人性化的条件处理:排它性条件、日期条件加减和提取月末月初处理等 //14、提供了查询结果日期、数字格式化、安全脱敏处理,让复杂的事情变得简单,大幅简化sql或结果的二次处理工作 //-----------------------------------------------------------------------------------*/ sqltoy 特点介绍: sqltoy 的核心构建思想 sqltoy 的对比 mybatis (plus) 的核心点:查询语句编写、可阅读性、可维护性 对象化 crud 是基础,但 sqltoy 有针对性的改进:update、updateSaveFetch、updateFetch 等 sqltoy 的缓存翻译,大幅减少表关联简化 sql,让你的查询性能成几何级提升 极致的分页,同样帮助你实现查询的性能大幅提升 快速分页:@fast () 实现先取单页数据然后再关联查询,极大提升速度 分页优化器:page-optimize 让分页查询由两次变成 1.3~1.5 次 (用缓存实现相同查询条件的总记录数量在一定周期内无需重复查询 sqltoy 的分页取总记录的过程不是简单的 select count (1) from (原始 sql);而是智能判断是否变成:select count (1) from 'from 后语句 ', 并自动剔除最外层的 order by sqltoy 支持并行查询:parallel="true",同时查询总记录数和单页数据,大幅提升性能 便利的跨数据库统计计算:数据旋转 便利的跨数据库统计计算:无限极分组统计 (含汇总求平均) 便利的跨数据库统计计算:同比环比

优秀的个人博客,低调大师

真正智慧的 ORM,sagacity-sqltoy-5.2.28 发版

开源地址: github:https://github.com/sagframe/sagacity-sqltoy gitee:https://gitee.com/sagacity/sagacity-sqltoy idea 插件 (可直接在 idea 中检索安装):https://github.com/threefish/sqltoy-idea-plugins 更新内容 1、修复@value(:name) 存在$\符号,导致正则表达式替换bug 2、增强cacheMatchKeys支持数组,将多个名称通过like匹配找到精准的key String[] cacheMatchKeys(CacheMatchFilter cacheMatchFilter, String... matchRegexes) 3、sql中cache-args通过名称匹配精准key支持数组,同时调整filter逻辑,filter条件成立表示包含此数据 <!-- 通过缓存将名称用类似like模式匹配出对应的编码作为条件进行精准查询 --> <cache-arg param="" cache-name="" cache-type="" alias-name="" prior-match-equal=""> <!-- 对缓存进行过滤,比如个人授权的机构、状态为生效的缓存数据等 --> <!-- compare-param: 可以是一个参数的属性名称也可以是具体的值,cache-index对应缓存数据的第几列 --> <filter compare-param="1" cache-index="4"/> </cache-arg> sqltoy 的关键优势: //------------------了解 sqltoy的关键优势: -------------------------------------------------------------------------------------------*/ //1、最简最直观的sql编写方式(不仅仅是查询语句),采用条件参数前置处理规整法,让sql语句部分跟客户端保持高度一致 //2、sql中支持注释(规避了对hint特性的影响,知道hint吗?搜oracle hint),和动态更新加载,便于开发和后期维护整个过程的管理 //3、支持缓存翻译和反向缓存条件检索(通过缓存将名称匹配成精确的key),实现sql简化和性能大幅提升 //4、支持快速分页和分页优化功能,实现分页最高级别的优化,同时还考虑到了cte多个with as情况下的优化支持 //5、支持并行查询 //6、根本杜绝sql注入问题 //7、支持行列转换、分组汇总求平均、同比环比计算,在于用算法解决复杂sql,同时也解决了sql跨数据库问题 //8、支持保留字自动适配 //9、支持跨数据库函数自适配,从而非常有利于一套代码适应多种数据库便于产品化,比如oracle的nvl,当sql在mysql环境执行时自动替换为ifnull //10、支持分库分表 //11、提供了取top、取random记录、树形表结构构造和递归查询支持、updateFetch单次交互完成修改和查询等实用的功能 //12、sqltoy的update、save、saveAll、load 等crud操作规避了jpa的缺陷,参见update(entity,String...forceUpdateProps)和updateFetch //13、提供了极为人性化的条件处理:排它性条件、日期条件加减和提取月末月初处理等 //14、提供了查询结果日期、数字格式化、安全脱敏处理,让复杂的事情变得简单,大幅简化sql或结果的二次处理工作 //-----------------------------------------------------------------------------------*/ sqltoy 特点介绍: sqltoy 的核心构建思想 sqltoy 的对比 mybatis (plus) 的核心点:查询语句编写、可阅读性、可维护性 对象化 crud 是基础,但 sqltoy 有针对性的改进:update、updateSaveFetch、updateFetch 等 sqltoy 的缓存翻译,大幅减少表关联简化 sql,让你的查询性能成几何级提升 极致的分页,同样帮助你实现查询的性能大幅提升 快速分页:@fast () 实现先取单页数据然后再关联查询,极大提升速度 分页优化器:page-optimize 让分页查询由两次变成 1.3~1.5 次 (用缓存实现相同查询条件的总记录数量在一定周期内无需重复查询 sqltoy 的分页取总记录的过程不是简单的 select count (1) from (原始 sql);而是智能判断是否变成:select count (1) from 'from 后语句 ', 并自动剔除最外层的 order by sqltoy 支持并行查询:parallel="true",同时查询总记录数和单页数据,大幅提升性能 便利的跨数据库统计计算:数据旋转 便利的跨数据库统计计算:无限极分组统计 (含汇总求平均) 便利的跨数据库统计计算:同比环比

优秀的个人博客,低调大师

jSqlBox 4.0.6 版更新,Java 数据库 ORM 工具

jSqlBox是一个Java全功能数据库持久层工具,主页 https://gitee.com/drinkjava2/jsqlbox jSqlBox主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。它的主要特点有: 1.内核基于DbUtils并与之兼容。 2.jSqlBox提倡在java里拼写SQL,独创参数内嵌式SQL写法, 任意DAO方法甚至ActiveRecord方法都可以混插SQl片段,例如: new Demo().setName(""张三"").insert().putField("name", "李四").update(" and name=", ques("李四"), " and age> ",ques(20)); 3.单个jar包,无须引入任何第三方库即可实现声明式事务、分库分表和分布式事务 4.ActiveRecord实体类可以只声明接口,不占用宝贵的单继承 5.支持80多种数据库方言的DDL生成、分页、函数变换、实体源码生成 6.在低版本Java里也可以存放并利用IDE定位多行SQL文本 7.学习成本低,实体注解尽量兼容JPA注解,不支持级联、不支持隋性加载 。 jSqlBox的目标是做最好用的数据库持久层工具,正如我喜欢给别的项目找缺点一样,也欢迎大家来找jSqlBox的缺点。 本次更新是最近三次更新的汇总,最新版本为jsqlbox-4.0.6.jre8,有以下内容变更: 1. 从数据库生成Java源码时,char(xx) 类型不再映射成单个Character字符类型, 而是映射成String类型. 2. DB类中增加一个静态iPrepare方法以方便使用。 3. 新增一个SQL工具类,保存了SQL关键字常量,以减少拼写SQL的错误和去除字符引号,如字符" select " 可以用SQL.SELECT代替,例如以下SQL: User u=DB.eLoadBySQL(User.class, "select * from user_tb where user_id=", ques(3), " or user_name=", ques("other")); 如果配合源码自动生成的列名常量,以及静态引入的SQL常量,则可以写成以下支持SQL重构的形式: User u=DB.eLoadBySQL(User.class, SELECT_STAR, FROM, User.TABLE_NAME, WHERE, User.ID, EQ, ques(3), OR, User.NAME, EQ, ques("other")); 这种写法相比与JOOQ之类的SQL工具来说,优点是秒懂、学习负担轻,因为本质上jSqlBox就是在Java里拼接SQL字符串。 4. DbContext和DB类中新增了一个eFindOneBySQL方法,这个方法如果没有发现实体将会返回null, 而不是象eLoadBySQL方法一样抛出异常。 5. StrUtils工具类中增加了一个array方法,用于将数组转换写成("abc", 12, 345)类型的字符串形式。 6. TableModelUtilsOfDb和TableModelUtilsOfJavaSrc中,改成用字符串常量的形式,并有功能调整, 7. 允许使用@Column(name="`xxx`") 的方式使用数据库关键字作为列名,支持反单引号、双引号、中括号三种引用符,视不同的数据库而定。使用数据库关键字作为列名这种做法不推荐,通常只用于旧项目改造,新项目强烈不建议使用关键字作为列名。 8. TypeUtils中更正了实体不支持基本数据类型如int、short等类型的bug 9. 更正了@IdentityId注解在MySql下出错的bug,这是BigInteger类型转换有bug造成的 10. 更正了@Enumerated注解的字段应该允许为null 以上更新内容感谢mr.fire同学提交pr和weishengbin同学提交issue!

优秀的个人博客,低调大师

Android:数据库增删改查、SQLite、ORM、Cursor

1.继承类SQLiteOpenHelper: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class MySQLiteHelper extends SQLiteOpenHelper { //重写构造方法 public MySQLiteHelper(Context context, String name, CursorFactory factory, int version) { super (context, name, factory, version); } //创建表 @Override public void onCreate(SQLiteDatabase db) { db.execSQL( "CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))" ); db.execSQL( "CREATE TABLE student(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))" ); } //升级表(当Database的Version低于当前new里的Version,直接执行下面方法) @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { int v = newVersion - oldVersion; switch (v) { case 3 : db.execSQL( "ALTER TABLE person ADD salary3 VARCHAR(20)" ); case 2 : db.execSQL( "ALTER TABLE person ADD salary2 VARCHAR(20)" ); case 1 : db.execSQL( "ALTER TABLE person ADD salary1 VARCHAR(20)" ); default : break ; } } } 2.实现增删改查: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 /** * CREATE TABLE person ( personid INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20), phone VARCHAR(20) ) DROP TABLE person //删除表 INSERT INTO person(name,phone) VALUES ("rongqin","1598088588") //插入 UPDATE person SET name="Andfeel" WHERE personid=2 //改 ALTER TABLE person ADD salary //增加列 DELETE FROM person WHERE name="Andfeel" //删除 SELECT * FROM person WHERE name="Andfeel" SELECT phone,name FROM person SELECT name,phone FROM person ORDER BY name ASC"//ASC升序 DESC降序 * */ public class MainActivity extends Activity implements OnClickListener { private TextView textView; private MySQLiteHelper mDBHelper; private MySQLiteHelper bHelper; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn__create_table).setOnClickListener( this ); findViewById(R.id.btn_delete_table).setOnClickListener( this ); findViewById(R.id.btn_alter_table).setOnClickListener( this ); findViewById(R.id.btn_insert).setOnClickListener( this ); findViewById(R.id.btn_delete).setOnClickListener( this ); findViewById(R.id.btn_update).setOnClickListener( this ); findViewById(R.id.btn_select).setOnClickListener( this ); textView = (TextView) findViewById(R.id.textView1); //创建数据库 mDBHelper = new MySQLiteHelper( this , "one.db" , null , 3 ); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true ; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn__create_table: btnCreateTable(); break ; case R.id.btn_delete_table: btnDeleteTable(); break ; case R.id.btn_alter_table: btnAlterTable(); break ; case R.id.btn_insert: btnInsert(); break ; case R.id.btn_delete: btnDelete(); break ; case R.id.btn_update: btnUpdate(); break ; case R.id.btn_select: btnSelect(); break ; default : break ; } } private void btnSelect() //查 { SQLiteDatabase db = mDBHelper.getWritableDatabase(); // Cursor cursor = db.rawQuery("SELECT * FROM person WHERE name = ?", new String[]{"rongqin"}); // cursor.moveToFirst(); Cursor cursor = db.query( "person" , //表名 new String[]{ "phone" , "name" }, //查询的列名 "name=?" , //查询条件 new String[]{ "huangxx" }, //查询参数 null , null , "phone DESC" ); //排序,升序为ASC,降序为DESC boolean hasdata = cursor.moveToFirst(); //游标移到第一行 StringBuilder sb = new StringBuilder(); while (hasdata) //是否有数据 { int columnIndex = cursor.getColumnIndex( "name" ); //得到name的列数 String name = cursor.getString(columnIndex); //得到name这一列的值 int columnIndex2 = cursor.getColumnIndex( "phone" ); String phone = cursor.getString(columnIndex2); sb.append( "name:" ).append(name).append( " phone:" ).append(phone).append( "--" ); hasdata = cursor.moveToNext(); //游标移动到下一行,判断是否有值 } textView.setText(sb.toString()); } private void btnUpdate() //改 { SQLiteDatabase db = mDBHelper.getWritableDatabase(); // db.execSQL("UPDATE person SET phone='0592xxxxxx' WHERE personid=5"); ContentValues values = new ContentValues(); values.put( "name" , "haoyouduo" ); values.put( "phone" , "666666" ); db.update( "person" , values , "personid=?" , new String[]{ "8" }); } private void btnDelete() //删 { SQLiteDatabase db = mDBHelper.getWritableDatabase(); // db.execSQL("DELETE FROM person WHERE name='Andfeel'"); db.delete( "person" , "name = ? and personid = ?" , new String[]{ "haoyouduo" , "5" }); } private void btnInsert() //增 { SQLiteDatabase db = mDBHelper.getWritableDatabase(); // db.execSQL("INSERT INTO person(name,phone) VALUES ('rongqin',1598088588)"); ContentValues values = new ContentValues(); values.put( "name" , "huangxx" ); values.put( "phone" , "158888" ); db.insert( "person" , null , values ); } private void btnAlterTable() //扩展表 { } private void btnDeleteTable() //删除表 { } private void btnCreateTable() //创建表 { } } 其他总结: 1.关闭数据源 1 2 3 4 5 6 7 8 9 10 /** * 关闭数据源 */ public void closeConnection() { if (mDb != null && mDb.isOpen()) mDb.close(); if (mDbHelper != null ) mDbHelper.close(); } 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1216877,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册