mybatis逆向工程

        由于现在互联网蓬勃发展,为了求快,持久层使用的框架已经从Hibernate转化为mybatis,不过笔者从使用两者之后的感觉明显就是Hibernate高大上,但是学习起来门槛比较高;而mybatis则学起来难度较低,而且在开发过程中使用mybatis可以提升开发效率。现在笔者也从Hibernate往mybatis转移,但是后续还是会离不开Hibernate,尤其是业务开始使用springboot的时候,配合使用的JPA则就是基于Hibernate的。本文则主要讲述mybatis使用过程中一个可以提升效率的方法---mybatis逆向工程,通过插件来实现数据库的链接并将指定数据表映射成JavaBean类,并自动生成mybatis基于该数据表的操作--mapper类以及mapper.xml文件。

1.数据库中建立相关表

        首先建立数据库mydata,然后在该库中建立一个employees表,命令如下:

create database mydata;
use mydata;
DROP TABLE IF EXISTS EMPLOYEES;
CREATE TABLE EMPLOYEES(EMPLOYEE_ID INTEGER(12),
			DEPT_ID INTEGER,
            EMPLOYEE_NAME VARCHAR(32),
            EMPLOYEE_NAME_SALARY INTEGER,
            primary key(EMPLOYEE_ID));

2.generatorConfig.xml文件

        该文件用于实现对数据表的具体处理,包括映射什么表,以及需要实现什么默认方法等。

<?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>
    <properties resource="config.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>


        <!--支持序列化-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.user}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="${targetXMLPackage}" targetProject="${targetResourcesProject}">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}" type="XMLMAPPER">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        

        <!--指定某些表参与逆向工程,并且指定哪些方法暴露出来-->
        <table tableName="employees"
        enableCountByExample="false"
        enableUpdateByExample="false"
        enableDeleteByExample="false"
        enableSelectByExample="false"
        selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

3. config.properties文件

        该文件则是对一些generatorConfig.xml文件中涉及的属性的说明,包括一些数据库的连接池、登录账户密码等。

# 数据库配置
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mydata?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
jdbc.user=root
jdbc.password=root

# 通用Mapper固定配置
mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin
mapper.Mapper=tk.mybatis.mapper.common.Mapper
mapper.forceAnnotation=true

# 生成文件保存位置
targetModelPackage=com.carson.mybatis_generate.entity
targetXMLPackage=com.carson.mybatis_generate.mapper
targetMapperPackage=com.carson.mybatis_generate.mapper
targetJavaProject=src/main/java
targetResourcesProject=src/main/java

4.pom文件

        要实现逆向工程,则需要一些插件和相关依赖,mysql-connector-java用于连接数据库,mybatis-generator-core用于逆向工程生成文件。同时需要引入mybatis依赖包。

