目前通用映射器只支持单个表的操作、添加、删除和查询。不需要在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);
//创建标准