主题:[奇怪BUG]mysql5.7数据库,当表名为order,进行条件查询时,表名被加空格符,因此报表不

xuwentao 2020年04月06日 110

详情:(beetlsql版本是2.12.25.RELEASE,数据库是mysql5.7)

1.如果使用默认的orderdao.allCount(),可以正常执行

select count(1) from `order` where 1=1 

此时,sql语句中`order`,表名无空格。

2.如果是使用createQuery()或者createLambdaQuery()进行传参查询,则报错,表名不存在。

select count(1) FROM ` order` WHERE `username` = ? AND `userid` = ?

此时,sql语句中` order`,表名多出啦空格。

故报错。

3.如果是使用createQuery()或者createLambdaQuery()进行无参查询,可以正常执行

SELECT COUNT(1) FROM `order`

此时,sql语句中`order`,表名无空格。

欲哭无泪,我的头发,我的颈椎!跪求修复,谢谢!

闲大赋 2020年04月08日

重现不了啊,咋办,能否吧user表和java代码拿出来,或者创建一个轻量级 git 工程,发给我了


还有,能否调试一下呢看看为什么输出空格?或者旧点版本试试

  • xuwentao :谢谢大大的关注,对不起,当时我表达错啦。原来是PageQuery问题(2020年04月09日)
  • xuwentao :大大,我已经把建表语句,JavaBean,DAO和测试用例都回复在下面了,麻烦您帮忙看看。 问题定位于:PageQuery(2020年04月09日)
xuwentao 2020年04月09日
import java.math.*;
import java.util.Date;
import java.sql.Timestamp;
import org.beetl.sql.core.annotatoin.Table;

import java.io.Serializable;
/* 
* 
* gen by beetlsql 2020-04-03
*/
@Table(name="order")
public class Order  implements Serializable {
	
	// alias
	public static final String ALIAS_id = "id";
	public static final String ALIAS_finish = "finish";
	public static final String ALIAS_num = "num";
	public static final String ALIAS_address = "address";
	public static final String ALIAS_gid = "gid";
	public static final String ALIAS_price = "price";
	public static final String ALIAS_realname = "realname";
	public static final String ALIAS_tel = "tel";
	public static final String ALIAS_trackingno = "trackingno";
	public static final String ALIAS_update_time = "update_time";
	public static final String ALIAS_userid = "userid";
	public static final String ALIAS_username = "username";
	
	/*
	订单编号
	*/
	private Integer id ;
	/*
	1. 完成 2.未完成
	*/
	private Integer finish ;
	/*
	兑换数量
	*/
	private Integer num ;
	/*
	住址
	*/
	private String address ;
	/*
	礼品名称
	*/
	private String gid ;
	/*
	订单金额
	*/
	private String price ;
	/*
	真实姓名
	*/
	private String realname ;
	/*
	电话
	*/
	private String tel ;
	/*
	快递单号
	*/
	private String trackingno ;
	/*
	订单时间
	*/
	private Long updateTime ;
	/*
	用户ID
	*/
	private String userid ;
	/*
	兑换用户
	*/
	private String username ;
	
	public Order() {
	}
	
	/**
	* 订单编号
	*@return 
	*/
	public Integer getId(){
		return  id;
	}
	/**
	* 订单编号
	*@param  id
	*/
	public void setId(Integer id ){
		this.id = id;
	}
	
	/**
	* 1. 完成 2.未完成
	*@return 
	*/
	public Integer getFinish(){
		return  finish;
	}
	/**
	* 1. 完成 2.未完成
	*@param  finish
	*/
	public void setFinish(Integer finish ){
		this.finish = finish;
	}
	
	/**
	* 兑换数量
	*@return 
	*/
	public Integer getNum(){
		return  num;
	}
	/**
	* 兑换数量
	*@param  num
	*/
	public void setNum(Integer num ){
		this.num = num;
	}
	
	/**
	* 住址
	*@return 
	*/
	public String getAddress(){
		return  address;
	}
	/**
	* 住址
	*@param  address
	*/
	public void setAddress(String address ){
		this.address = address;
	}
	
	/**
	* 礼品名称
	*@return 
	*/
	public String getGid(){
		return  gid;
	}
	/**
	* 礼品名称
	*@param  gid
	*/
	public void setGid(String gid ){
		this.gid = gid;
	}
	
