mybatis example 用法中怎么传查重的参数example.setdistinct?

mybatis example 用法中怎么传查重的参数example.setdistinct?,第1张

select id="selectByExample" resultMap="BaseResultMap">

select

<if test="distinct">

distinct

</if>

<include refid="Base_Column_List" />

from client

<if test="example!= null">

<include refid="Example_Where_Clause" />

执行过程中,显示在使用example的时候,里面的criteria为null。具体为:

org.mybatis.spring.MyBatisSystemException: SqlSession operationnested exception is org.apache.ibatis.exceptions.PersistenceException:

### Error querying database.  Cause: org.apache.ibatis.mapping.SqlMapperException: The expression 'oredCriteria' evaluated to a null value.

### The error may exist in com/alex/server/mapper/ClientMapper.xml

### The error may involve com.alex.server.mapper.ClientMapper.selectPageByExample

### The error occurred while executing a query

### Cause: org.apache.ibatis.mapping.SqlMapperException: The expression 'oredCriteria' evaluated to a null value.

我们这个直接看源码看如何由example映射到sql语句

Stock.java

只有5个属性。

StockMapper.java:

我看只看countByExample接口,看名字就知道是返回给定example参数的结果个数。

再看

StockMapper.xml该方法实现:

很简单给定参数类型StockExample 返回Long类型 select count(*) from stock 返回满足条件的stock表中数据数量

再看<include refid="Example_Where_Clause" />

foreach表示循环,分隔符是or(或者)重点在于数据集oredCriteria,我们去给定参数StockExample中寻找oredCriteria

是一个List刚好和上面的集合对应了,看看单个Criteria是什么

再看GeneratedCriteria

我们发现Criteria里面居然还有一个list,我们翻上去看刚好与上面一个foreach里面还有一个foreach对应,那接下来研究Criterion

这就是该类的声明,里面有这些值,这时候应该结合着之前xml第二层foreach属性看了,知道这些值有啥用

一看我们根据when知道有四类情况,noValue,singleValue,betweenValue,listValue,对应着查询中四种情况

1.只是单纯是否非空

2.value=?多少查询

3.两者之间查询

4.在list中查询。

所以我们构建的查询参数就是criterion,看一下上面四种咋构建吧

以下均是lGeneratedCriterial类中方法,addCriterion是把生成的Criterion加到Ctriteria中

1.是否非空:

2.值查询

public Criteria andIdEqualTo(Integer value) {

addCriterion("id =", value, "id")

return (Criteria) this

}

3.两者之间

public Criteria andSaleNotBetween(Integer value1, Integer value2) {

addCriterion("sale not between", value1, value2, "sale")

return (Criteria) this

}

4.list

public Criteria andVersionNotIn(List<Integer>values) {

addCriterion("version not in", values, "version")

return (Criteria) this

}

完结,相信通过上面的源码剖析,大家都知道如何构建查询条件了把。

总结

StockExample.java 构造

三个参数

orderByClause:返回结果升降排序,字段+空格+acs/dcs(升序/降序)例子count acs

setOrderByClause方法注入

distinct:true/false 返回结果去不去重复,setDistinct注入

oredCriteria:就是查询参数,之前狗讲了啥意思,构造方法

构造Criteria

收工。

MyBatis中,可以使用Generator自动生成代码,包括DAO层、 MODEL层 、MAPPING SQL映射文件。

第一步:下载MyBatis的Generator工具

htt p:/ /mybati s.gith ub.i o/generator/

第二步:配置自动生成代码所需的XML配置文件,例如(generator.xml)

将这个文件保存至你下载的mybatis-generator-core-1.3.2文件夹下

第三步:进入XML配置文件(generator.xml)所在的的目录并执行命令:

Dos代码

java -jar E:\mybatis-generator-core-1.3.2\lib\mybatis-generator-core-1.3.2.j ar -configfile generator.xml -overwrite

mybatis generator eclipse插件的安装

打开eclipse,点击Help>Software Update

选择 "Available Software" 标签,点击 "Add Site" 按钮

输入以下信息:

Location:htt p:/ /mybatis.googleco de.c om/svn/sub-projects/gen erator/trunk/eclipse/UpdateSite/

点击ok,自动进入"mybatis generator Feature"

点击“install”按钮进行安装。。。。mybatis generator 插件安装完成

配置Mybatis Generator不要生成Example类

Mybatis Generator默认设置会生成一大堆罗哩罗嗦的Example类,主要是用各种不同的条件来 *** 作数据库,大部分是用不到的,用到的时候手工修改mapper和接口文件就行了。

<</code>table

schema="general"

tableName="tb_table_name"

domainObjectName="EntityName"

enableCountByExample="false"

enableUpdateByExample="false"

enableDeleteByExample="false"

enableSelectByExample="false"

selectByExampleQueryId="false"

>

name="useActualColumnNames"

value="true"/>

</</code>table>

这样生成的mapper和dao接口就清爽多了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11706504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存