mybatis的基本使用(插入/返回值/传参)


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>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM