MyBatisPlus条件构造器 AR 代码生成器 插件 自定义全局 公共字段填充

官方地址:https://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A7

1、框架简介

(1)MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
(2)支持任何能使用 mybatis 进行 crud, 并且支持标准 sql 的数据库
(3)框架结构
MyBatisPlus条件构造器 AR 代码生成器 插件 自定义全局 公共字段填充_第1张图片

2、集成MP

2.1 MP安装
通过Maven安装(官网给的安装都是集成springboot里面的了),但是尚硅谷教程里面这节的mybatisPlus还是单独和spring来一起的,反正最后也是用springboot,就不记录过时的上来了。

https://mp.baomidou.com/guide/install.html#release
2.2 创建测试表

创建库
CREATE DATABASE mp;
-- 使用库
USE mp;
-- 创建表
CREATE TABLE tbl_employee(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(50),
email VARCHAR(50),
gender CHAR(1),
age int
);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom','[email protected]',1,22);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Jerry','[email protected]',0,25);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Black','[email protected]',1,30);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('White','[email protected]',0,35);

MyBatisPlus条件构造器 AR 代码生成器 插件 自定义全局 公共字段填充_第2张图片
2.3 根据该数据表,在java中创建好对应的实体类

特别说明:定义javabean中的实体类最好使用包装类,虽然现在已经可以有自动包装,和自动拆箱。但是如果使用基本数据类型,基本数据类型都有默认值,int的默认值为0,boolean默认值为false,主要是由于mysql有非空判定,默认值会让mysql判断不准确。所以最好用包装类

@TableName
官网:https://mp.baomidou.com/guide/annotation.html#tablename

javabean代码

package com.atguigu.mp.beans;
/*
 * MybatisPlus会默认使用实体类的类名到数据中找对应的表. 
 */
//@TableName(value="tbl_employee")
public class Employee {
   
	/*
	 * @TableId:
	 * 	 value: 指定表中的主键列的列名, 如果实体属性名与列名一致,可以省略不指定. 
	 *   type: 指定主键策略. 
	 */
	//@TableId(value="id" , type =IdType.AUTO)
	private Integer id ;   //  int 
	
	@TableField(value = "last_name")
	private String  lastName; 
	private String  email ;
	private Integer gender; 
	private Integer age ;
	
	@TableField(exist=false)
	private Double salary ; 
	//get、set、toString等等

2.4 在项目中加入项目所需的各类配置文件
2.4.1 加入mybatis的全局配置文件mybatis-config.xml

项目/src/main/resources/mybatis-config.xml(有这个文件就行了,啥都不用写,配置交给spring做)



<configuration>
	
configuration>

2.4.2 加入log4j.xml配置文件(日志框架多了,也不是一定要用这个写日志)
项目/src/main/resources/log4j.xml
具体配置方法见https://blog.csdn.net/chengqingshihuishui/article/details/112733634
或者看官网https://my.oschina.net/xianggao/blog/523401

2.4.3加入db.propertis连接配置信息
项目/src/main/resources/db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mp
jdbc.username=root
jdbc.password=1234

2.4.5 加入spring的配置文件 applicationContext.xml
项目/src/main/applicationContext.xml
以下是mp01项目的完整版配置文件
(1)集成MybatisPlus
Mybatis-Plus 的集成非常简单,对于Spring,我们仅需要把 Mybatis 自带的MybatisSqlSessionFactoryBean替换为替换为MP自带的即可。见代码(id=“sqlSessionFactoryBean”)


	<context:property-placeholder location="classpath:db.properties"/>
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driver}">property>
		<property name="jdbcUrl" value="${jdbc.url}">property>
		<property name="user" value="${jdbc.username}">property>
		<property name="password" value="${jdbc.password}">property>
	bean>
	
	<bean id="dataSourceTransactionManager" 
	class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource">property>
	bean>
	
	<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
	
	<bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
		
		<property name="dataSource" ref="dataSource">property>
		<property name="configLocation" value="classpath:mybatis-config.xml">property>
		
		<property name="typeAliasesPackage" value="com.atguigu.mp.beans">property>		
		
		<property name="globalConfig" ref="globalConfiguration">property>
	bean>
	
	
		
		<property name="dbColumnUnderline" value="true">property>
		
		<property name="idType" value="0">property>
		
		<property name="tablePrefix" value="tbl_">property>
	bean>
	
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.atguigu.mp.mapper">property>
	bean>	
