配置信息

maven增加依赖:

  1. <dependency>
  2. <groupId>tk.mybatis</groupId>
  3. <artifactId>mapper-spring-boot-starter</artifactId>
  4. <version>2.0.2</version>
  5. </dependency>

在application.properties配置文件中配置

开启mybatis的驼峰转换

mybatis.configuration.mapUnderscoreToCamelCase=true

配置mybatis的通用mappers路径

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

配置mybatis的通用mapper的主键自增回写方法,

默认是MYSQL,如果是postgresql则需要在对应的pojo类主键字段前加注解配置。
mapper.identity=MYSQL

Application启动类中引入包变换

配置MapperScan的导入包要引用 tk.mybatis.spring.annotation.MapperScan不要引用 import org.mybatis.spring.annotation.MapperScan
启动类前加注解:
@MapperScan(“com.hikvision.medusa.microservice.kgmanage.graph.mapper”)
要指定到mapper对应的目录

Pojo实体类配置

Pojo中所有字段类型要写成封装类的类型,即long类型的数据要写成Long。
将实体类Pojo配置对应于Mysql数据库中的数据表名, 比如MYSQL中有个user表,要在类前面
_@_Table(name = “user”)
public class UserPojo {}
将主键设置为Id 并且设置主键的自增方式
@Id
_@_GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
在数据库的数据表中不存在的字段
用@Transient注解标识,否则mybatis在生成动态sql语句时会因为数据库表中无对应字段而报错。

定义通用Mapper接口类

自己定义通用Mapper接口,指定泛型,该接口继承自Mybatis的Mapper接口和MySqlMapper接口:
server.common.mapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
public interface CommonMapper extends Mapper,MySqlMapper{ }
注意:通用Mapper不能和业务Mapper放在同一目录下,会报错(错误信息未记录)

定义业务Mapper接口,使用通用Mapper。业务Mapper要指定具体的类型

public interface UserMapper extends CommonMapper {}

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

通用Mapper中提供的方法传入的参数一般是Pojo对象,实际的参数封装在Pojo对象内部,因此需要将Pojo中所有属性的类型定义为对象类型。
_@_Autowired
UserMapper userMapper;
userMapper.insert(userPojo)

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

一、select
(1)List select (T record)
说明: 根据实体中属性值查询,查询条件使用等号,所根据的属性值set进record对象中。
(2) T selectByPrimaryKey(Object key)
说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号,主键set进对应的实体对象中。
(3) List 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 modelComponentGenerateReflects = generateReflectMapper.selectByExample(modelExample);
(1)List 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类的主键字段前增加注解:

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

注解@Id用来指明该字段对应数据表中的主键;
注解@Column用来指明进行insert的pojo中该字段不需要set值
注解_@_GeneratedValue 参数一指明主键产生方式是自增,参数二指明返回该记录对应的当前主键信息。其中regeclass前对应的值在数据库对应的数据表属性中获取。
记录对应的主键信息在完成通用mapper的insert操作后被set进参数pojo中。