java mango_初识—极速分布式ORM框架---Mango

一、Mango简介

mango的中文名是“芒果”,它是一个极速分布式ORM框架。

特性:超高性能,响应速度接近直接使用JDBC

采用接口与注解的形式定义DAO,完美结合db与cache操作

支持动态sql,可以构造任意复杂的sql语句

支持多数据源,分表,分库,事务

提供拦截器功能,利用拦截器可为mango框架扩展各种自定义插件

独创“函数式调用”功能,能将任意复杂的对象,映射到数据库的表中

高效详细的实时统计系统,方便开发者随时了解自己的系统

独立jar包,不依赖其它jar包

提供便捷的spring插件,与spring无缝集成

二、如何使用Mango

方法1.添加pom.xml依赖

org.jfaster

mango

1.6.1

方法2.导入mango.jar

三、构造数据源并初始化mango对象

mango框架对java标准数据源 javax.sql.DataSource 进行了简单实现,所以这里构造数据源不需要引入第三方jar包。

初始化数据源需要4个参数:driverClassName:      驱动程序类名,这里我们使用MySQL驱动,所以类名是 com.mysql.jdbc.Driver 。

url:      连接数据库的url,这里我们将连接到本地MySQL的mango_example库,所以地址为 jdbc:mysql://localhost:3306/mango_example 。

username:      数据库用户名,这里我们使用root作为用户名。

password:      用户名所对应的密码,这里我们使用root作为密码。

四、Mango框架的基本操作

更新

更新主要包含insert,delete与update这三种操作。

通常情况化更新操作支持四种类型的返回值:

1、void或java.lang.Void:不返回值

2、int或java.lang.Integer:返回有多少行数据受到了影响

3、long或java.lang.Long:返回有多少行数据受到了影响

4、boolean或java.lang.Boolean:false表示没有数据受到影响,true表示有一到多行数据受到影响

批量更新

批量更新主要包含insert,delete与update这三种操作。

批量更新的输入只能有一个参数,参数的类型必须是List或Set或Array。

批量更新的输出支持三种类型的返回值:

1、void或java.lang.Void:不返回值

2、int或java.lang.Integer:返回累计有多少行数据受到了影响

3、int[]或java.lang.Integer[]:返回每条更新语句影响到了多少行数据

五、Mango框架参数绑定方式

参数绑定指的是:将接口参数绑定到SQL指定的位置中,也即向SQL中传入参数。

方式1:序号绑定

序号绑定指的是将接口参数的序号绑定到SQL指定的位置中。 参数的序号从1开始,:1表示使用第1个参数,:2表示使用第2个参数,以此类推。 下面是序号绑定的实例:@SQL("insert into binding_user(uid, name, age) values(:1, :2, :3)")

public void addUserByIndex(int uid, String name, int age);

方式2:重命名绑定

可以使用注解@Rename对参数进行重命名绑定,实例:@SQL("insert into user(name, age, gender, money, update_time) values(:name, :age, :gender, :money, :updateTime)")

public void addUserByRename(@Rename("name")String name, @Rename("age")int age, @Rename("gender")boolean gender, @Rename("money")long money, @Rename("updateTime")Date updateTime);

方式3:列表参数绑定

在SQL中使用in操作的时候,我们会使用到列表参数绑定。 下面是列表参数绑定的实例:@SQL("select id, name, age from user where id in (:1)")

public List getUsersByIds(List ids);

需要注意的是, in (:1) 中的参数必须是List或Set或Array,同时返回参数也必须是List或Set或Array。

方式4:属性绑定

当接口参数传入的是自定义对象时,我们可以使用属性绑定。 下面是属性绑定的实例:@SQL("insert into user(id, name, age) values(:1.id, :1.name, :1.age)")

public void addUserByObjIndex(User user);

需要注意的是,User类的属性必须具有get方法, 因为:1.uid将调用getUid()方法获取参数,:1.name将调用getName()方法获取参数,:1.age将调用getAge()方法获取参数。

