1、常用属性
插入的常用属性:
id 同一个命名空间只能有一个唯一的id
parameterType 用来设置该SQL的参数类型, 可以当它不存在,因为mybatis会根据接口方法的参数能够自动读取参数的类型
statementType 设置当前的statement: STATEMENT 代表jdbc的statement 不支持参数解析,不会设置 PREPARED 代表jdbc的PreparedStatement 支持参数解析, 默认的 CALLABLE 代表jdbc的CallableStatement 执行存储过程
useGeneratedKeys 获取插入后的自动增长的主键(mysql 和 SQL Server )
keyProperty 将自动增长的主键赋值到哪个属性中
要获取自动增长的注解(数据库支持自动增长的功能): useGeneratedKeys="true" keyProperty="id"
keyColumn 因为有可能存在组合主键的情况,指定获取其中哪一个字段
selectKey的使用:
如果数据库不支持自动增长列可以使用下面方法:selectKey 可以在增删改之前或之后运行order BEFORE|AFTER 设置在增删改之前或之后运行keyProperty 将当前查询结果放到哪个pojo属性中resultType 返回的数据类型
<insert id="insertEmp"> <selectKey order="BEFORE" keyProperty="id" resultType="int"> SELECT MAX(id)+1 FROM emp </selectKey> INSERT INTO `emp` (`id`,`user_name`) VALUES (#{id},#{username}); </insert>
增删改的返回值:
增删改的返回值 除了可以声明int 还可以声明 boolean(如果大于1就会返回true) boolean deleteEmp(Integer id);
#和$符号区别:
1.#{} ==> jdbc String sql=" SELECT id,user_name FROM EMP WHERE id=?" 1.会经过JDBC当中PreparedStatement的预编译,会根据不同的数据类型来编译成对应数据库所对应的数据。 2.能够有效的防止SQL注入。 推荐使用!! 特殊用法: 自带很多内置参数的属性:通常不会使用。了解 javaType、jdbcType、mode、numericScale、resultMap、typeHandler. 比如 需要改变默认的NULL===>OTHER:#{id,javaType=NULL} 想保留小数点后两位:#{id,numericScale=2} 2.${} ==> jdbc String sql=" SELECT id,user_name FROM EMP WHERE id="+id 1.不会进行预编译,会直接将输入进来的数据拼接在SQL中。 2.存在SQL注入的风险。不推荐使用。 特殊用法: 1.调试情况下可以临时使用。 2.实现一些特殊功能:前提一定要保证数据的安全性。 比如:动态表、动态列. 动态SQL.
参数的传递:
1.单个参数:SelectEmp(Integer id); mybatis 不会做任何特殊要求 获取方式: #:{输入任何字符获取参数} 2.多个参数:Emp SelectEmp(Integer id,String username); 设置参数的别名:@Param(""):SelectEmp(@Param("id") Integer id,@Param("username") String username); 当使用了@Param: id=====> #{id} username=====> #{username} 3. javaBean的参数: 单个参数:Emp SelectEmp(Emp emp); 获取方式:可以直接使用属性名 emp.id=====>#{id} emp.username=====>#{username} 多个参数:Emp SelectEmp(Integer num,Emp emp); 使用@Param 4.集合或者数组参数: Emp SelectEmp(List<String> usernames); 如果是list,MyBatis会自动封装为map: 有@Param("usernames")要获得:usernames.get(0) =====> #{usernames[0]} 如果是数组,MyBatis会自动封装为map: 有@Param("usernames")要获得:usernames.get(0) =====> #{usernames[0]}
返回结果接收:
返回类型设置: 如果返回一行数据, 就可以使用pojo接收,或者map 如果返回多行数据,就可以使用List<pojo>,List<map> ,resultType指定List中泛型的类型就可以
声明resultMap自定义结果集 resultType 和 resultMap 只能使用一个:
id 唯一标识, 需要和<select 上的resultMap 进行对应
type 需要映射的pojo对象, 可以设置别名
autoMapping 自动映射,(默认=true) 只要字段名和属性名遵循映射规则就可以自动映射,但是不建议,哪怕属性名和字段名一一对应上了也要显示的配置映射
extends 如果多个resultMap有重复映射,可以声明父resultMap,将公共的映射提取出来, 可以减少子resultMap的映射冗余 <resultMap id="emp_map" type="emp" autoMapping="false" extends="common_map"> <result column="create_date" property="cjsj"></result> </resultMap> <resultMap id="common_map" type="emp" autoMapping="false" > <!-- <id> 主键必须使用 对底层存储有性能作用 column 需要映射的数据库字段名 property 需要映射的pojo属性名 --> <id column="id" property="id"></id> <result column="user_name" property="username"></result> </resultMap>