目录
本笔记学习B站视频【尚硅谷】MyBatis零基础入门教程(细致全面,快速上手)_哔哩哔哩_bilibili
1.正向工程和逆向工程
正向工程:根据JAVA实体类,生成数据库表。Hiberate支持正向工程
逆向工程:根据数据库里的表,生成java实体类、mapper接口文件和映射文件
2.配置Mybatis-generator
(1)配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.atguigu.mybatis</groupId>
<artifactId>Mybatis_MBG</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式-->
<packaging>jar</packaging>
<!--依赖-->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
<!-- 控制maven在构建过程中用的的插件-->
<build>
<!-- 具体插件,逆向工程的操作是以构建过程中以插件形式完成的-->
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<!-- 插件的依赖-->
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 数据库连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
<!-- MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
(2)建立核心配置文件并配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置文件需要按顺序配置,顺序从前到后为properties?,settings?,typeAliases?,typeHandlers?,objectFactory?
,objectWrapperFactory?,reflectorFactory?,plugins?,environments?
,databaseIdProvider?,mappers?-->
<properties resource="jdbc.properties"/>
<typeAliases>
<typeAlias type="需修改" alias="需修改"></typeAlias>
<package name="需修改"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库的驱动、地址、用户名、密码-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--mappers:
作用:引入一些映射文件。带s-->
<mappers>
<!--引入一个映射文件-->
<!--<mapper resource="需修改"/>-->
<package name="需修改"/>
</mappers>
</configuration>
(3)创建逆向工程的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--
targetRuntime: 执行生成的逆向工程的版本
(版本1)MyBatis3Simple: 生成基本的CRUD(清新简洁版),只会生成五种函数
(版本2)MyBatis3: 生成带条件的CRUD(奢华尊享版)
-->
<context id="DB2Tables" targetRuntime="MyBatis3Simple">
<!-- 数据库的连接信息 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/clerk"
userId="root"
password="ruiyang1999">
</jdbcConnection>
<!-- javaBean的生成策略
targetPackage:生成的包名
targetProject:生成的位置
enableSubPackages:生成的是否是子包
trimStrings:去掉字符串前后的空格-->
<javaModelGenerator targetPackage="com.atguigu.mybatis.pojo" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- SQL映射文件的生成策略 -->
<sqlMapGenerator targetPackage="com.atguigu.mybatis.mapper"
targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- Mapper接口的生成策略 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.atguigu.mybatis.mapper" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 逆向分析的表 -->
<!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
<!-- domainObjectName属性指定生成出来的实体类的类名 -->
<table tableName="emp" domainObjectName="Emp"/>
<table tableName="dept" domainObjectName="Dept"/>
</context>
</generatorConfiguration>
(4)执行mybatis-generator插件,生成代码
注意:1.生成的是简洁版
2.想要打印info信息,log4j需要事先配置好
3.无论是简洁版还是完全版,自动生成的实体类中只有属性名和getter、setter方法,还需要根据情况,手动生成(有参|无参)构造函数和toString方法
简洁版mapper包含的方法:
3.生成完全版本
修改配置生成完全版
生成内容相较于简洁版在文件上,多了这几个名称带example的文件,这些文件是用来实现条件查询。
完全版生成的方法: 注意注释
package com.atguigu.mybatis.mapper;
import com.atguigu.mybatis.pojo.Emp;
import com.atguigu.mybatis.pojo.EmpExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface EmpMapper {
/*
带有example,可以理解为根据条件来进行操作.
可以通过example类生成各种条件拼接SQL
*/
int countByExample(EmpExample example);
int deleteByExample(EmpExample example);
//和简洁版一样
int deleteByPrimaryKey(Integer eid);
/*和简洁版一样
insert:会把record的全部属性值插入数据库,比如一个属性的值是null,
该方法会把null赋值给相应字段
insertSelective:只会将属性值不是空的属性赋值给相应字段
*/
int insert(Emp record);
int insertSelective(Emp record);
List<Emp> selectByExample(EmpExample example);
//和简洁版一样
Emp selectByPrimaryKey(Integer eid);
int updateByExampleSelective(@Param("record") Emp record, @Param("example") EmpExample example);
int updateByExample(@Param("record") Emp record, @Param("example") EmpExample example);
/*
updateByPrimaryKey:会把record的全部属性赋值给数据库中相应的字段,
如果属性值为null,该方法会把数据库中的对应字段置为null
updateByPrimaryKeySelective:如果一个属性的值为null,该方法不会修改数据库中对应的字段
*/
int updateByPrimaryKeySelective(Emp record);
int updateByPrimaryKey(Emp record);
}
4.完全版强大的查询功能
根据条件查询函数:selectByExample(EmpExample example)
当 example=null,无条件查询,即查询所有
当 example!=null,需要生成一个EmpExample对象,
使用该对象的createCriteria()方法拼接查询条件。
使用or方法拼接或者条件
注意:1. createCriteria方法和or方法后面点(.)接的方法的格式为
and+属性名+操作,例如andAgebetween()等,了解该规则可以帮助我们快速找到需要用的方法
2.同样适用于按条件删除deleteByExample、按条件修改updateByExample