preparedStatement: 支持通配符赋值,可以预编译sql语句
statement: 必须使用字符串拼接的方式操作sql语句,不能使用通配符,因为statement对象调用executeQuery(String sql)直接执行sql语句. 因此,在使用#{}传输实体类对象时,有字符串的地方不用加单引号’’,而使用${}拼接字符串时需要手动加上单引号’’.
在传输实体类对象使用#{}时:
< insert> insert into user values (null,#{name},#{age},#{gender}) < /insert>sql执行时转化为以下:
sql:insert into user values (null,?,?,?);在传输实体类对象使用${}时:有字符串的地方使用单引号哦
< insert> insert into user values (null,'${name}',${age},'${gender}') < /insert>执行时转化为以下:
sql:insert into user values (null,'张三',12,'男');在传输单个String类型或基本数据类型时,因为#{}是通配符进行赋值,所以#{}里面的内容无论写什么,mybatis都可以进行赋值,但是建议与属性名保持一致
<select id="getUserByUid"> select * from user where uid=#{uid} </select>而${}在传输单个String类型或者基本数据类型时, $ {}里面只能填写value或者_parameter
<select id="getUserByUid"> select * from user where uid=${value} </select>传递不同参数类型,#{}和${} 的不同取值方式:
#{}和 $ {}都可以通过属性名直接获取参数值,但是要注意${}的单引号问题
#{} 可以通过属性名直接获取参数值 ${}里面的值只能是value或者_parameter
#{}:可以通过#{0},#{1};#{param1},#{param2}来获取参数值 ${}:只能通过 ${param1}, ${param2}来获取参数值
