在web开发的工作中,传统的DAO开发方式可以实现所需功能,但是采用这种方式在实现类中会出现大量的重复代码。
相交而言,mvc是比较常用的开发模式,这种开发模式通常将代码分成三层(控制层、业务逻辑层、数据库访问层),无论是较早的SSH、SSM、还是spring boot框架,都提倡面向这种面向接口的编程,这样可以降低层与层之间的耦合。这已经成为了一种范式,大家都去遵守,写着写着就有点像八股文。在利用面向对象的语言进行大型系统的设计需要考虑各个对象之间的交互的问题,接口本质是一种规范和约束,反映了系统设计者对系统的抽象理解。当设计和实现分离的时候,面向接口编程是一种解决问题的很好方式。
6.1 Mybatis反向工程生成的接口
Mybatis反向工程生成的XXXmapper接口通常具有以下功能的方法,正是这些方法,让我们可以非常方便的使用Spring配合Mybits 进行程序开发。
1、查询方法:
一般来说只有两个查询方法,第二个查询方法只会在特定条件下出现。
方法selectByExample(TbItemDescExample example)
返回值:List<TbItemDesc>
作用:通过特定限制条件查询信息,example用于生成一个Criteria对象来设置查询条件
方法selectByPrimaryKey(Long itemId)
返回值:TbItemDesc
作用:通过主键查询
方法selectByExampleWithBLOBs(TbItemDescExample example)
返回值:List<TbItemDesc>
作用:根据特定限制条件查询,返回值包含类型为text的列(默认查询并不会返回该列的信息)。example用于生成一个Criteria对象来设置查询条件,具体使用方法和方法selectByExample是一样的,唯一的不同就是返回值是所有列。
2、插入方法:
插入很简单,只有两个方法,方法传入的参数都是POJO,返回值都是int类型的受影响的行数。不同之处在于insert会插入所有的信息,如果传入的对象某一属性为空,则插入空,如果数据库中设置了默认值,默认值就失效了。而insertSelective不同,他只会插入含有数据的属性,对于为空的属性,不予以处理,这样的话如果数据库中设置有默认值,就不会被空值覆盖了。
3、删除方法:
方法1:根据特定限制条件删除,具体使用的方法和查询的时候是一样的。
方法2:根据主键删除。
4、更新方法:
更新在这里有6个方法,可以分为2组:
第一组:根据特定限制条件进行更新参数有两个
参数1:TbItemDesc record ->要更新的对象
参数2:TbItemDescExample example ->生成一个Criteria对象来设置查询条件
方法updateByExample(TbItemDesc record, TbItemDescExample example)作用:根据特定的限制条件进行更新除了text类型(数据库)的所有列。
方法updateByExampleSelective(TbItemDesc record, TbItemDescExample example)
作用:根据特定的限制条件更新所有设置了值的列。
方法updateByExampleWithBLOBs(TbItemDesc record, TbItemDescExample example)
作用:根据特定的限制条件进行更新所有列。
第二组:根据ID进行更新有一个参数
参数:TbItemDesc record -> 要更新的对象
方法updateByPrimaryKey(TbItemDesc record)
作用:通过ID更新除了text类型(数据库)的所有列
方法updateByPrimaryKeySelective(TbItemDesc record)
作用:通过ID更新所有设置了值的列。
方法updateByPrimaryKeyWithBLOBs(TbItemDesc record)
作用:通过ID进行更新所有列。
5、计数方法:
计数就一个方法,根据限制条件example计数。
以下是Mybatis反向工程自动生成的StudentMapper.java接口代码:我们的6.2小节的案例中Student业务类就是依据这个接口进行设计的。
package mapper; import entity.Student; import entity.StudentExample; import java.util.List; import org.apache.ibatis.annotations.Param; public interface StudentMapper { int countByExample(StudentExample example); int deleteByExample(StudentExample example); int deleteByPrimaryKey(Integer stuid); int insert(Student record); int insertSelective(Student record); List<Student> selectByExample(StudentExample example); Student selectByPrimaryKey(Integer stuid); int updateByExampleSelective(@Param("record") Student record, @Param("example") StudentExample example); int updateByExample(@Param("record") Student record, @Param("example") StudentExample example); int updateByPrimaryKeySelective(Student record); int updateByPrimaryKey(Student record); } |

