http://bbs.csdn.net/topics/390773239
今天我看别人用springmvc和mybatis结合的代码 以前我用SSH框架的
发现了个问题
public interface MmMapper {
public List<HashMap<String, Object>> mmQueryByPage(@Param("mm")HashMap<String, Object> params);
}
@Service
public class MmServiceImpl implements IMmService{
@Autowired
private MmMapper mmMapper;
.....................省略
}
看这个代码的意思就是直接把用mybatis写的dao接口直接注入到service层了
我记得以前写SSH用hibernate要先写个接口 然后写这个接口与数据库打交道的具体实现类的啊
难道mybatis不要具体写实现类吗
比如
public User findUserById(String id) {
return (User) this.getSqlSession().selectOne("cn.test.mybatis.domain.User.selectUserById", id);
}
难道mybatis智能到只要写接口 框架就做完了具体实现类吗 mybatis是怎么做到的呢
MapperScannerConfigurer这种方式不需要写dao,只要保证接口和配置文件一致就可以了,会自动扫描的。
好吧刚理解错,应该说的是这个吧
1
2
3
4
|
public
interface
CategoryMapper {
@Select
(
"SELECT * FROM category WHERE name=#{name}"
)
Category findById(String name);
}
|
1
2
3
|
<
bean
class
=
"org.mybatis.spring.mapper.MapperScannerConfigurer"
>
<
property
name
=
"basePackage"
value
=
"xx.xx.mapper"
/>
</
bean
>
|
好吧刚理解错,应该说的是这个吧哦 难怪啊 我说为啥dao层的接口不要具体的实现类呢
spring配置
1234public
interface
CategoryMapper {
@Select
(
"SELECT * FROM category WHERE name=#{name}"
)
Category findById(String name);
}
然后MyBatis会根据这些动态生成实现类的
123<
bean
class
=
"org.mybatis.spring.mapper.MapperScannerConfigurer"
>
<
property
name
=
"basePackage"
value
=
"xx.xx.mapper"
/>
</
bean
>
MapperScannerConfigurer的作用是:springMVC在加载xml生成上下文环境的时候,会自动扫描制定位置的Mapper接口,然后自动生成代理类,实现接口内容。这样在调用接口的时候,实际上是通过代理类去调用mybatis的xml中的sql语句。