开发工具与关键技术: Java SpringBoot
作者:肖广斌
撰写时间:2021年4月25日
通用mapper:可以实现自动拼接sql语句,不需要再创建xml文件或者在映射文件中编写方法,也就是不用编写sql语句。
使用通用mapper,因为在使用mybatis框架操作数据库的时候,通常是需要在xml映射文件中或者方法上使用注解的格式编写sql语句,需要我们自己手动去编写,当我们使用通用mapper,就不需要我们手动编写sql语句。极其方便的使用mybatis单表的增删查改,可以减少我们的代码量,提高我们的开发效率。通用Mapper可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法。
通用Mapper也有一定的局限性,就是支持单表操作,不支持多表联合查询。多表联查的复杂的sql语句还是需要自己手动在xml或者注解上编写。
如何使用:
1、添加启动器依赖
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
2、改造UserMapper继承Mapper
这里只需要继承Mapper接口即可使用
public interface UserMapper extends Mapper<User> {
}
继承的Mapper接口
/**
- 通用Mapper接口,其他接口继承该接口即可
-
这是一个例子,自己扩展时可以参考
- @param 不能为空
- @author liuzh
*/
@tk.mybatis.mapper.annotation.RegisterMapper
public interface Mapper<T> extends
BaseMapper<T>,
ExampleMapper<T>,
RowBoundsMapper<T>,
Marker {
}
3、修改启动引导类中的Mapper扫描注解
@SpringBootApplication
//@MapperScan扫描mybatis所有的业务mapper接口,就不需要在mapper接口上使用@Mapper注解
@MapperScan("com.example.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4、修改User实体类添加jpa注解
Mybatis通用接口mapper依赖JPA,所以实体类得用JPA建立对象和表的映射关系
@Data
@Table(name = "tb_user")
public class User {
@Id
private Long id;
//@Column(name = "userName")
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private String note;
private Date created;
private Date updated;
}
这里用到了一个叫lombok的插件,首先也是需要导入依赖,下载插件,就可以使用了,依赖如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
用法:
@Data:在编译阶段会根据注解自动生成对应的方法;data包含get/set/hashCode/equals/toString等方法
5、编写测试类,通过UserSvice实现业务功能
我们在UserSvice调用userMapper,写几个简单的增删查改业务方法,通过通用Mapper接口调用它封装好的方法,最后写测试类实现我们的业务功能
@Autowired
private UserService userService;
//查询
@Test
public void queryById() {
User user = userService.queryById(2L);
System.out.println("user=" + user);
}
//新增
@Test
public void saveUser() {
User user = new User();
user.setUserName("新增test");
user.setName("新增test");
user.setAge(18);
user.setPassword("123456");
user.setSex(2);
user.setCreated(new Date());
System.out.println("user=" + user);
userService.saveUser(user);
}
//修改
@Test
public void updateUser(){
User user = new User();
user.setUserName("修改test");
user.setName("修改test");
user.setAge(19);
user.setPassword("123");
user.setSex(1);
user.setId(15L);
System.out.println("user=" + user);
userService.update(user);
}
//删除
@Test
public void deleteUser(){
userService.deleteUser(15L);
}