`

mybatis相关

 
阅读更多

使用第三方框架写项目。遇到问题汇总:

数据库表设计:

1、假如“活动表“”有一个关联用户id,那么自动生成代码,可以有一个User对象,xml中只需要改一下sql即可,如下(更新同理):

select userid as 'user.id';
或select a.userid as 'user.id', b.username as 'user.name' form a,User b;
insert a ... values(...#{user.id})

 2、mysql不区分大小写,所以字段名长,比如updatetime可以写成update_time,那么自动生成代码为updateTime。

 3、导出excel时,字段is_mem是否会员,需要打印出是,还是否,可以改成如下:

	@ExcelField(title = "是否会员", align = 2, sort = 20)
	public String getIsMem2Excel() {
		return isMem == 1 ? "是" : "否";
	}
        //正常get方法
	public Integer getIsMem() {
		return isMem;
	}

 3,重新写web后,对于关键表查询更新等一直不知所措,其实挺简单,比如活动表和报名表,报名表里原本只用一个活动id做关联,但页面一般要一起显示活动名,参与人等。

解决:返回报名的对象删除活动id,用活动对象代替,sql查询时联表返回即可。插入时同理,页面传一个activity.id即可,不用传活动名等。

4,多条件查询,mybatis用if即可。多条件更新,可用when/otherwise。

5,日期字段,用@DatetimeFormat,放在对象的日期字段上,或方法字段前都可以。

6,restful风格,一般要返回json格式,所以返回值加一个@ResponseBody。更规范一些,则返回数据都放到一个Result对象中,多一个返回码,比如200等。

7,分页,可自己写sql加limit等,或用第三方插件,直接在代码实现。分页一般执行两个sql,查数据和count计算总数据条数。分页插件比如mybatis-paginator,用法很简单,mapper方法加多一个对象PageBounds即可。

8、$与#的区别:#号代表sql会生成占位符where id=?,而$是纯粹字符串替换。

9、mybatis的javaType和ofType:

 

 

报错:

1、org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_item_0' in ...

类似这种,一般是集合循环取值的时候用了#{item},如下,改成$即可。

            and ID in
            <foreach collection="ids" index="index" item="item" open="("
                     separator="," close=")">
                ${item}
            </foreach>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics