Mybatis框架(三)逆向工程的使用

1.导入依赖和maven插件

在工程中找到maven的配置文件pom.xml,在pulgins节点中增加如下内容,即增加maven中对mybatis-generator的插件支持

mybatis-generator-core
mybatis-generator-maven-plugin
<?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>org.example</groupId>
    <artifactId>MybatisGenerator</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>

        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>

        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
        </dependency>

    </dependencies>
    <build>
        <resources>
            <!-- resources文件 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
            </plugin>
        </plugins>
    </build>
</project>

 2.Mybatis配置文件 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&amp;serverTimezone=UTC&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper class ="com.lyq.mapper.UserMapper"/>
    </mappers>
</configuration>

 

3.逆向工程配置文件 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>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <classPathEntry location="C:\Users\ASUS\.m2\repository\mysql\mysql-connector-java\5.1.32\mysql-connector-java-5.1.32.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password="123456">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.lyq.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="com.lyq.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成Mapper的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.lyq.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="user"></table>

    </context>
</generatorConfiguration>

 

3.对应的表结构

建表语句参考 【Mybatis框架入门

4.对应的实体类UserVo

package com.lyq.entity;

import com.lyq.model.User;

public class UserVo {
    private int id;
    private String name;
    private String pwd;

    /**
     * 存储于数据库中的model(实体类)为持久层对象:Po;
     * 从前台传入的实体类对象为:Vo;
     * 对Vo存入数据库model中的过程,我们首先要将Vo转为Po(调用initDbValue()),然后再进行数据库存储;
     * Vo与Po的存在有利于解耦与理解,Vo用于传输实体类信息,可以显示数据库中表中不存在的字段;
     * UserVo为前台传入的实体类对象,userVo.initDbValue()之后:Vo转为Po;
     */
    //① Vo转Po,当数据库中无对应Po时,new出一个Po
    public User initDbValue(){
        User userPo = new User();
        return initDbValue(userPo);
    }

    //② userVo.initDbValue()之后,userVo的值会set进Po(User)中,我们得到的就是一个和数据库完全对应的model
    public User initDbValue(User user){
        if (user!=null){
            user.setId(this.getId());
            user.setName(this.getName());
            user.setPwd(this.getPwd());
        }
        return user;
    }
    
    public UserVo(){

    }

  //Po转Vo
  //Vo与Po的互转:Po->Vo,将数据库的记录转为对应的实体类Vo用于前台展示,可在Vo类中创建构造方法
  //Vo->Po,将前台的实体类转为数据库对应的Po用于持久化,可在Po类中创建构造方法(Po为逆向工程生成,不建议在Po类中改动),此外还可以在Vo类中创建initDbValue方法,通过vo.initDbValue方法完成Vo->Po
  public UserVo (User user) {
    this.setId(user.getId());
    this.setName(user.getName());
    this.setPwd(user.getPwd());
  }  
public UserVo(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }

 

5.项目结构

  (mapper和model包是逆向工程自动生成的)

6.测试类

  运行test,查看数据库,新增操作成功

import com.lyq.entity.UserVo;
import com.lyq.mapper.UserMapper;
import com.lyq.model.User;
import org.junit.Before;
import org.junit.Test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;

public class Mytest {
    private SqlSessionFactory sqlSessionFactory = null;

    @Before

    public void init() throws Exception {

        // 1. 创建SqlSessionFactoryBuilder对象

        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

        // 2. 加载SqlMapConfig.xml配置文件

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

        // 3. 创建SqlSessionFactory对象

        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

    }

    @Test

    public void test() throws Exception {
        // 4. 创建SqlSession对象
        //openSession():若括号里为true,则设置为事务自动提交。若不填则默认手动提交,将自动提交设置成false,然后调用sqlSession.commit()方法。
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //5.创建mapper,调用mapper里的方法
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        
        //创建一个实体类Vo并增加其属性
        UserVo userVo = new UserVo();
        userVo.setId(6);
        userVo.setName("张三");
        userVo.setPwd("123456");
        
        //新增一个数据库model对象Po
        User user = new User();
        //调用UserVo里的initDbValue方法,将Vo转为Po
        user = userVo.initDbValue();
        //新增操作
        userMapper.insertSelective(user);

        // 7. 释放资源
        sqlSession.close();

    }

}

 

posted @ 2020-09-14 01:13  JacksonLiyq  阅读(316)  评论(0编辑  收藏  举报