Springboot集成通用Mapper
通用mapper
通用Mapper:可以实现自动拼接sql语句;所有的mapper都不需要编写任何方法也就是不用编写sql语句。可以提高开发效率。
-
添加启动器依赖; 改造UserMapper继承Mapper; 修改启动引导类Application中的Mapper扫描注解; 修改User实体类添加jpa注解; 改造UserService实现业务功能;
<!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency>
注意:一旦引入了通用Mapper的启动器,会覆盖Mybatis官方启动器的功能,因此需要移除对官方Mybatis启动器的依赖。(对应步骤2.3)
2. 编写UserMapper 继承通用Mapper ( 导包是 tk.mybatis )
无需任何配置就可以使用了。如果有特殊需要,可以到通用mapper官网查看:https://github.com/abel533/Mapper/wiki/3.config 编写 mapperUserMapper.java 如下:
注意这里的导包 是 tk.mybatis.mapper.common.Mapper
package com.javaclimber.mapper; import com.javaclimber.pojo.User; import tk.mybatis.mapper.common.Mapper; public interface UserMapper extends Mapper<User> { }
3. 把启动类上的@MapperScan注解修改为通用mapper中自带的:
4 在User实体类上加JPA注解 修改 pojoUser.java 如下:
package com.javaclimber.pojo; import lombok.Data; import tk.mybatis.mapper.annotation.KeySql; import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Table; import java.util.Date; @Data //在编译阶段会根据注解自动生成对应的方法;data包含get/set/hashCode/equals/toString等方法 @Table(name = "tb_user") //代表映射哪张表 public class User { @Id // 说明是主键 @KeySql(useGeneratedKeys = true) //主键回填 (添加操作把自增的 id返回给新添加的用户对象) private Long id; // user_name ==> userName 如果数据库里是驼峰式命名会自动映射 private String userName; //@Column("abc") 如果数据库密码这一列名字是abc 通过配置 @Column 就可以映射过来 private String password; private String name; private Integer age; private Integer sex; private Date birthday; private String note; private Date created; private Date updated; }
5 对 UserService 的代码进行简单改造
对userMapper调用的各种查询方法,在通用mapper里就都定义好了
package com.javaclimber.service; import com.javaclimber.mapper.UserMapper; import com.javaclimber.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class UserService { @Autowired private UserMapper userMapper; // 根据id查询 public User queryById(Long id){ return userMapper.selectByPrimaryKey(id); // 通用mapper里的根据主键查找 } // 新增保存用户 @Transactional public void saveUser(User user){ System.out.println("新增用户"); // userMapper.insert(user); // user所有属性都在sql语句里 不管是否 非空 userMapper.insertSelective(user); // 选择添加 属性为空的column 不会出现在sql语句中 } }