对比

以单表person,生成对应的Person实体类为例:

原生mybatis生成:
PersonMapper.xml、Person.java、PersonMapper.java、PersonExample.java
通用mapper生成:
PersonMapper.xml、Person.java、PersonMapper.java

原生mybatis生成的POJO中,纯代码,不包含注解。
通用mapper生成的POJO中,属性加了 (持久化)注解,与数据库字段进行匹配。

原生mybatis生成的PersonMapper.xml中,有很多sql。
通用mapper生成的PersonMapper.xml中,只有一个POJO与数据库字段的映射<resultMap>。

通用mapper生成的PersonMapper.java接口 extends MyMapper<?>。

实际上,MyMapper<?>已经提供常用的 单表CRUD方法的实现。
如果还有其他特殊CRUD需求(如多表连接查询),只需自己在PersonMapper.java接口添加方法,对应在PersonMapper.xml写sql就行了。

依赖

		<dependency>
			<groupId>tk.mybatis</groupId>
			<artifactId>mapper-spring-boot-starter</artifactId>
			<version>1.1.4</version>
		</dependency>

yml配置

mybatis: 
  typeAliasesPackage: com.pinyu.miniprogram.mysql.entity
  mapper-locations: classpath:mapper/**/*Mapper.xml
mapper:
  mappers: com.pinyu.miniprogram.mysql.mappers.BaseMapper
  identity: mysql

扫描

mappers对应的通用mapper类,不要和自己其他业务的mapper放在一起,不要被@MapperScan扫描到,不然会报错,因为继承了通用mapper,会有很多相应的方法,被扫描到以后,mybatis发现没有一个xml配置文件或者相应方法没有进行实现,这时候就会报错。但是继承自己的BaseMapper相关mapper肯定是要被扫描到的。

BaseMapper的方法

在这里插入图片描述

insert插入数据

int insert(Account record);

//下面是完整的案例
User user = new User();
  //user.setId(101);
  user.setUsername( "test" );
  user.setPassword( "123456" )
  user.setEmail( "674531003@qq.com" );
  userDAO.insert(user);

相当于insert into user (ID,username, password ,email) values (101, ‘test’ , ‘123456’ , ‘674531003@qq.com’ );

insertSelective插入非空数据

int insertSelective(Account record);

只给有值的字段赋值(会对传进来的值做非空判断)

deleteByexample根据条件删除多条

int deleteByExample(AccountExample example);

//下面是一个完整的案例
UserExample example = new UserExample();
  Criteria criteria = example.createCriteria();
  criteria.andUsernameEqualTo( "joe" );
  userDAO.deleteByExample(example);

相当于:delete from user where username= ‘joe’

deleteByPrimaryKey根据主键(ID)删除单条

int deleteByPrimaryKey(Integer id);
userDAO.deleteByPrimaryKey( 101 );

相当于delete from user where id=101

countByExample根据条件查询数量

int countByExample(UserExample example);

//下面是一个完整的案列
UserExample example = new UserExample();
  Criteria criteria = example.createCriteria();
  criteria.andUsernameEqualTo( "joe" );
  int count = userDAO.countByExample(example);

相当于:select count(*) from user where username=‘joe’

selectByExample根据条件查询数据

List selectByExample(AccountExample example);

//下面是一个完整的案例
UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo( "joe" );
criteria.andUsernameIsNull();
example.setOrderByClause( "username asc,email desc" );
List<?>list = userDAO.selectByExample(example);

相当于:select * from user where username = ‘joe’ and username is null order by username asc,email desc

//注:在iBator 生成的文件UserExample.java中包含一个static 的内部类 Criteria ,在Criteria中有很多方法,主要是定义SQL 语句where后的查询条件。

//ASC 正序 Desc 倒序

selectByPrimaryKey根据主键(ID)查询数据

Account selectByPrimaryKey(Integer id); 

相当于select * from user where id = 变量id

updateByExample按条件更新

int updateByExample( @Param ( “record” ) Account record, @Param ( “example” ) AccountExample example);

updateByExampleSelective按条件非空更新

int updateByExampleSelective( @Param ( “record” ) Account record, @Param ( “example” ) AccountExample example);

//下面是一个完整的案列
UserExample example = new UserExample();
  Criteria criteria = example.createCriteria();
  criteria.andUsernameEqualTo( "joe" );
  User user = new User();
  user.setPassword( "123" );
  userDAO.updateByPrimaryKeySelective(user,example);

相当于:update user set password= ‘123’ where username= ‘joe’

updateByPrimaryKey按主键更新

int updateByPrimaryKey(Account record);

//下面是一个完整的案例
User user = new User();
  user.setId( 101 );
  user.setUsername( "joe" );
  user.setPassword( "joe" );
  user.setEmail( "joe@163.com" );
  userDAO.updateByPrimaryKey(user);

相当于update user set username= ‘joe’ , password = ‘joe’ ,email= ‘joe@163.com’ where id=101

updateByPrimaryKeySelective按主键非空更新

int updateByPrimaryKeySelective(Account record);

//下面是一个完整的案例
 
  User user = new User();
user.setId( 101 );
user.setPassword( "joe" );
userDAO.updateByPrimaryKeySelective(user);

update user set password = ‘joe’ where id=101

example

通用mapper的example类

example

普通Example方式(从and方法开始可以实现动态sql拼接)

Example example = new Example(CandidateBrandEntity.class);
example
  //.selectProperties("cabId","cabName")
    .and().andEqualTo("cabDeleted",0)
    .andLike("cabName","%d%");
// 排序
example.orderBy("cabCreatedTime")
    /*.desc()*/
      .orderBy("cabId").desc();
// 获得结果
List<CandidateBrandEntity> brands = brandEntityMapper.selectByExample(example);

criteria

可使用criteria完成动态sql拼接

Example example = new Example(MybatisDemo.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo(“count”, 0).andLike(“name”,%d%);

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