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就行了。
说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~