4. 注解
4.1. @TableName
po和表名的映射,也就是说po文件的名称可以和数据库表名不一致的时候可以通过这个注解来映射。
比如我们将数据库表名改为tbl_user
,然后在po上加上TableName
注解,再次执行测试,注意sql语句的变化。
@Data
@TableName("tbl_user")
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
此时打印的sql语句上会自动转换为配置的表名tbl_user
。
10:49:11.579 [main] DEBUG org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [com.mysql.jdbc.JDBC4Connection@72889280] will not be managed by Spring
10:49:11.584 [main] DEBUG com.zzlh.mp.mapper.UserMapper.selectList - ==> Preparing: SELECT id,name,age,email FROM tbl_user
10:49:11.604 [main] DEBUG com.zzlh.mp.mapper.UserMapper.selectList - ==> Parameters:
10:49:11.616 [main] DEBUG com.zzlh.mp.mapper.UserMapper.selectList - <== Total: 8
10:49:11.617 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@66f66866]
10:49:11.617 [main] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)
User(id=6, name=张三, age=34, email=22@qq.com)
User(id=7, name=李四, age=33, email=ls@qq.com)
User(id=8, name=王五, age=34, email=ww@qq.com)
全局的 MP 配置:
如果所有的表都有相同的前缀,那么我们可以通过MP的全局配置来统一完成,而不需要每个po都要加注解。
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
在spring配置文件里面配置MP的全局配置
<!-- 配置sqlsessionFactory -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
<!--加入MP的全局配置-->
<property name="globalConfig" ref="globalConfig"></property>
<!--<property name="mapperLocations" value="classpath:mapper/*.xml"></property>-->
</bean>
<!--MP的全局配置-->
<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
<property name="dbConfig" ref="dbConfig"/>
</bean>
<!--数据库配置-->
<bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
<property name="tablePrefix" value="tbl_"/>
</bean>
再次执行测试,查看打印sql语句:
11:03:57.063 [main] DEBUG com.zzlh.mp.mapper.UserMapper.selectList - ==> Preparing: SELECT id,name,age,email FROM tbl_user
11:03:57.080 [main] DEBUG com.zzlh.mp.mapper.UserMapper.selectList - ==> Parameters:
11:03:57.091 [main] DEBUG com.zzlh.mp.mapper.UserMapper.selectList - <== Total: 8
11:03:57.092 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@328572f0]
11:03:57.092 [main] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)
User(id=6, name=张三, age=34, email=22@qq.com)
User(id=7, name=李四, age=33, email=ls@qq.com)
User(id=8, name=王五, age=34, email=ww@qq.com)
4.2. @TableField
字段注解(非主键),对非主键的字段进行配置。
两个比较重要的属性,value用来和数据库的字段进行映射;exist用来排除数据库中不存在的字段。
@Data
//@TableName("tbl_user")
public class User {
private Long id;
@TableField("last_Name")
private String lastName;
private Integer age;
private String email;
@TableField(exist = false)
private int level;
}
如果数据库中的字段我们改为last_name,po中使用lastName,那么就可以使用value属性进行映射绑定,
另外po中一下用于显示自定义的属性,而数据库字段中并没有对应的字段,可以使用exist进行排除。
执行测试方法,查看日志打印的sql语句,可以看到lastName自动转为last_Name,level并没有出现在语句中。
11:21:23.018 [main] DEBUG com.zzlh.mp.mapper.UserMapper.insert - ==> Preparing: INSERT INTO tbl_user ( id, last_Name, age, email ) VALUES ( ?, ?, ?, ? )
11:21:23.036 [main] DEBUG com.zzlh.mp.mapper.UserMapper.insert - ==> Parameters: 8(Long), 王五(String), 34(Integer), ww@qq.com(String)
11:21:23.054 [main] DEBUG com.zzlh.mp.mapper.UserMapper.insert - <== Updates: 1
全局的 MP 配置:
老版本的MP需要在全局配置里配置dbColumnUnderline,来支持全局的字段支持下划线转驼峰的映射。新版本里面已经没有这个属性了,我这里将@TableField
注解取消掉试了一下查询,字段自动转化为带下划线的名称。
4.3. @TableId
主键注解,这个注解有两个属性:value
用来指定主键和po字段的映射,type
用来指定主键的生成策略。
@Data
public class User {
@TableId(value = "id",type = IdType.AUTO)
private long id;
@TableField("last_Name")
private String lastName;
private Integer age;
private String email;
@TableField(exist = false)
private int level;
}
主键生成策略
值 | 描述 |
---|---|
AUTO | 数据库自增 |
NONE | 无状态 |
INPUT | 自行输入 |
ID_WORKER | 分布式全局唯一ID 长整型类型 |
UUID | 32位UUID字符串 |
ID_WORKER_STR | 分布式全局唯一ID 字符串类型 |
注:ID_WORKER、UUID、ID_WORKER_STR 3种类型、只有当插入对象ID 为空,才自动填充。
全局的 MP 配置:
<!-- 配置sqlsessionFactory -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
<!--加入MP的全局配置-->
<property name="globalConfig" ref="globalConfig"></property>
</bean>
<!--MP的全局配置-->
<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
<property name="dbConfig" ref="dbConfig"/>
</bean>
<!--数据库配置-->
<bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
<property name="tablePrefix" value="tbl_"/>
<property name="idType" value="AUTO"></property>
</bean>
8 支持主键自增的数据库插入数据获取主键值
- Mybatis: 需要通过 useGeneratedKeys 以及 keyProperty 来设置
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
</insert>
- MP: 自动将主键值回写到实体类中
4.4. @Version
乐观锁注解、标记 @Verison 在字段上,配合乐观锁插件使用。
4.5. @EnumValue
通枚举类注解(注解在枚举字段上),配合通用枚举使用。
4.6. @TableLogic
表字段逻辑处理注解(逻辑删除),配合逻辑删除插件使用。
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | “” | 逻辑未删除值 |
delval | String | 否 | “” | 逻辑删除值 |
4.7. @SqlParser
租户注解 目前只支持注解在 mapper 的方法上(3.1.1开始支持注解在mapper上),配合多租户插件使用。
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
filter | boolean | 否 | false | true: 表示过滤SQL解析,即不会进入ISqlParser解析链,否则会进解析链并追加例如tenant_id等条件 |
4.8. @KeySequence
序列主键策略 oracle,属性:value、resultMap。和自动填充类似,只不过是调用数据库的Sequence。
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | “” | 序列名 |
clazz | Class | 否 | Long.class | id的类型, 可以指定String.class,这样返回的Sequence值是字符串"1" |
共同学习,写下你的评论
评论加载中...
作者其他优质文章