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
    评论
如果在使用Python的SQLAlchemy库中的`create_all()`方法创建表时,出现了db-journal文件的问题,这可能是由于数据库事务未正确提交导致的。下面是一些可能的解决方案: 1. 提交事务:在执行`create_all()`方法后,确保调用`commit()`方法提交数据库事务。这将确保所有表的创建操作被持久化到数据库中。示例代码如下: ```python from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # 创建数据库引擎 engine = create_engine('your_database_url') # 创建Session Session = sessionmaker(bind=engine) session = Session() # 创建表 # ... # 提交事务 session.commit() ``` 2. 关闭连接:在执行完`create_all()`方法后,调用`session.close()`方法关闭数据库连接。这将确保数据库连接被正确释放,并且不会留下db-journal文件。示例代码如下: ```python from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # 创建数据库引擎 engine = create_engine('your_database_url') # 创建Session Session = sessionmaker(bind=engine) session = Session() # 创建表 # ... # 关闭连接 session.close() ``` 3. 使用数据库管理工具:如果以上方法无效,可以尝试使用数据库管理工具来处理db-journal文件。例如,对于SQLite数据库,可以使用SQLite命令行工具或第三方SQLite管理工具来删除db-journal文件。 请注意,具体的解决方案可能因使用的数据库类型和版本而有所不同。如果上述方法无法解决问题,建议查阅相关数据库文档或寻求相关技术支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值