方式5:属性自动匹配

在使用自定义对象时,使用:1.uid或:u.uid绑定参数会显得不够简练,mango实现了属性自动匹配功能,使SQL更加简练。 下面是属性自动匹配的实例:@SQL("insert into user(id, name, age) values(:id, :name, :age)")

public void addUserByProperty(User user);

方式6:混合绑定

各种参数绑定混合使用:@SQL("insert into user(id, name, age) values(:id, :name, :age)")

public void addUserByMix(@Rename("myid") int id, User user);

六.Mongo框架使用实例

(1)表结构CREATE TABLE `fruit` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '水果名称',

`num` int(11) NOT NULL COMMENT '数量',

`price` decimal(10,2) DEFAULT NULL COMMENT '价格',

`address` varchar(50) DEFAULT NULL COMMENT '产地',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

(2)项目pom.xml文件配置:

org.jfaster

mango

1.6.1

mysql

mysql-connector-java

5.1.46

com.google.code.gson

gson

2.8.5

com.google.guava

guava

19.0

org.apache.commons

commons-lang3

3.4

com.alibaba

fastjson

1.2.38

(3)实体类:package com.lhf.mango.entity;

import org.jfaster.mango.annotation.ID;

/**

* @ClassName: Fruit

* @Desc:  水果实体

* @Author: liuhefei

* @Date: 2018/12/20 15:31

*/

public class Fruit {

@ID

private Integer id;

private String name;

private int num;

private double price;

private  String address;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

@Override

public String toString() {

return "Fruit{" +

"id=" + id +

", name='" + name + '\'' +

", num=" + num +

", price=" + price +

", address='" + address + '\'' +

'}';

}

}

(4)Dao类:package com.lhf.mango.dao;

import com.lhf.mango.entity.Fruit;

import org.jfaster.mango.annotation.DB;

import org.jfaster.mango.annotation.SQL;

import org.jfaster.mango.crud.CrudDao;

import java.util.List;

@DB(table="fruit")

public interface FruitDao extends CrudDao {

String COLUMNS = "id, name, num, price, address";

//插入数据

@SQL("insert into #table(" + COLUMNS + ") values(:id, :name, :num, :price, :address)")

public void add(Fruit fruit);

//根据name取num的总和

@SQL("select sum(num) from #table where name=:1")

public int getTotalNum(String name);

//查询所有水果

@SQL("select " + COLUMNS + " from #table")

List list();

//根据水果id查询水果信息

@SQL("select " + COLUMNS + " from #table where id = :1")

Fruit getFruitByid(Long id);

@SQL("select count(*) from #table")

int countNum();

}

(5)主方法:实现添加、查询功能

package com.lhf.mango;

import com.lhf.mango.dao.FruitDao;

import com.lhf.mango.entity.Fruit;

import org.jfaster.mango.datasource.DriverManagerDataSource;

import org.jfaster.mango.operator.Mango;

import org.jfaster.mango.util.logging.MangoLogger;

import javax.sql.DataSource;

/**

* @ClassName: MangoDemo

* @Desc: mango的中文名是“芒果”,它是一个极速分布式ORM框架。

* 实现增删改查操作,这里也是操作单一数据库实例

* @Author: liuhefei

* @Date: 2018/12/20 15:23

*/

