mybatis映射文件需要注意的事项

mybatis映射文件需要注意的事项

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--    映射文件的namespace要和mapper接口的全类名(具体到接口名)保持一致-->
<!--           映射文件的sql语句的id要和mapper接口的方法名一致-->
<mapper namespace="com.wwr.mapper.BookMapper">
<!--    解决字段名和属性名不一致的方法
    1.给属性名起别名:
    eg:select bookid,bookname book_name,type,price  from book
    2.全局配置作用于所有文件
    mybatis-config.xml
    <settings>
    将下划线自动映射成驼峰  emp_aaa=empAaa
    <setting name="mapUnderscoreToCamelCase" value="true">
    <settings>
    3.resultMap自定义映射(数据表的字段一般会采用下划线,而属性则会采用驼峰形式,此时两边不能保持字段
    属性一致时可以使用resultMap来自定义映射。)
    <resultMap id="bookid" type="Book">
    //他这个id属性的值是唯一的,因为你之后select语句需要使用他设置的映射关系
    //type表示表对应的实体
    <id property="" column=""></id>//id标签设置主键的映射关系
    <result property="bookname" column="book_name"><\result>
    <result ....></result>//result标签用来设置普通字段和属性的映射关系
    .......
    </resultMap>
    <select id="" resultMap="bookid"></select>
-->

    <select id="selectBook" resultType="Book">
        select * from book
    </select>
<!--    int deleteMore(@Param("bookids") String bookids);-->
    <delete id="deleteMore">
        delete from book where bookid in (${bookids})
    </delete>
<!--    void insertBookemm(Book book);-->
    <insert id="insertBookemm" useGeneratedKeys="true" keyProperty="bookid">
        insert into book values(null,#{bookname},#{type},#{price})
    </insert>


<!--mybatis中获取参数的方式有两种:
        1.参数是单个字面量:username,bookname....
            ${}字符串拼接,需要注意单引号问题一般是'${aaa}'.说明这种方式是不会自动添加单引号的
            #{}占位符赋值,不会出现sql注入的问题,这种方式会自动添加单引号
            #{}和${}里面与名字无关,可以和之前的参数名不同
            比如#{aaa},${aaa}。建议使用传过来的参数名。
        2.mapper接口的方法参数有多个
            简单的使用select * from book where bookname = #{bookname} and bookid = #{bookid}
            是错误的,汇报bingExcption ,原因是mybatis在检测到有多个参数传进来时,会自动把参数放到map集合中。
            所以正确的写法:
            select * from book where bookname = #{arg0} and bookid = #{arg1}
            或者也可以使用param1,param2.也可以两者混用。arg0,param2。他们都是键我们访问键来访问参数值。
        3.可以手动将多个参数放在集合中进行存储。
            select * from book where bookname = #{bookname} and bookid = #{bookid}
            前提是需要自己设置map集合。
            怎么设置集合?
            在test中new map对象set元素。
        4.mapper接口方法参数是实体类型
            利用属性取值。
            属性不止成员变量,主要看get,set方法。
            insert into book value(null,#{属性1},#{属性2},#[属性3},#{属性4})
        5.使用@Param注解命名参数他的原理也是map集合
            interface中
            User checkLoginByParam(@Param("自定义键1") String bookname,@Param("自定义键2") String bookid)
            mapper文件中访问:
             select * from book where bookname = #{自定义键1} and bookid = #{自定义键2}


-->
</mapper>

解决字段名和属性名不一致的方法

1.给属性名起别名:
eg:select bookid,bookname book_name,type,price  from book
2.全局配置作用于所有文件
mybatis-config.xml
<settings>
将下划线自动映射成驼峰  emp_aaa=empAaa
<setting name="mapUnderscoreToCamelCase" value="true">
<settings>
3.resultMap自定义映射(数据表的字段一般会采用下划线,而属性则会采用驼峰形式,此时两边不能保持字段
属性一致时可以使用resultMap来自定义映射。)
<resultMap id="bookid" type="Book">
//他这个id属性的值是唯一的,因为你之后select语句需要使用他设置的映射关系
//type表示表对应的实体
<id property="" column=""></id>//id标签设置主键的映射关系
<result property="bookname" column="book_name"><\result>
<result ....></result>//result标签用来设置普通字段和属性的映射关系
.......
</resultMap>
<select id="" resultMap="bookid"></select>

mybatis中获取参数的方式有两种:$()和#()

参数使用注意:

    1.参数是单个字面量:username,bookname....
        ${}字符串拼接,需要注意单引号问题一般是'${aaa}'.说明这种方式是不会自动添加单引号的
        #{}占位符赋值,不会出现sql注入的问题,这种方式会自动添加单引号
        #{}和${}里面与名字无关,可以和之前的参数名不同
        比如#{aaa},${aaa}。建议使用传过来的参数名。
    2.mapper接口的方法参数有多个
        简单的使用select * from book where bookname = #{bookname} and bookid = #{bookid}
        是错误的,汇报bingExcption ,原因是mybatis在检测到有多个参数传进来时,会自动把参数放到map集合中。
        所以正确的写法:
        select * from book where bookname = #{arg0} and bookid = #{arg1}
        或者也可以使用param1,param2.也可以两者混用。arg0,param2。他们都是键我们访问键来访问参数值。
    3.可以手动将多个参数放在集合中进行存储。
        select * from book where bookname = #{bookname} and bookid = #{bookid}
        前提是需要自己设置map集合。
        怎么设置集合?
        在test中new map对象set元素。
    4.mapper接口方法参数是实体类型
        利用属性取值。
        属性不止成员变量,主要看get,set方法。
        insert into book value(null,#{属性1},#{属性2},#[属性3},#{属性4})
    5.使用@Param注解命名参数他的原理也是map集合
        interface中
        User checkLoginByParam(@Param("自定义键1") String bookname,@Param("自定义键2") String bookid)
        mapper文件中访问:
         select * from book where bookname = #{自定义键1} and bookid = #{自定义键2}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值