mysql 动态查询_Mysql动态SQL

mysql动态SQL

解决

Error querying database.  Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.zwt.mapper.AddressesMapper.queryTrim'.  It's likely that neither a Result Type nor a Result Map was specified.

的问题

在sql语句加上返回的类型 :

resultType="com.zwt.pojo.Addresses"

缓存

两次查询仅有一次调用SQL语句,第二次从缓存中命中。

SqlSession sqlSession =MybatisUtil.getSession();

AddressesMapper mapper= sqlSession.getMapper(AddressesMapper.class);

List addresses =mapper.listAll();

System.out.println(addresses);

List addresses2 =mapper.listAll();

System.out.println(addresses2);

sqlSession.commit();

sqlSession.close();

DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 7

缓存失效方式

查询后进行增删改会使缓存失效

SqlSession sqlSession =MybatisUtil.getSession();

AddressesMapper mapper= sqlSession.getMapper(AddressesMapper.class);

List addresses =mapper.listAll();//缓存失效一:查询后增删改会使缓存失效

Addresses a = newAddresses();

a.setId(2);

a.setCountry("2");

a.setCity("3");

a.setState("4");

a.setZip("5");

mapper.update(a);

List addresses2 =mapper.listAll();

sqlSession.commit();

sqlSession.close();

DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 7DEBUG [main] - ==> Preparing: update addresses SET country = ?, city = ?, state = ?, zip = ? WHERE id = ? DEBUG [main] - ==> Parameters: 2(String), 3(String), 4(String), 5(String), 2(Long)DEBUG [main] - <== Updates: 1DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters:

强制清空缓存

List addresses =mapper.listAll();//强制清空会话所有缓存sqlSession.clearCache();

List addresses2 =mapper.listAll();

sqlSession.commit();

sqlSession.close();

DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 7DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 7

动态SQL

动态SQL-if

select * from addresses

and COUNTRY = #{country}

and city = #{city}

public voidm3(){

SqlSession sqlSession=MybatisUtil.getSession();

AddressesMapper mapper= sqlSession.getMapper(AddressesMapper.class);//List addresses = mapper.queryByCountryCity(null, "Perry");//List addresses = mapper.queryByCountryCity("China", null);

List addresses = mapper.queryByCountryCity("Taylor", "");

System.out.println(addresses);

sqlSession.close();

当country不为空并且city为空时,通过country查询;

当city不为空时则通过city查询

动态SQL-模糊查询

第一种

在应用程序层面加入%:

Listaddresses = mapper.queryLike("%Luo%");

select * from addresses where city like #{city}

第二种

通过mysql的函数 concat 完成:

select * from addresses where city like concat('%', #{city}, '%')

第二种

通过band标签对变量重新绑定,在用新的变量查询

select * from addresses where city like #{_city}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值