public class MangoDemo {

//定义数据源

String driverClassName = "com.mysql.jdbc.Driver";

String url = "jdbc:mysql://localhost:3306/mango_example";

String username = "root";

String passowrd = "root";

DataSource ds = new DriverManagerDataSource(driverClassName,url, username, passowrd);

Mango mango = Mango.newInstance(ds);  //使用数据源初始化mango

public static void main(String[] args){

MangoLogger.useConsoleLogger();   //在控制台输出日志

MangoDemo mangoDemo = new MangoDemo();

//添加水果

mangoDemo.add("苹果", 100, 5.8, "云南昆明");

mangoDemo.add("香蕉", 200, 3.6, "云南西双版纳");

mangoDemo.add("雪梨", 340, 8.8, "天山");

mangoDemo.add("葡萄", 130, 6.4, "新疆吐鲁番");

mangoDemo.getTotalNum("苹果");

mangoDemo.list();

mangoDemo.getFruitByid(3);

System.out.println("总数:"+mangoDemo.countNum());

}

public void add(String name, int num, double price, String address){

FruitDao fruitDao = mango.create(FruitDao.class);

Fruit fruit = new Fruit();

fruit.setName(name);

fruit.setNum(num);

fruit.setPrice(price);

fruit.setAddress(address);

fruitDao.add(fruit);

}

public void getTotalNum(String name){

FruitDao fruitDao = mango.create(FruitDao.class);

int num = fruitDao.getTotalNum(name);

System.out.println(name + "的num是: " + num);

}

public void list(){

FruitDao fruitDao = mango.create(FruitDao.class);

String fruitList = fruitDao.list().toString();

System.out.println("fruitList = " + fruitList);

}

public void getFruitByid(long id){

FruitDao fruitDao = mango.create(FruitDao.class);

String fruit = fruitDao.getFruitByid(id).toString();

System.out.println("fruit = " + fruit);

}

public int countNum(){

FruitDao fruitDao = mango.create(FruitDao.class);

int num = fruitDao.countNum();

return  num;

}

}

实例效果:

AAffA0nNPuCLAAAAAElFTkSuQmCC

今天分享就到这里,后面还会不断更新,感谢诸君的阅读与支持,如果对你有用就点个赞吧!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sqltoy-orm是比hibernate+myBatis更加贴合项目的orm框架,具有hibernate增删改的便捷性同时也具有比myBatis更加灵活优雅的自定义sql查询功能。 sqltoy-orm支持以下数据库: oracle 从oracle11g到19c db2 9.5+,建议从10.5 开始 mysql 支持5.6、5.7、8.0 版本 postgresql 支持9.5 以及以上版本 sqlserver 支持2008到2019版本,建议使用2012或以上版本 sqlite sybase_iq 支持15.4以上版本,建议使用16版本 elasticsearch 只支持查询,版本支持5.7+版本,建议使用7.3以上版本 clickhouse mongodb (只支持查询) sqltoy-orm特性: 1、根本上杜绝了sql注入问题,sql支持写注释、sql文件动态更新检测,开发时sql变更会自动重载。 2、最直观的sql编写模式,当查询条件稍微复杂一点的时候就会体现价值,后期变更维护的时候尤为凸显。 3、为强大的缓存翻译查询:巧妙的结合缓存减少查询语句表关联,大简化sql和提升性能。 4、最强大的分页查询:很多人第一次了解到何为快分页、分页优化这种为巧妙的处理,还有在count语句上的度优化。 5、跨数据库函数方言替换,如:isnull/ifnull/nvl、substr/substring 等不同数据库。 sqltoy-orm特点: 1、最优雅直观的sql编写模式 2、天然防止sql注入,执行过程 3、最强大的分页查询 4、最巧妙的缓存应用,将多表关联查询尽量变成单表 5、跨数据库 6、提供行列转换(数据旋转),避免写复杂的sql或存储过程,用算法来化解对sql的高要求,同时实现数据库无关(不管是mysql还是sqlserver) 7、提供分组汇总求平均算法(用算法代替sql避免跨数据库语法不一致) 8、分库分表 9、五种非数据库相关主键生成策略 10、elastic原生查询支持 11、elasticsearch-sql 插件模式sql模式支持     sqltoy-orm框架系统 更新日志: v4.18.22 1、在findEntity中EntityQuery可以设置fetchSize 2、在sqltoyContext中可以全局设置fetchSize,例如 spring.sqltoy.fetchSize=200 3、convertType 支持空集合返回空集合 4、针对一些特殊原因导致表名是数据库关键词的处理支持

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值