1.修改pom 直接使用官网的依赖 mybatisPlus官网:https://mp.baomidou.com/
com.baomidou
mybatis-plus
3.1.1
2.配置 MybatisPlusConfig.java文件 加上@Configuration注解 以下为配置文件
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.plugin.Interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
/**
* MybatisPlus全局配置
*/
@Configuration
public class MybatisPlusConfig {
@Autowired
@Qualifier("dataSource")
private DataSource dataSource;
/**
* 乐观锁
*
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
@Bean
public MybatisSqlSessionFactoryBean sqlSessionFactory() throws Exception{
MybatisSqlSessionFactoryBean sqlSessionFactoryBean= new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
// MyBatis Mapper 所对应的 XML 文件位置,如果您在 Mapper 中有自定义方法(XML 中有自定义实现),需要进行该配置,告诉 Mapper 所对应的 XML 文件位置
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/*Dao.xml"));
// MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名)
sqlSessionFactoryBean.setTypeAliasesPackage("com.disp.*.entity");
sqlSessionFactoryBean.setTypeEnumsPackage("com.disp.common.enums");
// GlobalConfig 配置
GlobalConfig globalConfig = new GlobalConfig();
GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
dbConfig.setIdType(IdType.AUTO);
dbConfig.setTableUnderline(true);
dbConfig.setCapitalMode(false);
dbConfig.setFieldStrategy(FieldStrategy.NOT_NULL);
globalConfig.setDbConfig(dbConfig);
globalConfig.setEnableSqlRunner(true);
sqlSessionFactoryBean.setGlobalConfig(globalConfig);
MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
// 打印sql
mybatisConfiguration.setLogImpl(StdOutImpl.class);
mybatisConfiguration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
mybatisConfiguration.setMapUnderscoreToCamelCase(true);
mybatisConfiguration.setCacheEnabled(false);
mybatisConfiguration.setCallSettersOnNulls(true);
sqlSessionFactoryBean.setConfiguration(mybatisConfiguration);
List interceptors = new ArrayList<>();
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置数据库
paginationInterceptor.setDialectType(DbType.MYSQL.getDb());
// 设置分页插件
interceptors.add(paginationInterceptor);
sqlSessionFactoryBean.setPlugins(interceptors.toArray(new Interceptor[0]));
System.out.println("sqlSessionFactory注入成功》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》");
return sqlSessionFactoryBean;
}
@Bean
@Profile({"dev", "test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
// dev环境,格式化输出的sql语句
performanceInterceptor.setFormat(true);
performanceInterceptor.setMaxTime(5000);
return performanceInterceptor;
}
}
3.写一个实体类 UserEntity
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 用户表
*
* @author xuzl
* @email [email protected]
* @date 2019-05-30 15:15:45
*/
@Data
@TableName("tb_user")
public class UserEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
@TableId
private Long userId;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 部门ID
*/
private Long deptId;
/**
* 邮箱
*/
private String email;
/**
* 联系电话
*/
private String mobile;
/**
* 状态 0锁定 1有效
*/
private String status;
/**
* 创建时间
*/
private Date crateTime;
/**
* 修改时间
*/
private Date modifyTime;
/**
* 最近访问时间
*/
private Date lastLoginTime;
/**
* 性别 0男 1女
*/
private String ssex;
/**
* 主题
*/
private String theme;
/**
* 头像
*/
private String avatar;
/**
* 描述
*/
private String description;
}
4.UserService 代码
public interface UserService extends IService {
/**
* 查询
*
* @param
* @return
* @Author: xuzl
* @Date: 2019年06月03日
**/
List getUser();
/**
* 添加
*
* @param
* @return
* @Author: xuzl
* @Date: 2019年06月03日
**/
void insertUser();
/**
* 修改
*
* @param id
* @return
* @Author: xuzl
* @Date: 2019年06月03日
**/
void updateUser(Long id);
/**
* 多个删除
*
* @param ids
* @return
* @Author: xuzl
* @Date: 2019年06月03日
**/
void delAllUser(String[] ids);
/**
* 删除
*
* @param id
* @return
* @Author: xuzl
* @Date: 2019年06月03日
**/
void deleteUser(Long id);
/**
* 分页查询
*
* @param currentPage
* @param pageSize
* @return
* @Author: xuzl
* @Date: 2019年06月03日
**/
IPage getUserPage(Integer currentPage, Integer pageSize);
}
5.UserServiceImpl 代码
@Service("userService")
public class UserServiceImpl extends ServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List getUser() {
return this.list(new QueryWrapper());
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
public void insertUser() {
UserEntity userEntity = new UserEntity();
userEntity.setUsername("55555");
userEntity.setPassword("123456");
userEntity.setDeptId(415L);
userEntity.setEmail("asd");
userEntity.setMobile("das");
userEntity.setStatus("1");
userEntity.setCrateTime(new Date());
userEntity.setModifyTime(new Date());
userEntity.setLastLoginTime(new Date());
userEntity.setSsex("1");
userEntity.setTheme("2");
userEntity.setAvatar("2");
userEntity.setDescription("3");
userDao.insert(userEntity);
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
public void updateUser(Long id) {
UserEntity userEntity = new UserEntity();
userEntity.setUserId(id);
userEntity.setEmail("[email protected]");
userDao.updateById(userEntity);
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
public void delAllUser(String[] ids) {
userDao.deleteBatchIds(Arrays.asList(ids));
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
public void deleteUser(Long id) {
userDao.deleteById(id);
}
@Override
public IPage getUserPage(Integer currentPage, Integer pageSize) {
IPage page = new Page<>(currentPage, pageSize);
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.orderByAsc("CRATE_TIME");
IPage userIPage = userDao.selectPage(page, wrapper);
System.out.println("总条数 ------> " + userIPage.getTotal());
System.out.println("当前页数 ------> " + userIPage.getCurrent());
System.out.println("当前每页显示数 ------> " + userIPage.getSize());
return userIPage;
}
}
6.启动类
@EnableTransactionManagement
@SpringBootApplication
@MapperScan("com.disp.dao")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
System.out.println("Success!!!");
}
}
踩到的坑:
调用自带方法报错Invalid bound statement
解决方案:
1.配置项与启动类都配置了@MapperScan("com.disp.dao")注解
3.检查是否指定了主键 实体类 主键id 加入 @TableId 注解
2.mybatis-plus的yml配置未生效 使用@Bean 注入
分页:
这两个一起注入 分页插件不会生效
要在MybatisSqlSessionFactoryBean中设置分页插件 要不然 分页出来的的total 与 page 都是0
以上就这么多 初次写文章 可能写的不是很仔细
贴上github地址:https://github.com/18614035671/mybatis-plus