SpringBoot如何使用Mybatis的通用mapper

1. 配置信息

maven pom文件中增加依赖:

<!--mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>
<!--mapper-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>1.1.4</version>
</dependency>
<!--persistence依赖-->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0</version>
</dependency>

在application.properties配置文件中配置

(1)开启mybatis的驼峰转换

 

mybatis.configuration.mapUnderscoreToCamelCase=true

(2)配置mybatis的通用mappers路径

 

mapper.mappers=com.awaken.platform.microservice.systemcomponent.server.common.mapper.CommonMapper

(3)配置mybatis的通用mapper的主键生成方式
mapper.identity=MYSQL

2. Application启动类中引入包变换

  1. 配置MapperScan的导入包时不要引用
    import org.mybatis.spring.annotation.MapperScan

    要引用 tk.mybatis.spring.annotation.MapperScan

3. Pojo实体类配置

  1. Pojo中所有字段类型要写成封装类的类型,即long类型的数据要写成Long。

  2. 数据库中数据表的表名默认使用类名,驼峰转换会自动将UserInfo转换为user_info表名,若不使用默认的对应类名与表名的设置,则需要使用 @Table 为实体类Pojo配置对应于Mysql数据库中的数据表名。 比如MYSQL中有个user表,要在类前面配置表名。

    @Table(name = "user")
    public class UserPojo {}
    
  1. 将主键设置为Id 并且设置主键的自增方式

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long userId;
    
  2. 数据表中字段名默认使用Pojo中属性名的驼峰转下划线形式,如userName属性会对应数据表中user_name字段名,如果不采用默认方式来命名Pojo中属性名,则需要使用 @Column 来指定对应的数据表中的字段名。

    @Column(name = "user_name")
    private Long userFullNameInfo;
    
  3. 在数据库的数据表中不存在的字段,要用 @Transient 注解标识,否则mybatis在生成动态sql语句时会因为数据库表中无对应字段而报错。

4. 定义通用Mapper接口类

自己定义通用Mapper接口,该接口继承自Mybatis的Mapper接口和MySqlMapper接口:

 

server.common.mapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

public interface CommonMapper<T> extends Mapper<T>,MySqlMapper<T>{

}

注意:通用Mapper不能和业务Mapper放在同一目录下,会报错(错误信息未记录)

5. 定义业务Mapper接口,使用通用Mapper

继承通用Mapper时,必须指定明确的泛型类型。

 

public interface UserMapper extends CommonMapper<UserPojo> {}

6. 在代码中调用通用mapper的数据库操作方法

通用Mapper中提供的方法传入的参数一般是Pojo对象,实际的参数封装在Pojo对象内部,因此需要将Pojo中所有属性的类型定义为对象类型。

 

@Autowired
UserMapper userMapper

userMapper.insert(userPojo)

7. 通用Mapper的所有通用方法介绍

一、select

(1) List<T> select (T record)

说明: 根据实体中属性值查询,查询条件使用等号,所根据的属性值set进record对象中。

(2) T selectByPrimaryKey(Object key)

说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号,主键set进对应的实体对象中。

(3) List<T> selectAll()

说明:查询全部结果,select(null)方法能达到同样的效果。

(4) T selectOne(T record)

说明:根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号,属性值set进record对象中。

(5) int selectCount(T record)

说明:根据实体中的属性查询总数,查询条件使用等号,属性值set进record实体对象中。

二、Insert

(1) int insert(T record)

说明:保存一个实体,null的属性也会保存,不会使用数据库默认值。

(2) int insertSelective(T record)

说明:保存一个实体,null的属性不会保存,会使用数据库默认值。

三、Update

(1) int updateByPrimaryKey(T record)

说明:根据主键更新实体全部字段,null值会被更新。主键值被set进record对象。

(2) int updateByPrimaryKeySelective(T record)

说明:根据主键更新属性不为null的值,主键值被set进record对象。

四、 Delete

(1) int delete(T record)

说明:根据实体属性作为条件进行删除,查询条件使用等号,属性值set进record对象。

(2) int deleteByPrimaryKey(Object key)

说明:根据主键字段进行删除,方法参数必须包含完整的主键属性,主键值set进key对象中。

五、 Example方法

下面给出一个根据componentInfoIds列表批量查询的例子:

 

Example modelExample = new Example(ComponentGenerateReflectPojo.class);
Example.Criteria modelCriteria = modelExample.createCriteria();
modelCriteria.andIn("resultComponentInfoId", componentInfoIds);
List<ComponentGenerateReflectPojo> modelComponentGenerateReflects = generateReflectMapper.selectByExample(modelExample);

(1)List<T> selectByExample(Object example)

说明:根据Example条件进行查询

重点:这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询列

(2)int selectCountByExample(Object example)

说明:根据Example条件进行查询总数

(3)int updateByExample(@Param("record") T record, @Param("example") Object example)

说明:根据Example条件更新实体record包含的全部属性,null值会被更新

(4)int updateByExampleSelective(@Param("record") T record, @Param("example") Object example)

说明:根据Example条件更新实体record包含的不是null的属性值

(5)int deleteByExample(Object example)

说明:根据Example条件删除数据

六、 获取insert之后的自增主键

连接postgresql数据库时,要获取insert一条记录后该记录对应的自增主键,则只需要在pojo类的主键字段前增加注解:

 

@Id
@GeneratedValue(strategy = GenerationType.Identity, generator = "select currval('id'::regclass)")
@Column(insertable = false)
private Long id;

注解@Id用来指明该字段对应数据表中的主键;

注解@Column用来指明进行insert的pojo中该字段不需要set值

注解@GeneratedValue 参数一指明主键产生方式是自增,参数二指明返回该记录对应的当前主键信息。其中regeclass前对应的值在数据库对应的数据表属性中获取。

记录对应的主键信息在完成通用mapper的insert操作后被set进参数pojo中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值