Mybatis执行自定义sql

SSM框架中,实体层-Mapper(Dao)层-severice层-controller层,有特定的业务当我们不能一路程序走下来事,比如直接查询数据库(返回的对象并不能用实体类接收)等其他自定义的sql语句,不可能再去写一套原生的jdbc操作数据库,所以怎样在原先系统的框架衍生出灵活的数据库操作,该怎么写在mapper里面反射出来,这个自定义sql并没有和任何实体字段完全一样,所以无法用实体接收当然也可以用Map定义返回类型,但是今天我发现一个更加灵活的。直接上代码:

TestMapper.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.mapper.TestMapper">

    <insert id="insert" parameterType="java.lang.String">
        ${value}
    </insert>

    <select id="selectList" parameterType="java.lang.String" resultType="java.util.HashMap" useCache="false">
        ${value}
    </select>

    <select id="selectOne" parameterType="java.lang.String" resultType="java.lang.String" useCache="false">
        ${value}
    </select>

    <delete id="delete" parameterType="java.lang.String">
        ${value}
    </delete>

    <update id="update" parameterType="java.lang.String">
        ${value}
    </update>


</mapper>

TestMapper.java(接口)

 public interface TestMapper{
    Integer insert(String statement);

    Integer delete(String statement);

    Integer update(String statement);

    List<Map<String, Object>> selectList(String statement);

    String selectOne(String statement);
}

controller层调用

@RestController
@RequestMapping("testController")
@Api(value = "测试", tags = {"测试API"})
public class TestController  {
	@Autowired
    private TestMapper testMapper;
    String insertSql="INSERT INTO rb_virtual ( id, name, sex) SELECT sd.id,sd.name2,sd.sex2 FROM rb_virtual_2 sd";
    //自定义新增sql
    int insertCount=testMapper.insert(insertSql);
    //自定义删除sql
    int deleteCount=testMapper.delete("TRUNCATE TABLE rb_test;");
    ...
}

此时调用这个controller就行了。

说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

发布了142 篇原创文章 · 获赞 499 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/zeal9s/article/details/95043015