MyBatis Plus 介绍
MyBatis Plus (简称 MP) 是国内人员开发的 MyBatis 增强工具, 在 MyBatis 的基础上只做增强不做改变, 为简化开发, 提高效率而生.
特征
无侵入: Mybatis-Plus 在 Mybatis 的基础上进行扩展, 只做增强不做改变, 引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响, 而且 MP 支持所有 Mybatis 原生的特性
依赖少: 仅仅依赖 Mybatis 以及 Mybatis-Spring
损耗小: 启动即会自动注入基本 CURD, 性能基本无损耗, 直接面向对象操作
预防 Sql 注入: 内置 Sql 注入剥离器, 有效预防 Sql 注入攻击
通用 CRUD 操作: 内置通用 Mapper, 通用 Service, 仅仅通过少量配置即可实现单表大部分 CRUD 操作, 更有强大的条件构造器, 满足各类使用需求
多种主键策略: 支持多达 4 种主键策略 (内含分布式唯一 ID 生成器), 可自由配置, 完美解决主键问题
框架结构
Mybatis Plus 使用
1. 导入依赖
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus</artifactId>
- <version>2.0.1</version>
- </dependency>
2.MP 整合的配置
- <!-- 0. 连接池属性设置读取指定的 properties 文件 -->
- <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true"/>
- <!-- 1. 将连接池放入 spring 容器 -->
- <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
- <property name="jdbcUrl" value="${jdbc.url}"></property>
- <property name="driverClass" value="${jdbc.driver}"></property>
- <property name="user" value="${jdbc.username}"></property>
- <property name="password" value="${jdbc.password}"></property>
- </bean>
- <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource"/>
- <!-- 配置实体扫描路径, 多个 package 可以用分号; 逗号, 分隔, 支持通配符 *-->
- <!-- com.a.b.entity;com.a.c.entity;com.d.*.entity-->
- <property name="typeAliasesPackage" value="cn.xm.jwxt.bean.*"/>
- <property name="configuration" ref="mybatisConfig"/>
- <!-- MP 全局配置注入 -->
- <property name="globalConfig" ref="globalConfig"/>
- <property name="plugins">
- <array>
- <!-- 分页插件配置 -->
- <bean id="paginationInterceptor"
- class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"/>
- <!-- 性能拦截器, 兼打印 sql, 不建议生产环境配置 -->
- <bean id="performanceInterceptor"
- class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor"/>
- </array>
- </property>
- </bean>
- <bean id="mybatisConfig" class="com.baomidou.mybatisplus.MybatisConfiguration">
- <property name="mapUnderscoreToCamelCase" value="true"/>
- </bean>
- <!-- 定义 MP 全局策略 -->
- <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
- <property name="idType" value="2"/>
- <property name="dbType" value="mysql"/>
- <!-- 全局表为下划线命名设置 true -->
- <property name="dbColumnUnderline" value="true"/>
- </bean>
- <!-- 配置 mybatis 扫描 mapper 接口的路径, 相当于注解 @MapperScan,@MapperScan("com.baomidou.mybatisplus.test.h2.entity.mapper")-->
- <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="cn.xm.jwxt.mapper"/>
- </bean>
3. 实体
- @TableName(value="employee")
- public class Employee {
- private Integer id ;
- private String lastName;
- private String email ;
- private Integer gender;
- private Integer age ;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getLastName() {
- return lastName;
- }
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public Integer getGender() {
- return gender;
- }
- public void setGender(Integer gender) {
- this.gender = gender;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- @Override
- public String toString() {
- return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + ", age="
- + age + "]";
- }
- }
4.mapper 接口
public interface EmployeeMapper extends BaseMapper<Employee> {}
5. 新增
- @Test
- public void testCommonInsert() {
- // 初始化 Employee 对象
- Employee employee = new Employee();
- employee.setLastName("MP");
- employee.setEmail("mp@atguigu.com");
- employee.setGender(1);
- //insert 方法在插入时, 会根据实体类的每个属性进行非空判断, 只有非空的属性对应的字段才会出现到 SQL 语句中
- Integer result = employeeMapper.insert(employee);
- System.out.println("result:" + result );
- //insertAllColumn 方法在插入时, 不管属性是否非空, 属性所对应的字段都会出现到 SQL 语句中.
- Integer result1 = employeeMapper.insertAllColumn(employee);
- System.out.println("result:" + result1 );
- // 获取当前数据在数据库中的主键值
- Integer key = employee.getId();
- System.out.println("key:" + key );
- }
6. 修改
- @Test
- public void testCommonUpdate() {
- // 初始化修改对象
- Employee employee = new Employee();
- employee.setId(7);
- employee.setLastName("王五");
- employee.setEmail("xz@sina.com");
- employee.setGender(0);
- //updateById 方法在修改时, 会根据实体类的每个属性进行非空判断, 只有非空的属性对应的字段才会出现到 SQL 语句中
- Integer result = employeeMapper.updateById(employee);
- System.out.println("result:" + result );
- //updateAllColumnById 方法在修改时, 不管属性是否非空, 属性所对应的字段都会出现到 SQL 语句中.
- Integer result1 = employeeMapper.updateAllColumnById(employee);
- System.out.println("result:" + result1 );
- }
7. 查询
- @Test
- public void testCommonSelect() {
- //1. 通过 id 查询
- Employee employee = employeeMapper.selectById(7);
- System.out.println(employee);
- //2. 通过多个列进行查询. selectOne 查询结果只能是一条, 否则报错
- Employee employee1 = new Employee();
- employee.setLastName("王五");
- employee.setGender(0);
- Employee result = employeeMapper.selectOne(employee1);
- System.out.println("result:" +result );
- //3. 通过多个 id 进行查询
- List<Integer> idList = new ArrayList<>();
- idList.add(4);
- idList.add(5);
- idList.add(6);
- idList.add(7);
- List<Employee> emps = employeeMapper.selectBatchIds(idList);
- System.out.println(emps);
- //4. 通过 Map 封装条件查询. map 中的 key 是数据库中字段名
- Map<String,Object> columnMap = new HashMap<>();
- columnMap.put("last_name", "Tom");
- columnMap.put("gender", 1);
- List<Employee> emps1 = employeeMapper.selectByMap(columnMap);
- System.out.println(emps1);
- //5. 分页查询
- List<Employee> emps2 = employeeMapper.selectPage(new Page<>(3, 2), null);
- System.out.println(emps2);
- }
8. 删除
- @Test
- public void testCommonDelete() {
- //1 . 根据 id 进行删除
- Integer result = employeeMapper.deleteById(13);
- System.out.println("result:" + result );
- //2. 根据条件进行删除
- Map<String,Object> columnMap = new HashMap<>();
- columnMap.put("last_name", "MP");
- columnMap.put("email", "mp@atguigu.com");
- Integer result1 = employeeMapper.deleteByMap(columnMap);
- System.out.println("result:" + result1 );
- //3. 批量删除
- List<Integer> idList = new ArrayList<>();
- idList.add(3);
- idList.add(4);
- idList.add(5);
- Integer result2 = employeeMapper.deleteBatchIds(idList);
- System.out.println("result:" + result2 );
- }
来源: https://www.cnblogs.com/dzlj/p/12229888.html