欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybaits中dao层的使用方式1:用自动生成工具生成

程序员文章站 2022-06-24 20:01:29
...

主要的笔记:
利用工具自动生成的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动态代理方法,好处不用写实现类,开发快捷。使用动态代码方法需要遵循上边四点规范