<!--获取自增主键的值:
mysql支持自增主键,自增主键的获取,mybatis也是利用statement.getGenreatedKeys
()
userGenerateKeys
="true";使用自增主键获取主键值策略
keyProperty:指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性 --
>
<insert id
="addEmp" useGeneratedKeys
="true" keyProperty
="id">
insert into tbl_employe values
(
多个参数的形式
多个参数会被封装成一个map,用key的索引param1,param2来替代
<select id
="getEmploybyprams" resultType
="com.atguigu.mybatis.hello.Employe">
select id,last_name,gender,email from tbl_employe where id
=
</select
>
命名参数:明确指定封装参数的map的key
public Employe getEmploybyprams
(@Param
("id")Integer id,@Param
("lastName")String lastName
);
pojo
如果多个参数正好是我们的业务逻辑模型,我们就可以直接传入pojo: #{属性名}:取出传入的pojo属性值
map:
如果多个参数不是业务模型中的数据,没有对应的pojo,为了方便我们也可以传入map #key取出map中对应的值
@Test
public void test3
() throws Exception
{
SqlSession opSession
=SqlSessionFactoryji
();
try
{
EmployeMapper employeMapper
=opSession.getMapper
(EmployeMapper.class
);
Map
<String,Object
> map
=new HashMap
<String, Object
>();
map.put
("id", 1
);
map.put
("lastName",
"tom");
Employe employe
=employeMapper.getEmploybyprams
(map
);
System.out.println
("wwwwwwwwwwww");
System.out.println
(employe
);
} finally
{
opSession.close
();
}
}
public Employe getEmploybyprams
(Map
<String, Object
> map
);
TO:
如果多个参数不是业务逻辑中的数据但是经常要用,推荐来编写一个TO(transfer Object)数据传输对象
Page
{
int index
;
int size
;
}
思考=====================================
1.public Employe getEmp(@Param(“id”) Integer id,String lastName);
取值:id==>#{param1} lastName===>#{param2}
2.public Employe getEmp(Integer id,Employe emp);
取值 :id==>#{param1} lastName===>{emp.lastName}
##特别注意:如果是Colllection(List、Set)类型或是数组。也会特殊处理,也是把传入的list或者数组封装在map中。key:Collection(collection),如果是List还可以使用这个key(list)数组(array)
3.public Employe getEmpByid(List ids);
取值:取出第一个id值:#{list[0]}
================================================================= DEBUG 07-01 19:34:34,807 ==> Preparing: select id,last_name,gender,email from tbl_employe where id=1 and last_name=? (BaseJdbcLogger.java:145) DEBUG 07-01 19:34:34,841 > Parameters: tom(String) (BaseJdbcLogger.java:145) DEBUG 07-01 19:34:34,868 < Total: 1 (BaseJdbcLogger.java:145)
#{}:是以预编译的形式,将参数设置到sql语句中,PreparedStatement:防止sql注入
${}:取出的值直接拼装在sql语句中,会有安全问题;大多数情况下,我们选参数的值都应该去使用#{},
原生jdbc不支持占位符的地方我们就可以使用${}进行取值
比如分表,按照年份分表拆分:
select * from ${year}_salary where xxx;
select * from tbl_employe order by ${f_name} ${order}
#
{}:更丰富的用法;
规则参数的一些规则
javaType、jdbcType、
mode(存储过程
)、numericScale、
resultMap、typeHandler、jdbcTypeName、
expression(未来准备支持的功能
)
jdbcType通常需要在某种特定的条件下被设置,
在我们数据为null的时候,有些数据可能不识别mybatis对null默认设置,比如Oracle(报错)
;
JdbcType OTHER
:因为mybatis对所有的null都映射的是原生jdbc的OTHER类型,oracle不能正确处理
;
由于全局配置中:jdbcTypeForNull
=OTHER
;oracle不支持
1.#
{email
,jdbcType
=OTHER
};
2.jdbcTypeForNull
=OTHER在全局配置文件中配置
<setting name
="jdbcTypeForNull" value
="NULL"></setting
>