GithubHelp home page GithubHelp logo

jfaster / mango Goto Github PK

View Code? Open in Web Editor NEW
920.0 920.0 364.0 2.73 MB

Distributed ORM Framework for Java

Home Page: http://mango.jfaster.org/

License: Apache License 2.0

Java 98.21% Shell 0.01% TSQL 1.78%
java mango orm-framework sharding

mango's Issues

如何使用like?

"#if(:1 != '' && :1 != null ) AND group_name like '%#{:1}%' #end "

该框架不认为在单引号里面的是一个变量 #{:1}

咨询一下

想了解一下动态sql使用的是哪种表达式引擎?示例给的不太清楚,对于复杂的判断不太明白

主库从库配置中多个库的情况如何配置

<!-- 配置主从数据源工厂 --> <bean id="masterSlaveDataSourceFactory" class="org.jfaster.mango.datasource.MasterSlaveDataSourceFactory"> <property name="name" value="dsf2" /> <property name="master"> <bean class="org.jfaster.mango.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mango_example_master" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> </property> <property name="slaves"> <list> <bean class="org.jfaster.mango.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mango_example_slave1" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean class="org.jfaster.mango.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mango_example_slave2" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> </list> </property> </bean>

是在master节点里面增加多个org.jfaster.mango.datasource.DriverManagerDataSource吗?

比如我主库有base, trade,td0,td1,td2,td3,td4...N个,slave库也有同样的那么多。该如何配置

mysql d递归查询语法解析存在问题

String sql ="SELECT N_ID FROM(SELECT @ids AS _ids,( SELECT @ids := GROUP_CONCAT( N_ID ) FROM T_DEPARTMENT" +
" WHERE FIND_IN_SET( N_PARENT_ID, @ids ) ) AS cids," +
"@l := @l + 1 AS LEVEL FROM T_DEPARTMENT,( SELECT @ids :="+id+" , @l := 0 ) b WHERE @ids IS NOT NULL) ID," +
"T_DEPARTMENT DATA WHERE FIND_IN_SET( DATA.N_ID, ID._ids ) ";
1::=符号解析错误
2:是否支持原始sql语句传递,可以指定放行的sql

test case理解

你好 对于有一些test case 没有看明白。请问您有什么联系方式可以交流一下吗?

DAO在springboot中Autowired问题

使用
<dependency> <groupId>org.jfaster</groupId> <artifactId>mango-spring-boot-starter</artifactId> <version>0.4</version> </dependency>

有一句WARN日志

WARN [o.s.context.annotation.ConfigurationClassEnhancer] - @Bean method MangoAutoConfiguration.autoCreator is non-static and returns an object assignable to Spring's BeanFactoryPostProcessor interface. This will result in a failure to process annotations such as @Autowired, @Resource and @PostConstruct within the method's declaring @Configuration class. Add the 'static' modifier to this method to avoid these container lifecycle issues; see @Bean javadoc for complete details.

然后导致boot中定义的service类中@Autowired持久层DAO就无法识别到了

框架集成后针对部分引用会出现找不到的情况

最近在了解Mongo,从Github导入到IntellJ后发现有类找不到的情况,例如:
org.jfaster.mango.parser.AbstractExpression 找不到父类SimpleNode,同时也找不到Parse,基本上【org.jfaster.mango.parser】 包下的类都是报错的,这块的依赖库定义没有体现在pom.xml中,能否明确一下这块的引用吗? 谢谢了!

编译parser.jjt出现异常

