Ibatis映射文件SqlMap(未完)
2015-05-10 16:44
162 查看
1.最基本配置
需要和配置文件中的useStatementNameSpaces="true"配合使用(详见配置说明)
(2)<typeAlias alias="" type="类的全名">
实体类的别名,作用就是为了方便,不然每次都要写类的全名
(3)<resultMap id="" class="类的全名">
实际上就是定义一个到java pojo的映射,需要在这里定义之后,才能在sql的返回值类型处使用。
(4)<insert id="" parameterClass="">
1)不使用自增主键
直接写insert语句即可,参数通过#属性名#获得
2)使用自增主键(mysql)
注意:使用的数据库不同,获得自增主键的写法也不同
(5)<update id="" parameterClass="">
用法类似insert
(6)<delete id="" paramterClass="">
用法同insert
(7)<select id="" parameterClass="" resultMap="">
使用queryForList查询多个数据,queryForObject查询单个数据
注意:
1)使用resultMap和resultClass都可以起到定义映射java pojo的作用,只是resultMap可以自定义映射关系,并且能够指定类型;resultClass就是按照属性名称和表中的列名严格对应的
所以懒得写的时候用resultClass,只要保证名称确定对应即可
2)parameterMap和parameterClass和resultMap和resultClass的关系一样
3)parameterClass可以为原生数据类型,map、pojo
1>如果为原生数据类型,则可以在sql中直接使用value代表参数值
2>如果为map,使用key
3>如果为pojo,则用法和其他情况一样
2.常用功能
(1)模糊查询
注意:取参数值的时候必须使用$,不能用#
(2)分页查询
注意
3.动态sql
(1)<dynamic>
说明: dynamic会根据实际情况添加或删除prepend,如:where、and等,所以不需要考虑太多,直接写上即可
(2)<isNotNull>
只判断参数是否是null,如果不是null,则添加相应sql
(3)<isNotEmpty>
不但判断参数是否是null,还判断String.valueOf(参数)是否是""
eg:
执行的测试代码为:
使用isNotEmpty
产生的sql为:
由于上述原因,pojo中属性最好使用包装类(Long、Integer等),这样就能区分null和""了,如果直接使用原生数据类型,则可能出错
实际上2、3属于这种情况
一元条件元素的属性:
(4)<isEqual prepend="" property="" compareValue="">
判断property的值是否和compareValue的值相同
(5)<isLessThan prepend="" property="" compareProperty="">
判断property的值是否小于compareProperty的值,如果小于,则添加相应sql
实际上4、5属于以下这种情况
二元条件元素的属性:
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="Person" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <alias> <typeAlias alias="Person" type="piggyWinFormTemplet.Model.Person, piggyWinForm" /> </alias> <resultMaps> <resultMap id="SelectResult" class="Person"> <result property="Id" column="PER_ID" /> <result property="FirstName" column="PER_FIRST_NAME" /> <result property="LastName" column="PER_LAST_NAME" /> <result property="BirthDate" column="PER_BIRTH_DATE" /> <result property="WeightInKilograms" column="PER_WEIGHT_KG" /> <result property="HeightInMeters" column="PER_HEIGHT_M" /> </resultMap> </resultMaps> <statements> <select id="SelectByPrimaryKey" parameterClass="int" resultMap="SelectResult"> select PER_ID, PER_FIRST_NAME, PER_LAST_NAME, PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M from PERSON WHERE PER_ID = #value# </select> <insert id="Insert" parameterClass="Person" resultClass="int"> insert into Person ( PER_ID, PER_FIRST_NAME, PER_LAST_NAME, PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M ) values ( #Id:int#, #FirstName:varchar#, #LastName:varchar#, #BirthDate:smalldatetime#, #WeightInKilograms:decimal#, #HeightInMeters:decimal# ) </insert> <update id="Update" parameterClass="Person" resultClass="int"> update Person set PER_FIRST_NAME=#FirstName:varchar# ,PER_LAST_NAME=#LastName:varchar# ,PER_BIRTH_DATE=#BirthDate:smalldatetime# ,PER_WEIGHT_KG=#WeightInKilograms:decimal# ,PER_HEIGHT_M=#HeightInMeters:decimal# where PER_ID=#Id:int# </update> <delete id="Delete" parameterClass="int" resultClass="int"> delete from PERSON where PER_ID = #value# </delete> </statements> </sqlMap>(1)<sqlMap namespace="">
需要和配置文件中的useStatementNameSpaces="true"配合使用(详见配置说明)
(2)<typeAlias alias="" type="类的全名">
实体类的别名,作用就是为了方便,不然每次都要写类的全名
(3)<resultMap id="" class="类的全名">
实际上就是定义一个到java pojo的映射,需要在这里定义之后,才能在sql的返回值类型处使用。
(4)<insert id="" parameterClass="">
1)不使用自增主键
直接写insert语句即可,参数通过#属性名#获得
2)使用自增主键(mysql)
<selectKey resultClass="java.lang.Integer" keyProperty="id"> select last_insert_id() as id from person limit 1 </selectKey>需要添加这句,从而返回这次自增主键的值,然后再使用insert即可
注意:使用的数据库不同,获得自增主键的写法也不同
(5)<update id="" parameterClass="">
用法类似insert
(6)<delete id="" paramterClass="">
用法同insert
(7)<select id="" parameterClass="" resultMap="">
使用queryForList查询多个数据,queryForObject查询单个数据
注意:
1)使用resultMap和resultClass都可以起到定义映射java pojo的作用,只是resultMap可以自定义映射关系,并且能够指定类型;resultClass就是按照属性名称和表中的列名严格对应的
所以懒得写的时候用resultClass,只要保证名称确定对应即可
2)parameterMap和parameterClass和resultMap和resultClass的关系一样
3)parameterClass可以为原生数据类型,map、pojo
1>如果为原生数据类型,则可以在sql中直接使用value代表参数值
2>如果为map,使用key
Map<String,String> map = new HashMap<String,String>(); map.put("id", String.valueOf(4)); map.put("name", "wq"); List list = sqlClient.queryForList("selByIdAndName", map);sqlMap中
<select id="selByIdAndName" parameterClass="java.util.HashMap" resultMap="PersonResult"> select * from person where id=#id# and name=#name# </select>
3>如果为pojo,则用法和其他情况一样
2.常用功能
(1)模糊查询
注意:取参数值的时候必须使用$,不能用#
<select id="selByName" parameterClass="java.lang.String" resultMap="PersonResult"> select * from person where name like '%$value$%' </select>测试代码
List list = sqlClient.queryForList("selByName", "o");
(2)分页查询
注意
3.动态sql
(1)<dynamic>
说明: dynamic会根据实际情况添加或删除prepend,如:where、and等,所以不需要考虑太多,直接写上即可
(2)<isNotNull>
只判断参数是否是null,如果不是null,则添加相应sql
(3)<isNotEmpty>
不但判断参数是否是null,还判断String.valueOf(参数)是否是""
eg:
执行的测试代码为:
Person p = new Person(); p.setName(""); List<Person> list = (List<Person>)sqlClient.queryForList("person.selectByIN", p);使用isNotNull
<select id="selectByIN" parameterClass="Person" resultMap="PersonResult"> select * from person <dynamic prepend="where"> <isNotNull prepend="and" property="name"> name like '%$name$%' </isNotNull> </dynamic> </select>产生的sql为:
select * from person where name like '%%'因为name为"",不是null
使用isNotEmpty
<select id="selectByIN" parameterClass="Person" resultMap="PersonResult"> select * from person <dynamic prepend="where"> <isNotEmpty prepend="and" property="name"> name like '%$name$%' </isNotEmpty> </dynamic> </select>
产生的sql为:
select * from person
由于上述原因,pojo中属性最好使用包装类(Long、Integer等),这样就能区分null和""了,如果直接使用原生数据类型,则可能出错
实际上2、3属于这种情况
一元条件元素的属性:
prepend : 可被覆盖的 SQL 语句组成部分,添加在语句的前面(可选) property : 被比较的属性(必选) <isPropertyAvailable> 检查是否存在该属性(存在 parameter bean 的属性) 。 <isNotPropertyAvailable> 检查是否不存在该属性(不存在 parameter bean 的属性) 。 <isNull> 检查属性是否为 null。 <isNotNull> 检查属性是否不为 null。 <isEmpty> 检查 Collection.size()的值,属性的 String 或 String.valueOf()值, 是否为 null或空( “”或size() < 1) 。 <isNotEmpty> 检查 Collection.size()的值,属性的 String 或 String.valueOf()值, 是否不为 null 或不为空( “”或 size() > 0) 。
(4)<isEqual prepend="" property="" compareValue="">
判断property的值是否和compareValue的值相同
<select id="selectByIN" parameterClass="Person" resultMap="PersonResult"> select * from person <dynamic prepend="where"> <isEqual prepend="and" property="id" compareValue="2"> name like '%$name$%' </isEqual> </dynamic> </select>表示如果传递进来的Person对象的id如果==2,那么就查询name为指定值得记录
(5)<isLessThan prepend="" property="" compareProperty="">
判断property的值是否小于compareProperty的值,如果小于,则添加相应sql
<select id="selectByIN" parameterClass="Person" resultMap="PersonResult"> select * from person <dynamic prepend="where"> <isLessThan prepend="and" property="id" compareProperty="age"> name like '%$name$%' </isLessThan> </dynamic> </select>如果传递过来的Person中的id<age,那么就添加相应sql
实际上4、5属于以下这种情况
二元条件元素的属性:
prepend : 可被覆盖的 SQL 语句组成部分,添加在语句的前面(可选) property - : 被比较的属性(必选) compareProperty : 另一个用于和前者比较的属性(必选或选择 compareValue) compareValue : 用于比较的值(必选或选择 compareProperty) <isEqual> 比较属性值和静态值或另一个属性值是否相等。 <isNotEqual> 比较属性值和静态值或另一个属性值是否不相等。 <isGreaterThan> 比较属性值是否大于静态值或另一个属性值。 <isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值。 <isLessThan> 比较属性值是否小于静态值或另一个属性值。 <isLessEqual> 比较属性值是否小于等于静态值或另一个属性值。
相关文章推荐
- ibatis的sqlmap映射文件之动态sql语句
- ibatis映射文件中 sqlMap 节点 namespace 属性含义
- ibatis映射文件中 sqlMap 节点 namespace 属性含义
- ibatis学习三------入门之sqlMap的OR映射配置
- iBATIS的配置文件sqlmapconfig.xml详细说明。
- ibatis学习笔记(二)>>>>>>>sqlMapConfig.xml文件详解
- ibatis - sqlMapConfig.xml配置文件详解
- IBatis ORM框架的总配置文件SqlMapConfig.xml 详细信息
- Ibatis SqlMap文件(转)
- ibatis sqlmap文件中文注释注意事项
- 关于IBatisNet找不到映射文件错误的问题(The error occurred while loading SqlMap).
- ibatis学习之sqlMapConfig.xml文件配置详解
- ibatis学习笔记(一)>>>>>>>sqlMapConfig.xml文件详解
- 实现ibatis的动态加载sqlmap配置文件
- Ibatis—sqlMapConfig.xml配置文件详解
- ibatis学习笔记(一)>>>>>>>sqlMapConfig.xml文件详解
- ibatis之——sqlMapConfig.xml配置文件详解
- ibatis 配置文件 SqlMapConfig&SqlMap 示例
- pojo+xDoclet生成ibatis映射文件
- iBatis 之 SQL Map XML映射文件