用mybatis实现模糊查询

@Select("select * from user_information where user_alias like '%#{name}%')")

由于模糊查询需要添加单独的   '    ' 导致占位符被当做字符串而没有被替换,会造成如下异常:

 
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: 
Could not set parameters for mapping: ParameterMapping{property='name', mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. 
Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. 
Cause: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).


常用解决方法是:

数据库字符拼接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的示例来演示如何使用 MyBatis 实现模糊查询,并在测试类里进行测试。请注意,以下示例仅供参考。 首先,您需要在 MyBatis 的配置文件中定义一个 SQL 映射语句,用于执行模糊查询。例如,您可以在 `mapper.xml` 文件中添加以下内容: ```xml <!-- 定义模糊查询的 SQL 映射语句 --> <select id="findUsersByName" resultType="User"> SELECT * FROM users WHERE name LIKE CONCAT('%',#{name},'%') </select> ``` 在这个映射语句中,我们使用了 `LIKE` 操作符来进行模糊匹配,`#{name}` 表示需要传入的参数值。注意,在这个例子中,我们使用了 `CONCAT` 函数将 `%` 符号与参数值拼接在一起,以构造模糊匹配的字符串。 接下来,您需要定义一个接口类,用于调用这个 SQL 映射语句。例如,在 `UserMapper` 接口中添加以下内容: ```java public interface UserMapper { // 定义调用 SQL 映射语句的方法 List<User> findUsersByName(String name); } ``` 在这个接口类中,我们定义了一个 `findUsersByName` 方法,用于调用之前在 `mapper.xml` 文件中定义的 SQL 映射语句。注意,`#{name}` 的值将通过这个方法的参数进行传递。 最后,在测试类中,您可以通过 `SqlSessionFactory` 创建一个 `SqlSession` 实例,并通过这个实例调用 `UserMapper` 接口中的方法来执行模糊查询。例如: ```java public class MyBatisTest { public static void main(String[] args) { // 创建 SqlSessionFactory 实例 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建 SqlSession 实例 SqlSession sqlSession = sqlSessionFactory.openSession(); try { // 获取 UserMapper 接口的实例 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 调用方法执行模糊查询 List<User> users = userMapper.findUsersByName("Tom"); // 输出查询结果 for (User user : users) { System.out.println(user); } } finally { sqlSession.close(); } } } ``` 在这个测试类中,我们首先创建了一个 `SqlSessionFactory` 实例,并通过这个实例创建了一个 `SqlSession` 实例。然后,我们通过 `SqlSession` 实例获取了 `UserMapper` 接口的实例,并调用了 `findUsersByName` 方法来执行模糊查询。最后,我们输出查询结果。 请注意,以上示例仅供参考,具体实现可能会因为您的业务需求而有所变化。同时,为了让这个示例能够正常运行,您需要自行创建一个 `User` 类,并在配置文件中定义好数据库连接信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值