mappering.xml
<mapper
namespace
="com.work.dao.IQueryDinnerDao"
>
<resultMap
id
="QueryOne"
type
="com.work.bean.Dinner"
>
<result
column
="DI_NAME"
jdbcType
=“VARCHAR” javaType=“String"
property
="di_name"
/>
<result
column
="DI_NUMBER"
jdbcType
="VARCHAR” javaType=“String"
property
="di_number"
/>
<result
column
="DI_DINNERID"
jdbcType
=“INTEGER” javaType=“int”
property
="di_dinnerId"
/>
<result
column
="DI_DINMANE"
jdbcType
=“VARCHAR” javaType=“String"
property
="di_dinName"
/>
</resultMap>
<!-- 查询一份订单-->
<select
id
="QueryDinnerOne"
parameterType
="Integer"
resultMap
="QueryOne"
>
SELECT
di_dinnerId ,di_name,di_number,di_dinName
FROM MyDinners
WHERE di_dinnerId=#{di_dinnerId}
</select>
</mapper>
其中的namespace指定dao层相应的接口,
其中的resultMap(解决了数据库字段名和javaBean字段名字不同的问题,若
JavaBean字段名和
数据库
字段名相同,则resultMap内容可以省略
)———>因此
JavaBean字段名保持和
数据库
字段名是最好的选择
的id属性:resultMap标签的唯一标识
的type属性:java的实体类----指明那个bean类,全路径
的id元素:用来
设置主键字段与领域模型属性的映射关系
的result元素:用于设置普通字段与领域模型属性的映射关系
resultMap中, column是列名,property是列映射到实体对象的属性,jdbcType是列在数据库中的数据类型,格式统一都是大写,和MySql中的数据类型多数保持一致,少数有差异。
这种方式可以解决列名不匹配
对于向mybatis的mappering.xml文件里传入参数问题:
mybatis的传入参数可以是各种java
的
基本数据类型:包含int,String,Date等。基本数据类型作为传参,只能传入一个。通过#{参数名} 即可获取传入的值
,
复杂数据类型:
包含java
实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值,
但是如果想传入一个collection(一般就是list)怎么办呢?
如:
public List<StudentEntity> getStudentListByClassIds_foreach_list(List<String> classIdList);
通过传入很多的classId来查询表的信息。
<select id="getStudentListByClassIds_foreach_list" resultMap="resultMap_studentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
ST.STUDENT_SEX,
ST.STUDENT_BIRTHDAY,
ST.STUDENT_PHOTO,
ST.CLASS_ID,
ST.PLACE_ID
FROM STUDENT_TBL ST
WHERE ST.CLASS_ID
IN
<foreach
collection="list"
item="classIdList" open="(" separator="," close=")">
#{classIdList}
</foreach>
</select>
另外MyBatis还提供了一个使用注解来传入多个参数的方式。这种方式需要在接口的参数上添加@Param注解
public List<Teacher> selectTeacher(@Param(value="id") String id,@Param(value="sex") String sex);
<select id="selectTeacher" resultType="com.myapp.domain.Teacher">
select * from Teacher where c_id=#{id} and sex=#{sex}
</select>
其实在mybatis中,无论你指定还是不指定返回类型,mybatis都会默认的先将查询回的值放入一个hashMap中(如果返回的值不止一条就是一个包含hashMap的list)。这其中的区别在于,如果你指定了返回类型,mybatis将会根据返回类型的实体类来从hashMap中获取值并set到这个实体类中。如果不指定就默认返回一个HashMap<String,Object>(List<HashMap<String,Object>>)
parameterType和parameterMap:
parameterMap现在不建议使用,parameterType用来指定传入参数的类型
动态SQL
不用二级缓存
resultMap
insert
update
delete
select
传参的$,#区别
paramterType
动态sql
mybatis技术内幕