前段时间发现了一个比较投机的方式来使用mybatis,这种方式可以让人觉得我确实是使用的mybatis啊的感觉,实际上又不是。我们都知道,Mybatis相比于直接用sql语句来查询写起来有点复杂,因为mybatis首先得有xml文件,然后映射到mapper,还得有Dto,最后在供service层调用,这样一套写下来,需要头脑比较清晰才不会出bug,否则不是这里写错了就是那里写错了。在这里,我给一个方法,使得大家似乎用了mybatis,但是实际上写的是纯sql语句的方法,这个方法本来是用来处理那种很长的sql语句的,但是前几天我在做一个简单项目的时候为了省事儿,就直接那样用了,实践证明,那种方法在头脑比较昏的时候也是可以使用的,因为难度较低,哈哈。废话说多了,直接上代码

// SqlMapper.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">
<mapper namespace="com.chaojilaji.secondhandshop.mapper.SqlMapper">
<select id="sql" parameterType="String" resultType="HashMap">
${sql}
</select>
<select id="sqlOne" parameterType="String" resultType="HashMap">
${sql}
</select>
</mapper>

对应的mapper

@Mapper
@Component(value = "sqlMapper")
public interface SqlMapper {
List<Map<String,Object>> sql(@Param("sql") String sql);
Map<String,Object> sqlOne(@Param("sql") String sql);
}

这个时候只需要注入到服务中

@AutoWired
SqlMapper sqlmapper;

public void demo(Integer uid){
String sql = String,format("select * from userinfo where uid = %d", uid);
List<Map<String,Object>> ans = sqlmapper.sql(sql);
}

就可以了。这种方式适合用于sql比较长的场景,用xml不好来描述。如果非要用在简单的sql中,就有点多此一举了。

这种写法容易引起sql注入,可以通过参数内绑定参数的方式避免sql注入,详情见我的另一篇博客: