详解Mybatis通用Mapper介绍与使用

详解Mybatis通用Mapper介绍与使用

目前通用映射器只支持单个表的操作、添加、删除和查询。不需要在mapper.xml中编写相应的sql语句,我们只需要调用相应的接口,非常方便快速开发。感兴趣的朋友可以参考一下。

大多数使用Mybatis的开发者都会遇到一个问题,就是要在xml文件中写很多SQL。除了特殊的业务逻辑SQL之外,还有许多结构相似的添加、删除和查询SQL。此外,当数据库表结构改变时,所有对应的SQL和实体类都需要改变。工作量和效率的影响可能是区分增删查程序员和真正程序员的壁垒。这时,万能测绘仪应运而生.

什么是通用Mapper

Universal Mapper是一个基于Mybatis的插件,用来解决单个表的添加、删除和搜索问题。开发者不需要在DAO中写SQL或者添加方法。只要他们编写实体类,就可以支持相应的添加、删除和更改查询的方法。

如何使用

以MySQL为例,假设有这样一个表:

创建表` test_table `(

` id bigint(20)NOT NULL AUTO _ INCREMENT,

` name` varchar(255) DEFAULT ,

` create_time `日期时间默认为空,

` create_user_id` varchar(32)默认为NULL,

` update_time `日期时间默认为空,

` update _ user _ id varchar(32)默认为NULL,

` is_delete` int(8)默认为NULL,

主键(` id `)

)ENGINE=InnoDB AUTO_INCREMENT=1默认字符集=utf8

是主键id,是自增的。以下表为例,介绍如何使用通用映射器。

Maven依赖

!-通用制图仪-

属国

groupIdtk.mybatis/groupId

artifactIdmapper/artifactId

版本3 . 3 . 9/版本

/依赖关系

SpringMVC配置

!-通用制图仪-

bean class= tk . my batis . spring . mapper . mapperscannerconfigurer

property name= base package value= cn . com . blue moon . BD . service . spider . Dao /

propertyname=properties

价值

mappers=tk . mybatis . mapper . common . mapper

/值

/属性

/bean

请注意,这里使用tk . my batis . spring . mapper . mapper scanner configure来替换原来的my batis org . my batis . spring . mapper . mapper scanner configurator。

可配置参数介绍:

UUID:设置生成UUID的方法,这需要由OGNL配置。对返回值没有限制,但必须与字段类型匹配。

IDENTITY:检索主键的方法。关于可配置的内容,请参阅下一篇文章中关于如何使用它的介绍。

Order:selet key中的order属性,可选值为BEFORE和AFTER。

目录:数据库的目录。如果设置了该值,则查询时表名将以目录为前缀。

模式:与目录相同,目录优先于模式。

SeqFormat:序列的获取规则,使用{num} format参数,默认值为{0}.nextval,对于Oracle,有四个可选参数,分别对应0、1、2、3,分别为SequenceName、ColumnName、PropertyName、TableName。

非空:是否判断插入和更新中的字符串类型!=“”,将使用一些方法。

样式:实体表转换的规则。默认驼峰带下划线,可选值为正常实体名称和字段名称;驼峰是默认值,驼峰带下划线;大写转换成大写;小写转换成小写

EnableMethodAnnotation:可以控制是否支持方法上的JPA注释,默认值为false。

在大多数情况下,不会使用这些参数。特殊情况可以自己研究。

实体类的写法

记住一个原则:实体类中的字段数=数据库表中需要操作的字段数。默认情况下,实体类中的所有字段都将作为表中的字段进行操作。如果有额外的字段,必须添加@Transient注释。

@Table(name=test_table )

公共类TestTableVOimplements Serializable {

private static final long serialVersionUID=1L;

@Id

@ generated value(generator= JDBC )

私有长id;

@瞬态

私有字符串userId

私有字符串名称;

私有时间戳创建时间;

私有字符串createUserId

私有时间戳更新时间;

私有字符串updateUserId

私有整数被删除;

//省略get,set.

}

描述:

默认的表名是类名,驼峰带下划线(只处理大写字母)。例如,UserInfo对应的默认表名是user_info。

可以使用@Table(name=tableName )指定表的名称,也可以用这种方式指定不符合第一个默认规则的表的名称。

默认情况下,像@Column这样的字段将被用作表字段,表字段的默认形式是Java对象的字段名称的驼峰下划线形式。

您可以使用@Column(name=fieldName )来指定不符合规则3的字段名称。

使用@Transient注释忽略该字段,使用该注释添加的字段将不会用作表字段。

建议必须有一个带@Id标注的字段作为主键,多个带@Id标注的字段可以作为联合主键。

如果是MySQL的自增字段,只需添加@ generated value(generator= JDBC )。

DAO 的写法

在传统的Mybatis编写方法中,需要将DAO接口与Mapper文件关联起来,即需要编写SQL来实现DAO接口中的方法。在通用映射器中,DAO只需要继承一个通用接口就可以拥有丰富的方法:

继承泛型映射器时,必须指定泛型。

公共接口testtabledaextends MapperTestTableVO {

}

一旦映射器被继承,继承的映射器具有映射器的所有常用方法:

Select

方法:ListT select(T记录);

注意:根据实体中的属性值进行查询,等号作为查询条件。

方法:T selectByPrimaryKey(对象键);

注意:根据主键字段查询时,方法参数必须包含完整的主键属性,查询条件使用等号。

方法:ListT selectAll();

注意:查询所有结果,select(null)方法可以达到同样的效果。

方法:T selectOne(T记录);

注意:根据实体中的属性查询只能有一个返回值,多个结果是例外。等号用作查询条件。

方法:int selectCount(T记录);

注意:根据实体中属性查询的总数,查询条件使用等号。

Insert

方法:int insert(T记录);

注意:如果保存实体,将会保存空属性,并且不会使用数据库默认值。

方法:int insertSelective(T记录);

注意:如果保存实体,将不保存空属性,但将使用数据库的默认值。

Update

方法:int updateByPrimaryKey(T记录);

注意:如果实体的所有字段都根据主键更新,则空值将被更新。

方法:int updatebyprimarykey selective(trecord);

注意:根据主键更新属性不为空的值。

Delete

方法:int delete(T记录);

注意:根据实体属性作为条件删除,查询条件使用等号。

方法:intdeletebyprimarykey(object key);

注意:根据主键字段删除时,方法参数必须包含完整的主键属性。

Example方法

方法:listselect by example(object example);

说明:根据示例条件进行查询。

重要:此查询支持通过Example类指定查询列,通过selectProperties方法指定查询列。

方法:int selectcountbyexample(object example);

描述:基于示例条件的查询总数。

方法:int updatebyexample(@ param( record )trecord,@ param( example )object example);

注意:如果实体记录中包含的所有属性都根据示例条件进行了更新,则空值将被更新。

方法:int updatebyexampleselective(@ param( record )trecord,@ param( example )object example);

注意:根据示例条件更新实体记录中包含的属性值不为空。

方法:intdeletebyexample(object example);

说明:根据示例条件删除数据。

代码中使用

将dao注入到服务中,就可以使用了。

@自动连线

私有TestTableDao testTableDao

下面是怎么写的:

增加

TestTableVO VO=new TestTableVO();

//省略设置vo的属性.

int row=testtabledao . insert selective(VO);

修改

TestTableVO VO=new TestTableVO();

//省略设置vo的属性.

int row=testtabledao . updatebyprimarykeyselective(VO);

查询单个

TestTableVO VO=new TestTableVO();

VO . setid(123 l);

TestTableVO result=testtabledao . selectone(VO);

条件查询

//创建一个示例

Example Example=new Example(testtablevo . class);

//创建标准

详解Mybatis通用Mapper介绍与使用