mybatis中${value}的使用

为什么要使用${value}?        

        上篇文章介绍了mybatis的select标签,我们知道在mybatis中,查询语句可以写在select标签内部即可完成相应的查询工作,但是由于业务的复杂性,有时候难免要自己去拼接sql并执行,如果你使用了spring的话,你可能会想到使用jdbctemplate来执行自己的sql,但是这个时候有个问题,什么问题呢?理论上来说,JdbcTemplate应该这样使用:

@Repository
public class BackupDaoImpl implements BackupDao {
	@Resource
	private JdbcTemplate jdbcTemplate;
}	

但是mybatis里面并没有所谓的dao的实现,只有dao接口,dao实现其实是mybatis与spring的整合jar包(如下)帮我们实现的:

<dependency>
		  <groupId>org.mybatis</groupId>
		  <artifactId>mybatis-spring</artifactId>
		  <version>1.3.0</version>
		</dependency>

现在连dao的实现都没有,我的JdbcTemplate该写到哪里去呢?似乎,mybatis并不支持自定义sql,也和spring兼容的不好。其实,不是这样的,你完全可以在业务层组装自己的sql,然后通过我们本次说的${value}注解把整个sql传递给mybatis就可以了。

使用${value}的简单例子

  1.在业务层组装自己的sql

@Service 
public class UserInfoServiceImpl implements UserInfoService {
	@Resource
	private UserInfoDao userInfoDao;
	
	private Logger logger=Logger.getLogger(UserInfoServiceImpl.class);

	public List<UserInfo> listAllBySql() {
		String sqlString="select * from user_info where age>30";
		logger.info("listAllBySql");
		return userInfoDao.listAllBySql(sqlString);
	}
}

    2.dao层的接口定义这个方法:

public interface UserInfoDao {
	List<UserInfo> listAllBySql(String sql);
}

    3.配置文件中使用${value}接口

   <resultMap type="com.lzzjava.beans.UserInfo" id="listAllResultMap">
       <id property="userId" column="user_id"  />
       <result property="userName" column="user_name"  />
       <result property="addr" column="addr"  />
       <result property="age" column="age"  />
 </resultMap>
  <select id="listAllBySql"  resultMap="listAllResultMap">
        ${value}
    </select>

注意:有时候你的sql语句中可能含有><等可能引起解析错误的sql符号,我们可以使用cdata节点来避免引起解析错误的问题

    <select id="getAdvancedSearchResult"  resultType="java.util.Map">
        <![CDATA[    ${value} ]]>  
   </select>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值