MybatisSQL语句动态查询,传入有值,数据库有值,数据查不出来。

图1
图片描述

图2
图片描述

代码如下
private RoleService roleService;

private AdminUserRoleService adminUserRoleService;

@Before
public void befor() {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/spring/spring-content.xml");
    this.roleService = applicationContext.getBean(RoleService.class);
    this.adminUserRoleService = applicationContext.getBean(AdminUserRoleService.class);
}
@Test  
public void test() {  
        List<AdminUserRole> adminUserRoleList =              
            adminUserRoleService.queryByField("role_id",""+19);
        System.out.println(adminUserRoleList.size());      
}  

映射文件

   <select id="queryByField" resultMap="adminUserRole" >
    SELECT *
    FROM wady_admin_user_role
    WHERE #{0} = #{1}
    </select>
    
    

求解疑惑,为什么SQL能在MySql里面查询,java里面就查不出来
——补充——

<select id="queryByField" resultMap="adminUserRole" >
    SELECT 
         <include refid="Base_Column_List" />
    FROM wady_admin_user_role
    WHERE #{0} =19
</select>

图片描述


<select id="queryByField" resultMap="adminUserRole" >
    SELECT 
         <include refid="Base_Column_List" />
    FROM wady_admin_user_role
    WHERE role_id =#{1}
</select>

图片描述

问题应该是, Mybatis的SQL语句查询的列为什么不能通过传入参数代替

阅读 12.3k
3 个回答
<select id="queryByField" resultMap="adminUserRole" parameterType="String">
    SELECT 
         <include refid="Base_Column_List" />
    FROM wady_admin_user_role
    WHERE #{fieldName} = #{fieldValue}
</select>

找到Dao层 该方法通过注解可以实现

List<T> queryByField((@Param("fieldName")String fieldName,(@Param("fieldValue")String
fieldValue);
还有更简单方便快捷的,欢迎回复,修改答案

用 '#{}' 是预编译了, 字段名可以用 '${}' 提前拼接好

用字段拼接的方式,把#号改成
用#是走了预编译,你传过去的对于数据库来说都是参数值还不是字段,你这个需要拼接sql,所以用$,底层就是jdbc的statement

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题