我对这个源码比较感兴趣,于是下载下来打算研究一下。在跑测试的时候发现找不到Parser这个类,后来看了一些博客之后,觉得是要先编译那个parser.jjt文件,是这样吗?
然后,我在编译的时候,出现了一个异常,以下是异常信息:
flycash@flycash-pc:~/git/mango$ javacc src/main/jjtree/parser.jjt
Java Compiler Compiler Version 5.0 (Parser Generator)
(type "javacc" with no arguments for help)
Reading from file src/main/jjtree/parser.jjt . . .
Warning: Line 10, Column 5: Bad option name "TRACK_TOKENS". Option setting will be ignored.
Warning: Line 13, Column 5: Bad option name "MULTI". Option setting will be ignored.
Warning: Line 16, Column 5: Bad option name "VISITOR". Option setting will be ignored.
org.javacc.parser.ParseException: Encountered " "#" "# "" at line 101, column 22.
Was expecting one of:
"throws" ...
":" ...

Detected 1 errors and 3 warnings.
不知道是哪里出了问题。PS:我还是第一次接触javacc这种东西,若是有什么学习资料,万望不吝指点。

读操作从主库读取,usemaster注解没有起作用

jfaster的版本:jfaster.16.1
代码如下:
@Sql("select * from order")
@Usemaster
List getOrders(@ShardingBy("peopleId") OrderSearchForm orderSearchForm);

发现使用usemaster注解后,发现第一次查询,没有更新的字段,猜测还是从库查询,但等待两秒查询后,查询的数据有更新的新内容,从库同步主库数据。

请问下:usemaster的用法是否正确,1.6.1版本是否能正常使用usermaster?
谢谢!

同一SQL查询所有oracle数据库分表

之前循环将分库下标当做一个变量传进来查询发现会有ORA-00933这种错误出现,不过这种办法在mysql中就没有任何问题。新手求大神解惑,万分感谢。

关于if语句的使用

if判断null是#if(:1 != null) 还是#if(:1)
还有#if(:1!= null) {} 后面是可以使用花括号的吗,这块文档太少了

order by 传递动态参数问题

想使用如下形式实现类似mybatis中的动态传递参数解决一些问题。代码如下:
" #if(:1.order != null) ORDER BY :1.order #end "
" #if(:1.order == null) ORDER BY t1.n_id DESC #end"

参数1是动态的order值,目前发现不支持生成的SQL都是带 引号的值。如:ORDER BY 'ID DESC'.
mybatis提供了${}可以支持 如下 mybatis $解决order by 动态传参
是否有好的解决方式。

意见:1集成spring事务管理 and 2.sql文本文件

你好,十分感谢能开源出这么优秀且简洁的框架。在使用过程中,我有两个想法
1.集成spring 事务管理,这个其他同学也提到了,自己写aop的确不难。但是如果加到这个项目中,使用人员也不用去重复实现了。
2.就是把sql直接注解在dao的接口方法上,这个很直观,但是有个弊端就是sql比较长或者有sql拼接的话,写在java文件里不是很美观。我想可不可以参考一下mybatis的做法,把接口和sql分开。(当然也可以同时保留注解和sql文件,而注解的优先级高)。这个我也打算自己实现一下,到时候你们看看能不能合并呀:)
再次感谢你们~

sharding报错 不支持MYSQL 数据库