	/**
	* 订单金额
	*@return 
	*/
	public String getPrice(){
		return  price;
	}
	/**
	* 订单金额
	*@param  price
	*/
	public void setPrice(String price ){
		this.price = price;
	}
	
	/**
	* 真实姓名
	*@return 
	*/
	public String getRealname(){
		return  realname;
	}
	/**
	* 真实姓名
	*@param  realname
	*/
	public void setRealname(String realname ){
		this.realname = realname;
	}
	
	/**
	* 电话
	*@return 
	*/
	public String getTel(){
		return  tel;
	}
	/**
	* 电话
	*@param  tel
	*/
	public void setTel(String tel ){
		this.tel = tel;
	}
	
	/**
	* 快递单号
	*@return 
	*/
	public String getTrackingno(){
		return  trackingno;
	}
	/**
	* 快递单号
	*@param  trackingno
	*/
	public void setTrackingno(String trackingno ){
		this.trackingno = trackingno;
	}
	
	/**
	* 订单时间
	*@return 
	*/
	public Long getUpdateTime(){
		return  updateTime;
	}
	/**
	* 订单时间
	*@param  updateTime
	*/
	public void setUpdateTime(Long updateTime ){
		this.updateTime = updateTime;
	}
	
	/**
	* 用户ID
	*@return 
	*/
	public String getUserid(){
		return  userid;
	}
	/**
	* 用户ID
	*@param  userid
	*/
	public void setUserid(String userid ){
		this.userid = userid;
	}
	
	/**
	* 兑换用户
	*@return 
	*/
	public String getUsername(){
		return  username;
	}
	/**
	* 兑换用户
	*@param  username
	*/
	public void setUsername(String username ){
		this.username = username;
	}
	

}
xuwentao 2020年04月09日
import org.beetl.sql.core.annotatoin.*;
import org.beetl.sql.core.db.KeyHolder;
import org.beetl.sql.core.engine.PageQuery;
import org.beetl.sql.core.mapper.BaseMapper;
import com.chinalife.sz.model.*;

/*
* 
* gen by beetlsql mapper 2020-04-03
*/
public interface OrderDao extends BaseMapper<Order> {
	
}
xuwentao 2020年04月09日
CREATE TABLE `order` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '订单编号',
  `userid` varchar(255) NOT NULL COMMENT '用户ID',
  `username` varchar(50) NOT NULL DEFAULT '暂无' COMMENT '兑换用户',
  `realname` varchar(50) NOT NULL DEFAULT '暂无' COMMENT '真实姓名',
  `address` varchar(100) NOT NULL DEFAULT '暂无' COMMENT '住址',
  `tel` varchar(255) NOT NULL DEFAULT '暂无' COMMENT '电话',
  `gid` varchar(100) NOT NULL DEFAULT '暂无' COMMENT '礼品名称',
  `price` varchar(255) NOT NULL DEFAULT '0' COMMENT '订单金额',
  `num` int(10) NOT NULL DEFAULT '1' COMMENT '兑换数量',
  `trackingno` varchar(255) NOT NULL DEFAULT '暂无' COMMENT '快递单号',
  `update_time` varchar(255) NOT NULL DEFAULT '暂无' COMMENT '订单时间',
  `finish` int(2) NOT NULL DEFAULT '0' COMMENT '1. 完成 2.未完成',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
xuwentao 2020年04月09日
import org.beetl.sql.core.engine.PageQuery;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.chinalife.sz.model.Order;

@SpringBootTest
public class OrderDaoTests {

	@Autowired
	private  OrderDao orderDao;
	
	@Test
	void test() {
		long c=orderDao.allCount();
		System.out.println(c);
		orderDao.createLambdaQuery().count();
		PageQuery<Order> pageQuery = orderDao.createQuery().andEq(Order.ALIAS_username, "xuwentao")
				.andEq(Order.ALIAS_userid, 27)
				.orderBy("id desc").page(1, 15);
		orderDao.createQuery().andEq(Order.ALIAS_username, "xuwentao")
		.andEq(Order.ALIAS_userid, 27).count();
	}
	
}
闲大赋 2020年04月09日

确实重现了,我看看原因

闲大赋 2020年04月09日

貌似知道了,因为是叫order,所以分页语句解析错了,认为是order by那个

闲大赋 2020年04月09日

修复了,你用最新版本吧 2.12.26.RELEASE

  • xuwentao :谢谢大大!我现在https://mvnrepository.com/这个还没看到最新版的发布。我明天到公司再引用更新(2020年04月09日)