mybatis初步学习

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技术内幕

猜你喜欢

转载自blog.csdn.net/darrensty/article/details/78411456