MyBatis之通用mapper
文章目录对比依赖yml配置扫描BaseMapper的方法通用mapper的example类examplecriteria对比以单表person,生成对应的Person实体类为例:原生mybatis生成:PersonMapper.xml、Person.java、PersonMapper.java、PersonExample.java通用mapper生成:PersonMapper.xml、Person
对比
以单表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%”);
更多推荐
所有评论(0)