MyBatis增强版:MyBatis-Plus

原创
2019/04/26 22:10
阅读数 169

简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。https://mp.baomidou.com/

配置步骤说明

  1. 创建数据库环境

建表语句

CREATE TABLE `tb_user` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
)
  1. 配置Mybaits-Plus(基于Spring实现)

(1)Mybatis-Plus并没有提供单独的jar包,而是通过Maven(或者gradle)来管理jar依赖。本教程需要使用Maven构建项目。

(2)Mybatis-Plus是基于Spring框架实现的,因此使用Mybatis-Plus,必须导入Spring相关依赖。

  1. 创建项目

  1. 添加依赖
	 <dependencies>
		<dependency>
			<groupId>com.baomidou</groupId>
	        <artifactId>mybatis-plus</artifactId>
	        <version>2.3</version>
		</dependency>
  		
  		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.16.RELEASE</version>
		</dependency>
  		
  		<!-- MySql -->
	    <dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.40</version>
		</dependency>
  		
  		<!-- 连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.9</version>
		</dependency>
  		
  		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.16.RELEASE</version>
		</dependency>
		
		<!-- 导入切面依赖包 -->
  		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>4.3.16.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.3.16.RELEASE</version>
			<scope>provided</scope>
		</dependency>
			
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>provided</scope>
		</dependency>
  </dependencies>
  1. 创建User实体类
package cn.mybatis.pojo;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;

@TableName(value = "tb_user")

public class User {

	@TableId(value = "id",type=IdType.AUTO)
	private Long id;
	
	@TableField(value = "name")
	private String name;
	
	@TableField(value = "age")
	private int age;
	
	@TableField(value = "email")
	private String email;
	

(补全set,get方法)

说明:使用Mybatis-Plus可以不使用xml文件,而是基于一组注解来解决实体类和数据库表的映射问题。

@TableName(value="tb_user") 指定对应的表,表名和类名一致时,可以省略value属性。
@TableId 指定表的主键。Value属性指定表的主键字段,和属性名一致时,可以省略。Type指定主键的增长策略。
@TableField 指定类的属性映射的表字段,名称一致时可以省略该注解。
  1. 创建UserMapper接口
package cn.mybatis.mp.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;

import cn.mybatis.mp.pojo.User;

public interface UserMapper extends BaseMapper<User>{

} 
说明:继承BaseMapper公共接口即可。
  1. Mybatis-Plus整合Spring

spring-data.xml配置

<context:component-scan base-package="cn.mybatis"/>

	<!--创建数据源  -->
	<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3306/mp"></property>
		<property name="username" value="root"></property>
		<property name="password" value="1234"></property>
	</bean>
	
	<!--  加载 sessin工厂-->
	<bean name="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean" >
		<!-- 指定数据源 -->
		<property name="dataSource" ref="dataSource"></property>
		<!--  指定映射类所在的pojo包-->
		<property name="typeAliasesPackage" value="cn.mybatis.pojo"></property>
		
		<!--配置mp相关插件  -->
		<property name="plugins">
			<list>
			<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"></bean>
				
			<bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
			<!-- 配置sql响应时间,开发阶段方便做调优 -->
			<property name="maxTime" value="1000"/>
							
			<!-- 输出sql语句 -->
			<property name="format" value="true"/>	
				</bean>
			</list>
		</property>
	</bean>
	<!--  动态代理-->
	
	<!-- 3、配置Mybatis动态代理 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 加载session工厂 -->
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
		
		<!-- 指定mapper接口 -->
		<property name="basePackage" value="cn.mybatis.mapper"></property>
	</bean>
	
	<!-- 4、配置事务代理 -->
	<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<!-- 配置mybatis-plus全局属性 -->
	<!-- 定义 MybatisPlus 的全局策略配置-->
    <bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <property name="dbColumnUnderline" value="true"></property>
        <!-- 全局的主键策略 -->
        <!-- 
            AUTO->`0`("数据库ID自增")
             INPUT->`1`(用户输入ID")
            ID_WORKER->`2`("全局唯一ID")
            UUID->`3`("全局唯一ID")
        -->
        <property name="idType" value="0"></property>
        <!-- 全局的表前缀策略配置 -->
        <property name="tablePrefix" value="tb_"></property>
    </bean>
	
	<!-- 5、开启注解式事务-->
	<tx:annotation-driven/>
  1. 测试代码
package cn.mybatis.mp.test;

import java.util.List;

import org.apache.ibatis.session.RowBounds;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.baomidou.mybatisplus.mapper.EntityWrapper;

import cn.mybatis.mp.mapper.UserMapper;
import cn.mybatis.mp.pojo.User;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-data.xml"})
@ComponentScan(basePackages={"cn.mybatis.mp"})
public class UserMapperTEST {

	@Autowired
	private UserMapper userMapper;
	
	//插入一条记录
	@Test
	public void insert(){
		User user = new User();
		user.setAge(18);
		user.setEmail("zhangsan@163.com");
		user.setName("张三");
		
		userMapper.insert(user);
	}
	
	//根据id查询
	@Test
	public void selectById(){
		User user = userMapper.selectById(1);
		
		System.out.println("用户id:"+user.getId()+",用户姓名:"+user.getName()+",用户邮箱:"+user.getEmail());
	}
	
	//根据用户名查找
	@Test
	public void selectByName(){
		
		EntityWrapper<User> wrapper = new EntityWrapper<>();
		wrapper.eq("name", "张三");
		
		List<User> users = userMapper.selectList(wrapper);
		
		for (User user : users) {
			System.out.println("用户id:"+user.getId()+",用户姓名:"+user.getName()+",用户邮箱:"+user.getEmail());
		}
	}
	
	//查询用户列表
	@Test
	public void selectAll(){
		List<User> users = userMapper.selectList(null);
		for (User user : users) {
			System.out.println("用户id:"+user.getId()+",用户姓名:"+user.getName()+",用户邮箱:"+user.getEmail());
		}
	}
	
	//分页查询,第2页,每页3条
	@Test
	public void selectAndPage(){
		
		RowBounds rowBounds = new RowBounds((2-1)*3, 3);
		
		List<User> users = userMapper.selectPage(rowBounds, null);
		
		for (User user : users) {
			System.out.println("用户id:"+user.getId()+",用户姓名:"+user.getName()+",用户邮箱:"+user.getEmail());
		}
	}
	
	//模糊查询 
	@Test
	public void selectByLike(){
		
		EntityWrapper<User> wrapper = new EntityWrapper<>();
		wrapper.like("name", "%张%");
		
		List<User> users = userMapper.selectList(wrapper);
		for (User user : users) {
			
			System.out.println("用户id:"+user.getId()+",用户姓名:"+user.getName()+",用户邮箱:"+user.getEmail());
		}
	}
}
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部