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接口就清爽多了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)