java.lang.UnsupportedOperationException: Cannot support database type 'MySQL'
at org.apache.shardingsphere.sql.parser.core.parser.SQLParserFactory.newInstance(SQLParserFactory.java:55)
at org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor.towPhaseParse(SQLParserExecutor.java:55)
at org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor.execute(SQLParserExecutor.java:47)
at org.apache.shardingsphere.sql.parser.SQLParserEngine.parse0(SQLParserEngine.java:79)
at org.apache.shardingsphere.sql.parser.SQLParserEngine.parse(SQLParserEngine.java:61)
at org.apache.shardingsphere.underlying.route.DataNodeRouter.createRouteContext(DataNodeRouter.java:97)
at org.apache.shardingsphere.underlying.route.DataNodeRouter.executeRoute(DataNodeRouter.java:89)
at org.apache.shardingsphere.underlying.route.DataNodeRouter.route(DataNodeRouter.java:76)
at org.apache.shardingsphere.underlying.pluggble.prepare.PreparedQueryPrepareEngine.route(PreparedQueryPrepareEngine.java:54)
at org.apache.shardingsphere.underlying.pluggble.prepare.BasePrepareEngine.executeRoute(BasePrepareEngine.java:96)
at org.apache.shardingsphere.underlying.pluggble.prepare.BasePrepareEngine.prepare(BasePrepareEngine.java:83)
at org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.prepare(ShardingPreparedStatement.java:183)
at org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.executeQuery(ShardingPreparedStatement.java:116)
at org.jfaster.mango.jdbc.JdbcTemplate.executeQuery(JdbcTemplate.java:150)
at org.jfaster.mango.jdbc.JdbcTemplate.queryForList(JdbcTemplate.java:57)
at org.jfaster.mango.operator.QueryOperator$1.visitForList(QueryOperator.java:106)
at org.jfaster.mango.operator.QueryOperator$QueryVisitor.visit(QueryOperator.java:193)
at org.jfaster.mango.operator.QueryOperator.executeFromDb(QueryOperator.java:102)
at org.jfaster.mango.operator.QueryOperator.execute(QueryOperator.java:93)
at org.jfaster.mango.operator.QueryOperator.execute(QueryOperator.java:72)
at org.jfaster.mango.operator.Mango$MangoInvocationHandler.handleInvocation(Mango.java:371)
at org.jfaster.mango.util.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:46)

SQL中有中文导致报TokenMgrError: Lexical error

在注解的SQL中有一个单引号引的中文,启动项目时(还未调用接口)报错
org.jfaster.mango.parser.TokenMgrError: Lexical error at line 1, column 35. Encountered: "\u4e2d" (20013), after : "'"
at org.jfaster.mango.parser.ParserTokenManager.getNextToken(ParserTokenManager.java:1443)
at org.jfaster.mango.parser.Parser.jj_ntk(Parser.java:1374)
at org.jfaster.mango.parser.Parser.parse(Parser.java:28)
at org.jfaster.mango.parser.SqlParser.parse(SqlParser.java:26)
at org.jfaster.mango.operator.OperatorFactory.getOperator(OperatorFactory.java:68)
at org.jfaster.mango.operator.Mango$MangoInvocationHandler$1.load(Mango.java:301)
at org.jfaster.mango.operator.Mango$MangoInvocationHandler$1.load(Mango.java:291)
at org.jfaster.mango.util.local.DoubleCheckCache.get(DoubleCheckCache.java:41)
at org.jfaster.mango.operator.Mango$MangoInvocationHandler.getOperator(Mango.java:335)
at org.jfaster.mango.operator.Mango.create(Mango.java:196)
at org.jfaster.mango.plugin.spring.AbstractMangoFactoryBean.getObject(AbstractMangoFactoryBean.java:40)

尝试将中文用Unicode编码,添加了反斜杠转义(‘\\’),后返回编码后的代码,怎么样才能返回中文

SQL参数化建议使用名字

给一个建议 @Sql("insert into fruit(name, num) values(:1, :2)") 能不能写成 @Sql("insert into fruit(name, num) values({name},{num})") 或 @Sql("insert into fruit(name, num) values($name,$num)")

问题:如何调用存储过程

mango 的开发者们,我这边想了解一下如何有调用存储过程,从注解的包中没有看到相关的类,同时使用@Sql("call producer()") 会报出异常,如下:
Caused by: org.jfaster.mango.exception.SqlParserException: Encountered " <TEXT> "call "" at line 1, column 1. Was expecting one of: "insert" ... "delete" ... "update" ... "select" ... "replace" ... "merge" ...

麻烦了!

batch insert问题

我用batch insert的时候,SQL文是一条条执行的,并没有执行jdbc的batch,是需要什么其他配置吗?
我使用了ShardingStrategy
@SQL(insertSql) public Integer insertBatch(@ShardingBy("peopleId") List<OrderEntity> orderEntityList);

