<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><propertiesresource="conf/mysql.properties"></properties><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><propertyname="driver"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${username}"/><propertyname="password"value="${password}"/></dataSource></environment></environments><mappers><mapperresource="org/mybatis/example/BlogMapper.xml"/></mappers></configuration>
mapper.xml
<?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"><mappernamespace="org.mybatis.example.BlogMapper"><selectid="selectBlog"resultType="Blog">
select * from Blog where id = #{id}
</select></mapper>
一些语句示例
<insert id="insertAuthor" useGeneratedKeys="true"
keyProperty="id">insertinto Author (username, password, email, bio)values<foreach item="item" collection="list" separator=",">(#{item.username}, #{item.password}, #{item.email}, #{item.bio})</foreach></insert># public void deleteById(int id,int name);<delete id="deleteById" parameterType="java.lang.Integer">deletefrom`T_aaaa`where id=#{0} and name=#{1}</delete># public List<abc> queryABCD(@Param("id") int id,@Param("from") int from,@Param("size") int size);<select id="queryABCD" resultType="abc">select*from T_aaaa s where id =#{id}limit#{from},#{size}</select># 使用 where 元素,条件语句中判断相等使用 ‘==’ 双等于号,!使用单个 ‘=’ 等于号为赋值操作!<select id="findActiveBlogLike"
resultType="Blog">SELECT*FROM BLOG
<where><if test="state != null">
state =#{state}</if><if test="title != null">AND title like#{title}</if><if test="author != null and author.name != null">AND author_name like#{author.name}</if></where></select>
2. mybatis使用中 ‘#{ }’ 与 ‘${ }’ 的区别
字符串替换
默认情况下,使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数占位符并安全地设置参数(就像使用 ? 一样)。
这样做更安全,更迅速,通常也是首选做法,
不过有时你就是想直接在 SQL 语句中插入一个不转义的字符串。
比如,像 ORDERBY,你可以这样来使用:
ORDERBY ${columnName}
这里 MyBatis 不会修改或转义字符串。
当 SQL 语句中的元数据(如表名或列名)是动态生成的时候,字符串替换将会非常有用。 举个例子,如果你想通过任何一列从表中 select 数据时,不需要像下面这样写:
@Select("select * from user where id = #{id}")User findById(@Param("id") long id);@Select("select * from user where name = #{name}")User findByName(@Param("name") String name);@Select("select * from user where email = #{email}")User findByEmail(@Param("email") String email);// and more "findByXxx" method
可以只写这样一个方法:
@Select("select * from user where ${column} = #{value}")User findByColumn(@Param("column") String column,@Param("value") String value);
其中 ${column} 会被直接替换,而 #{value} 会被使用 ? 预处理。 因此你就可以像下面这样来达到上述功能:User userOfId1 = userMapper.findByColumn("id",1L);User userOfNameKid = userMapper.findByColumn("name","kid");User userOfEmail = userMapper.findByColumn("email","noone@nowhere.com");
这个想法也同样适用于用来替换表名的情况。
提示 用这种方式接受用户的输入,并将其用于语句中的参数是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。