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}