`class OrderShardingStrategy implements ShardingStrategy<Integer, Integer> {

@Override
public String getDataSourceFactoryName(Integer uid) {
	if (uid == ServiceConstant.PEOPLE_ID_PT) {
		return "pt";
	} else {
		return "od" + uid % 3;
	}
}

@Override
public String getTargetTable(String table, Integer uid) {
	if (uid == ServiceConstant.PEOPLE_ID_PT) {
		return table + "_" + "platform";
	} else {
		return table + "_" + uid % 10;
	}
}

}`

请问如何设置Statement的QueryTimeout

在数据库执行需要很长时间时,想要提前终止,该如何设置?我想通过设置Statement的QueryTimeout来达到效果,但没有找到如何设置

多个分库分表数据连接查询支持吗?

如果使用分库分表设计了不止是一张表,比如每个datasource下设置了order_0到order_9这10张表,但是同时又设计了order_detail0到order_detail9这10张表,做关联查询时,支持order_0对应order_dtail_0吗

mango 可以强制使用jdbc的批量更新吗

需要注意的是,mango内部有两种批量更新的实现,如果批量更新在同一个数据源的同一张表上完成,mango会使用jdbc原生的批量更新方法,否则mango会在内部进行循环更新。

mango内部循环更新太慢了,还有其他解决办法吗

mango 批量插入问题

`public static void main(String[] args) {
long s = System.currentTimeMillis();
String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/mango_example";
String username = "root"; // 这里请使用您自己的用户名
String password = "123456"; // 这里请使用您自己的密码
DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
FruitDao dao = mango.create(FruitDao.class);
List list = new ArrayList<>();
for (int i = 0; i < 2000; i++) {
list.add(new Fruit("xxx" + i, i));
}
dao.add(list);

	System.out.println(":" + (System.currentTimeMillis() - s)); //:1m29s
}`

@DB interface FruitDao { @SQL("insert into fruit(name, num) values(:name, :num)") public int add(List<Fruit> list); }

根据官网的例子,批量插入需要1分29秒, 批量插入2000条。如果加上事物就是2秒,这是为啥?

Transaction tx = TransactionFactory.newTransaction(); dao.add(list); tx.commit();

关于主从读写分离的疑问

很多场景下需要指定少数方法读从库,这样的话一个 @Usemaster 注解不能满足需求。是否应该考虑通过增加一个 @UseSlave 注解,或者 @Usemaster 增加一个属性的方式来指定该方法走从库读,从而增加灵活性?现在查询默认全部走从库,是否不利于扩展?

如何设置批量提交

我有这样一个场景,就是需要针对日志文件解析后,插入到对应数据库。但是如果按照demo的方式来做,每获取一条日志进行一次插入操作,这样时间上非常耗时,数据量有100W。

几个有关使用cache的疑问

不错的项目,看文档中有几个疑问,请教下

//包省略

@DB
@Cache(prefix = "user", expire = Hour.class, num = 2)
public interface SingleKeySingeValueDao {

    @CacheIgnored
    @SQL("insert into user(uid, name) values(:1, :2)")
    public int insert(int uid, String name);

    @SQL("delete from user where uid=:1")
    public int delete(@CacheBy int uid);

    @SQL("update user set name=:2 where uid=:1")
    public int update(@CacheBy int uid, String name);

    @SQL("select uid, name from user where uid=:1")
    public User getUser(@CacheBy int uid);

}

1)上面delete,update,getUser时触发SimpleCacheHandler的delete,update,get是由内部sql判定吗,比如sql的select的操作触发SimpleCacheHandler的get,sql的delete对应SimpleCacheHandler的delete,sql的update对应SimpleCacheHandler的set?
2) SimpleCacheHandler的set的参数value是有Dao的方法返回值吗? 比如

@SQL("select uid, name from user where uid=:1")
    public User getUser(@CacheBy int uid); //触发SimpleCacheHandler的set操作, 参数value其实就是User ?

3) @Cache(prefix = "user") prefix指定了被缓存的key前缀, 如果我想表一条记录中2个字段分别想缓存到不同的key该如何配置注解?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.