beans>

2.5 测试Spring-Mybatis的环境,保证ok

package com.atguigu.mp.test;

public class TestMP {
   
	private ApplicationContext ioc = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
    @Test
	public void testDataSource() throws Exception {
   
		DataSource ds  = ioc.getBean("dataSource",DataSource.class);
		System.out.println(ds);
		Connection conn = ds.getConnection();
		System.out.println(conn);
	}
}

3、入门CRUD

3.1 通用CRUD
(1)提出问题:
假设我们已存在一张tbl_employee表,且已有对应的实体类表,Employee,实现tbl_employee表的CRUD操作我们需要做什么呢?
(2)实现方式:
基于Mybatis:
需要编写EmployeeMapper接口,并手动编写CRUD方法提供 EmployeeMapper.xml映射文件,并手动编写每个方法对应的SQL语句。
基于MP:
只需要创建EmployeeMapper接口 , 并继承BaseMapper接口,这就是使用MP需要完成的所有操作,甚至不创建SQL映射文件。
**说明:**继承好该接口就ok,如果只用提供的sql语句,啥都不用写。

package com.atguigu.mp.mapper;
/**
 * Mapper接口
 * 基于Mybatis:在Mapper接口中编写CRUD相关的方法,提供Mapper接口所对应的SQL映射文件 以及 方法对应的SQL语句. 
 * 
 * 基于MP:  让XxxMapper接口继承 BaseMapper接口即可.
 * 		   BaseMapper : 泛型指定的就是当前Mapper接口所操作的实体类类型 
 * 
 */
public interface EmployeeMapper extends BaseMapper<Employee> {
   
    //   Integer  insertEmployee(Employee employee );
	//    SQL...
}

3.2 插入操作(结合前面的实体类代码)

package com.atguigu.mp.test;
public class TestMP {
   
	private ApplicationContext ioc = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
	private EmployeeMapper employeeMapper = 
			ioc.getBean("employeeMapper",EmployeeMapper.class);
	/**
	 * 通用 插入操作
	 */
	@Test
	public void testCommonInsert() {
   
		//初始化Employee对象
		Employee employee  = new Employee();
		employee.setLastName("MP");
		employee.setEmail("[email protected]");
		//employee.setGender(1);
		//employee.setAge(22);
		employee.setSalary(20000.0);
		//插入到数据库   
		// insert方法在插入时,会根据实体类的每个属性进行非空判断,只有非空的属性对应的字段才会出现到SQL语句中
		//Integer result = employeeMapper.insert(employee);  
		//insertAllColumn方法在插入时,不管属性是否非空,属性所对应的字段都会出现到SQL语句中. 
		Integer result = employeeMapper.insertAllColumn(employee);
		System.out.println("result: " + result );
		//获取当前数据在数据库中的主键值
		Integer key = employee.getId();
		System.out.println("key:" + key );
	}
}

说明:
insert方法在插入时,会根据实体类的每个属性进行非空判断,只有非空的属性对应的字段才会出现到SQL语句中:
Integer result = employeeMapper.insert(employee);
Integer result = employeeMapper.insertAllColumn(employee);方法在插入时,不管属性是否非空,属性所对应的字段都会出现到SQL语句中.

3.3 关于更新操作

package com.atguigu.mp.test;
public class TestMP {
   
	private ApplicationContext ioc = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
	private EmployeeMapper employeeMapper = 
			ioc.getBean("employeeMapper",EmployeeMapper.class);
    /**
	 * 通用 更新操作
	 */
	@Test
	public void testCommonUpdate() {
   
		//初始化修改对象
		Employee employee = new Employee();
		employee.setId(7);
		employee.setLastName("小泽老师");
		employee.setEmail("[email protected]");
		employee.setGender(0);
		//employee.setAge(33);
		
		//Integer result = employeeMapper.updateById(employee);
		Integer result = employeeMapper.updateAllColumnById(employee);
		System.out.println("result: " + result );
	}
}

3.4 查询操作

package com.atguigu.mp.test;
public class TestMP {
   
	private ApplicationContext ioc = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
	private EmployeeMapper employeeMapper = 
			ioc.getBean("employeeMapper",EmployeeMapper.class);
    /**
	 * 通用 查询操作
	 */
	@Test
	public

你可能感兴趣的:(mybatis)