Mybatis-plus的使用
https://mp.baomidou.com/guide/quick-start.html
导入依赖
<!--mybatis-plus依赖包,包括了mybatis和mybatis-spring集成包-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.2</version>
</dependency>
修改配置文件applicationContext.xml
<!--spring管理mybatis-plus,创建会话工厂,跟mybatis-plus相关的配置都被MybatisSqlSessionFactoryBean集中管理-->
<bean id="sessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
!--mybatis-plus配置信息由MybatisConfiguration装配-->
<bean class="com.baomidou.mybatisplus.core.MybatisConfiguration">
只对于单表操作
Mapper接口可以继承BaseMapper接口,里面就不用写增删改查方法里面是实体类对象
public interface UserMapper extends BaseMapper<User> {}
Service接口继承IService接口,里面也不用写任何代码
public interface UserService extends IService<User> {}
Service的实现类UserServiceImpl继承ServiceImpl<UserMapper,User>,并且实现UserService接口就可以,也不用写增删改查代码
@Service
@Transactional
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
@Autowired
private UserMapper userMapper;
}
测试:
加载配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = context.getBean(UserService.class);
查询编号为150的用户:
User user = userService.getById(150);
System.out.println(user);
删除编号为111的用户:
userService.removeById(111);
分页查询(没条件的):
PageHelper.startPage(1,10);
List<User> list = userService.list();
list.forEach(user -> System.out.println(user));
分页查询(有条件的):
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("sex",1);
queryWrapper.eq("age",20);
PageHelper.startPage(1,10);
List<User> list = userService.list(queryWrapper);
list.forEach(user -> System.out.println(user));
上面这种方法中的sex,age是表的字段名,硬编码,写死了字段名,耦合性强
下面这种方法是操作类属性,更面向对象编程,耦合性低,推荐使用
LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(User::getAge,20);
queryWrapper.eq(User::getSex,1)
.like(User::getUsername,"111");
PageHelper.startPage(1,10);
List<User> list = userService.list(queryWrapper);
list.forEach(user -> System.out.println(user));
//QueryWrapper转LambdaQueryWrapper
// LambdaQueryWrapper<User> lambda = queryWrapper.lambda();
代码生成器
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
导入依赖
!--代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!--代码生成的模板-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
https://mp.baomidou.com/guide/generator.html#%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B
从这把这个类CodeGenerator 里边的代码复制过来
在//全局配置这里
gc.setAuthor("x");//这个是生成作者名字
gc.setDateType(DateType.ONLY_DATE);
gc.setEnableCache(true);//开启二级缓存
gc.setFileOverride(true);//替换原有文件(修改之后再次执行会替换之前生成过的)
// 数据源配置
记得改driver和数据库密码
// 包配置
pc.setParent("com.entor");
// 策略配置
没有父类,注释代码
// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
// strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
// strategy.setSuperEntityColumns("id");
/ strategy.setTablePrefix(pc.getModuleName() + "_");
这句是以下划线分隔开表名,比如输入的是sys_user,会从下划线后面截断,以user为类名创建实体类,但是我们直接输入的是表名user,没有下划线,所以也注释
最后把配置文件去掉,写配置类
就按照配置文件顺序写就可以,只要是改两个类,和配置文件对应上
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
MybatisConfiguration configuration=new MybatisConfiguration();
说明:
Mbp_0402是没有用代码生成器,里面的包都是我们自己写的
Mybatisplus_0402里面的entor底下的controller、entity、mapper、service、和resources底下的mapper是用了代码生成器生成的,不是自己写的