mybaits中dao层的使用方式1:用自动生成工具生成
主要的笔记:
利用工具自动生成的dao接口(也就是xxxMapper.java文件).利用代理的方式,自动的去调用mapper.xml中对应的实现.
(要注意mapper开发的四个要点,不然会代理不了)
也可以考虑自己写一个通用的接口.然后各个具体pojo的接口,只要符合mapper开发的四个规范即可.毕竟自动工具生成的,有很多可能自己用不上.
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
return studentMapper.findStudentById(studId);
1.在generator文件中
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.itrus.portal.db" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
2.把生成的xxxMapper.xml和xxxMapper.java放入同一个java包中
3.在spring配置文件中,扫描xxxmapper.java文件所在位置
xmlns:p="http://www.springframework.org/schema/p"
<!-- 自动扫描mapper接口-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage="com.itrus.portal.db"
p:sqlSessionFactoryBeanName="sqlSessionFactory" />
4.在service或者daoImpl中,用如下的方式,调用sql
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
return studentMapper.findStudentById(studId);
转载的内容:
mybatis里头给sqlSession指定执行哪条sql的时候,有两种方式,一种是写mapper的xml的namespace+statementId,如下:
public Student findStudentById(Integer studId) {
logger.debug(“Select Student By ID :{}”, studId);
SqlSession sqlSession = MyBatisSqlSessionFactory.getSqlSession();
try {
return sqlSession.selectOne(“com.mybatis3.StudentMapper.findStudentById”, studId);
} finally {
sqlSession.close();
}
}
另外一种方法是指定mapper的接口:
public Student findStudentById(Integer studId) {
logger.debug(“Select Student By ID :{}”, studId);
SqlSession sqlSession = MyBatisSqlSessionFactory.getSqlSession();
try {
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
return studentMapper.findStudentById(studId);
} finally {
sqlSession.close();
}
}
一般的话,比较推荐第二种方法,因为手工写namespace和statementId极大增加了犯错误的概率,而且也降低了开发的效率。
Mapper动态代理方法:程序员只需要写dao接口(Mapper),而不需要写dao实现类,由mybatis根据dao接口和映射文件中statement的定义生成接口实现代理对象。可以调用代理对象方法。
Mybatis官方建议:将dao接口叫做mapper。
目标:通过一些规则让mybatis根据dao接口和映射文件中statement的定义生成接口实现代理对象
mybatis将以下代码自动在代理对象实现:
User user = sqlSession.selectOne("test.findUserById", id);
如何让mapper接口找到mapper.xml中statement的id。
1.1 第一步:开发mapper.xml映射文件
为了让mapper.xml和mapper.Java对应起来,将mapper.xml中的namespace设置为mapper.java的全限定名。
1.2 第二步:开发mapper.java接口
Mybatis生成代理对象时,根据statement的标签决定调用 SqlSession的方法(select、insert、update..)
根据上边接口方法返回值 类型来决定 是调用 selectOne还是selectList,如果返回的是单个对象,动态代理调用selectOne(),如果返回的是集合对象,动态代理调用selectList()。
1.3 Mapper开发规则
1、 在mapper.xml中将namespace设置为mapper.java的全限定名
2、 将mapper.java接口的方法名和mapper.xml中statement的id保持一致。
3、 将mapper.java接口的方法输入参数类型和mapper.xml中statement的parameterType保持一致
4、 将mapper.java接口的方法输出 结果类型和mapper.xml中statement的resultType保持一致
1.4 小结
在企业中使用原始dao开发仍然的是很多的,主要是由于前期使用ibatis。
建议使用mybatis动态代理方法,好处不用写实现类,开发快捷。使用动态代码方法需要遵循上边四点规范
上一篇: Go流程控制
下一篇: python 将 字符转换成中文