这是一个spring cloud工程mybatis使用tk.myabtis通用mapper的总结博客
使用tk.mybatis非常简单,但是有一些坑,现在先说引入mybatis,也非常简单
1.首先在Controller模块(即spring boot主类模块)引入mybatis依赖和jdbc依赖以及mysql connecteor依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2.而后在spring boot的配置文件加入datesource的配置,在resouce文件夹创建mybatis-config.xml,想要在里面配置mybatis可以,不配置也可以
我的配置文件是application.properties
#数据库url
spring.datasource.url= url
#数据库用户名
spring.datasource.username= username
#数据库密码
spring.datasource.password= password
#mysql的driver
spring.datasource.driverClassName=com.mysql.jdbc.Driver
3.最后在dao模块也加入mybatis依赖,这时就可以使用myabtis了,但是如果要现在使用需要在mybatis配置文件添加mappers元素扫描mapper,或者在spring boot主类使用@MapperScan注解配置扫描的mapper包
接下来就是使用tk.mybatis
4.在Controller模块和dao模块引入tk.mybatis依赖,而后创建dao模块的mapper包,如果需要使用分页查询,则在dao模块引入分页查询依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.9</version>
</dependency>
5.在spring boot 主类打上@MapperScan注解扫描mapper所在的包,需要注意使用的注解是tk.mybatis.spring.annotation.MapperScan的@MappperScan注解,而不是mybatis包下的MapperSacn注解
6.接下来就是tk.mybatis通用mapper的使用
一般来说都是先创建一个CommonMapper,而后再继承CommonMapper并自定义一些操作,当然也可以不做自定义操作,tk.mybatis本身的通用mapper已经定义了许多操作,主要有单个以及按照example的增删查,但是对于修改只有按照id进行修改的方法,所以批量修改需要自己自定义,但是通用mapper提供的方法一般情况下已经够用
User为实体类,映射数据库的user表
实体类可以自己 定义,也可以用myabtis generator插件生成(生成的并不是很好,如果实体类有共同基类等等情况,当然,简单的实体类则无所谓)
CommonMapper
public interface CommonMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
注意不能直接注入CommonMapper使用,例:
//这样做会导致异常
@Autowired
protected CommonMapper<User> userMapper;
UserMapper
@Component
public interface UserMapper extends CommonMapper<User> {
//一些自定义的操作
}
一些常用使用不例举,一些使用:
分页按条件查询:
private static final Integer MIN_PAGE_SIZE = 5;
private static final Integer MAX_PAGE_SIZE = 50;
private static final Integer DEFAULT_PAGE_SIZE = 10;
private static final String SORT_STYLE = "updated_time desc";
@Autowired
private UserMapper userMapper;
public Page<User> queryUser(Query query) {
Integer size = query.getPageSize();
Integer page = query.getPage();
/**
* 对页码和分页大小合法性进行判断并设置分页查询的页码和分页大小
* */
if(queryPaperVO.getPage() == null){
page = 1;
}
if(size == null || size < MIN_PAGE_SIZE || size > MAX_PAGE_SIZE){
size = DEFAULT_PAGE_SIZE;
}
PageMethod.startPage(page,size);
/**
* 非空校验,并根绝非空条件进行查询
* */
Example example = new Example(User.class);
Example.Criteria ec = example.createCriteria();
example.setOrderByClause(SORT_STYLE);
//多条件查询,使用spring的StringUtils进行非空校验
if(!StringUtils.isEmpty(query.getName())){
ec.andLike("name",SYMBOL+query.getName()+SYMBOL);
}
if(queryPaperVO.getCompanyId() != null){
ec.andEqualTo("companyId",query.getCompanyId());
}
if(queryPaperVO.getOrgId() != null){
ec.andEqualTo(ORG_ID,query.getOrgId());
}
return (Page<User>) userMapper.selectByExample(example);
}
批量删除
@Override
public Boolean deleteUsers(List<User> users) {
//设置id列表,使用collection等可遍历结构也可以
List<Long> userId = new ArrayList<>();
for(User user : users){
userIds.add(user.getId());
}
Example example = new Example(User.class);
Example.Criteria userEC = example.createCriteria();
userEC.andIn("id",userId);
return paperSubjectAnswerMapper.deleteByExample(example) > 0;
}
一些需要注意的点:
1.如果数据库表名和实体类名字不一样,则需要在实体类上打上注解@Table(name=“表名”)
2.需要在id(主键)打上@Id注解,否则通用mapper的*byprimarykey方法将找不到对应的记录
@Table(name = "t_user")
public class User {
@Id
private Long id;
private String name;
}
3.通用mapper的批量插入使用的是tk.mybatis.mapper.common.special.InsertListMapper,这时需要数据库设置主键自增或者实体类打上主键增长策略为自增
如果想要使用自己设定的id作为主键则需要使用tk.mybatis.mapper.additional.insert.InsertListMapper的insetListMapper
import paper.pojo.entity.User;
import org.springframework.stereotype.Component;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
@Component
public interface UserListMapper extends InsertListMapper<User> {
}
本文详细介绍了如何在Spring Boot项目中使用tk.mybatis进行数据库操作,包括引入依赖、配置数据源、扫描Mapper、使用通用Mapper以及注意事项,如实体类与表名对应、主键注解等。
3892

被折叠的 条评论
为什么被折叠?