<?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.carson</groupId>
  <artifactId>mybatis_generate</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <!--  依赖版本  -->
    <mapper.version>3.3.9</mapper.version>
    <mysql.version>8.0.16</mysql.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>
    <dependency>
      <groupId>tk.mybatis</groupId>
      <artifactId>mapper</artifactId>
      <version>${mapper.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
    <dependency>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-core</artifactId>
      <version>1.3.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ibatis</groupId>
      <artifactId>ibatis-core</artifactId>
      <version>3.0</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.5</version>
        <configuration>
          <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
          <overwrite>true</overwrite>
          <verbose>true</verbose>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
          </dependency>
          <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>${mapper.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>

</project>

5.生成文件

点击上述选中的即可生成相应的文件,如下所示:

其中Employees.java:

import java.io.Serializable;

public class Employees implements Serializable {
    private Integer employeeId;

    private Integer deptId;

    private String employeeName;

    private Integer employeeNameSalary;

    private static final long serialVersionUID = 1L;

    public Integer getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(Integer employeeId) {
        this.employeeId = employeeId;
    }

    public Integer getDeptId() {
        return deptId;
    }

    public void setDeptId(Integer deptId) {
        this.deptId = deptId;
    }

    public String getEmployeeName() {
        return employeeName;
    }

    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName == null ? null : employeeName.trim();
    }

    public Integer getEmployeeNameSalary() {
        return employeeNameSalary;
    }

    public void setEmployeeNameSalary(Integer employeeNameSalary) {
        this.employeeNameSalary = employeeNameSalary;
    }

EmployeesMapper.java:

import com.carson.mybatis_generate.entity.Employees;

public interface EmployeesMapper {


    int deleteByPrimaryKey(Integer employeeId);

    int insert(Employees record);

    int insertSelective(Employees record);

    Employees selectByPrimaryKey(Integer employeeId);

    int updateByPrimaryKeySelective(Employees record);

    int updateByPrimaryKey(Employees record);
}

Employees.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.carson.mybatis_generate.mapper.EmployeesMapper">
  <resultMap id="BaseResultMap" type="com.carson.mybatis_generate.entity.Employees">
    <id column="EMPLOYEE_ID" jdbcType="INTEGER" property="employeeId" />
    <result column="DEPT_ID" jdbcType="INTEGER" property="deptId" />
    <result column="EMPLOYEE_NAME" jdbcType="VARCHAR" property="employeeName" />
    <result column="EMPLOYEE_NAME_SALARY" jdbcType="INTEGER" property="employeeNameSalary" />
  </resultMap>
  <sql id="Base_Column_List">
    EMPLOYEE_ID, DEPT_ID, EMPLOYEE_NAME, EMPLOYEE_NAME_SALARY
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from employees
    where EMPLOYEE_ID = #{employeeId,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from employees
    where EMPLOYEE_ID = #{employeeId,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.carson.mybatis_generate.entity.Employees">
    insert into employees (EMPLOYEE_ID, DEPT_ID, EMPLOYEE_NAME, 
      EMPLOYEE_NAME_SALARY)
    values (#{employeeId,jdbcType=INTEGER}, #{deptId,jdbcType=INTEGER}, #{employeeName,jdbcType=VARCHAR}, 
      #{employeeNameSalary,jdbcType=INTEGER})
  </insert>
  <insert id="insertSelective" parameterType="com.carson.mybatis_generate.entity.Employees">
    insert into employees
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="employeeId != null">
        EMPLOYEE_ID,
      </if>
      <if test="deptId != null">
        DEPT_ID,
      </if>
      <if test="employeeName != null">
        EMPLOYEE_NAME,
      </if>
      <if test="employeeNameSalary != null">
        EMPLOYEE_NAME_SALARY,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="employeeId != null">
        #{employeeId,jdbcType=INTEGER},
      </if>
      <if test="deptId != null">
        #{deptId,jdbcType=INTEGER},
      </if>
      <if test="employeeName != null">
        #{employeeName,jdbcType=VARCHAR},
      </if>
      <if test="employeeNameSalary != null">
        #{employeeNameSalary,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.carson.mybatis_generate.entity.Employees">
    update employees
    <set>
      <if test="deptId != null">
        DEPT_ID = #{deptId,jdbcType=INTEGER},
      </if>
      <if test="employeeName != null">
        EMPLOYEE_NAME = #{employeeName,jdbcType=VARCHAR},
      </if>
      <if test="employeeNameSalary != null">
        EMPLOYEE_NAME_SALARY = #{employeeNameSalary,jdbcType=INTEGER},
      </if>
    </set>
    where EMPLOYEE_ID = #{employeeId,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.carson.mybatis_generate.entity.Employees">
    update employees
    set DEPT_ID = #{deptId,jdbcType=INTEGER},
      EMPLOYEE_NAME = #{employeeName,jdbcType=VARCHAR},
      EMPLOYEE_NAME_SALARY = #{employeeNameSalary,jdbcType=INTEGER}
    where EMPLOYEE_ID = #{employeeId,jdbcType=INTEGER}
  </update>
</mapper>

6.常见的报错

1.mybatis-generator-maven-plugin:1.3.5:generate (default-cli) on project mybatis_generate: Communications link failure

是因为没有连上数据库。

2.数据库显示:Could not connect, server may not be running. Can't connect to...

这说明mysql服务未启动,需要启动服务。

3.出现mysql服务一直无法启动的情况

上图所示操作相当于进行初始化,然后进入workbench进行修改密码,old password,则可以在mysql安装目录下的data中.err结尾的文件中寻找,然后更换成新的密码。然后需要重新建立需要的库以及表。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值