Bootstrap

IDEA+Maven的mybatis逆向工程的建立(插件+java代码)

一、导入需要的依赖坐标

<?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.smday</groupId>
    <artifactId>mybatis_generator</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

二、建立相应的目录结构

在这里插入图片描述

三、编写mbg的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="E:\Java\maven_repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar" />

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- jdbcConnection:指定如何连接到目标数据库 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/spring"
                        userId="root"
                        password="123456">
        </jdbcConnection>
        <javaTypeResolver >
            <!--Java类型解析器不应该强制使用BigDecimal字段-->
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!--
            javaModelGenerator:指定javaBean的生成策略
            targetPackage="com.smday.domain":目标包名
            targetProject="src\main\java":目标工程
        -->
        <javaModelGenerator targetPackage="com.smday.domain" targetProject="src\main\java">
            <!--Java模型生成器应使用子包-->
            <property name="enableSubPackages" value="true" />
            <!--Java模型生成器还应修剪字符串,修剪数据库字符列末尾返回的空白字符-->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- sqlMapGenerator:sql映射生成策略: -->
        <sqlMapGenerator targetPackage="com.smday.dao"  targetProject="src\main\resources">
            <!--SQL Map生成器应使用子包-->
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- javaClientGenerator:指定mapper接口所在的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.smday.dao"  targetProject="src\main\java" >
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 指定要逆向分析哪些表:根据表要创建javaBean -->
        <table schema="DB2ADMIN" tableName="user" domainObjectName="User" >

            <!--如果设置为false或者不指定,MBD将会允许驼峰命名的方式定义列名-->
            <!--<property name="useActualColumnNames" value="false"/>-->
            <!--column代表主键列,数据库类型是DB2。这将导致MBG在生成的<insert>语句中生成适当的<selectKey>元素,以便可以返回新生成的键(使用DB2特定的SQL)。-->
            <!--<generatedKey column="ID" sqlStatement="" identity="true" />-->
            <!--列DATE_FIELD将映射到名为startDate的属性。这将覆盖默认属性(在本例中为DATE_FIELD),如果将useActualColumnNames属性设置为false,则覆盖dateField。-->
            <!--<columnOverride column="DATE_FIELD" property="startDate" />-->
            <!--FRED列将被忽略。没有SQL会列出字段,也不会生成Java属性。-->
            <!--<ignoreColumn column="FRED" />-->
            <!--无论实际数据类型如何,列LONG_VARCHAR_FIELD都将被视为VARCHAR字段。-->
            <!--<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />-->

        </table>

    </context>
</generatorConfiguration>

四、选择启动方式

启动方式有很多种,如插件形式,xml形式,java形式都是可以的,当然这里使用java代码和maven插件两种方式,代码的话官方文档直接copy就完事了。

1、java代码启动

    @Test
    public void test() throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("D:\\mybatis\\mybatis_generator\\src\\main\\resources\\mbg.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }

2、maven插件启动

maven插件启动可以在pom.xml中增加插件配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.5</version>
            <configuration>
                <!--待会要创建的generator配置文件,如果不指定则会默认指定resources目录下的generatorConfig.xml文件-->
                <configurationFile>src/main/resources/mbg.xml</configurationFile>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
            </configuration>
        </plugin>
    </plugins>
</build>

ok,刷新pom.xml,导入成功后,就可以看到maven插件了:

在这里插入图片描述

双击即可。

五、执行成功,工程生成

紧接着,就出现了以下画面,自动再dao下生成了mapper接口和mapper.xml,再domain中生成了一个实体类User和一封装条件的UserExample。

在这里插入图片描述

六、主配置文件的简单配置

当然主配置文件可不要忘记配置了,映射文件也记得对应起来。

<?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">
<!--mybatis主配置文件-->
<configuration>
    <!--加载类路径下的配置文件-->
    <properties resource="jdbc.properties"></properties>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql环境-->
        <environment id="mysql">
            <!--配置jdbc事务管理方式-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源,使用连接池-->
            <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>
    <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/smday/dao/UserMapper.xml"></mapper>
    </mappers>
</configuration>

接着就可以测试增删改查了。

七、测试基础的增删改查

方法太多,眼花缭乱,这部分各位可以自己去尝试。

    @Test
    public void testMBG() throws IOException {
        String path = "mybatisConfig.xml";
        InputStream in = Resources.getResourceAsStream(path);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = factory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //查询id为54的用户
        User user = mapper.selectByPrimaryKey(54);
        System.out.println("id = 54的user:"+user);
        user.setId(80);
        user.setUsername("hello");
        //添加一条记录,返回受影响行数
        int num = mapper.insert(user);
        System.out.println("新增一条id为80的记录");
        System.out.println("受影响行数:"+num);
        //提交事务
        sqlSession.commit();
        //再次查询
        User user1 = mapper.selectByPrimaryKey(80);
        System.out.println("id = 80的user:"+user1);
    }

在这里插入图片描述

八、测试多条件

我们可以发现除了User实体类以外,MBG还生成了一个Example可以封装条件的对象,里面的方法非常多,就不一一赘述了,说实话,看到的时候还是很惊讶的,因为很多sql语句还没有写过呢(捂脸)。

直接上手测试一把:

    @Test
    public void testExample() throws IOException {
        String path = "mybatisConfig.xml";
        InputStream in = Resources.getResourceAsStream(path);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = factory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //UserExample用于封装查询条件
        //查询所有
        //List<User> users = mapper.selectByExample(null);
        //for (User user : users) {
        //    System.out.println(user);
        //}

        //查询id是0-50之间,且名字中有王的user或者sex为男的user
        UserExample example = new UserExample();
        //Criteria为UserExample的静态内部类,用于拼接条件
        UserExample.Criteria criteria = example.createCriteria();

        criteria.andIdBetween(0,50);
        criteria.andUsernameLike("%王%");

        UserExample.Criteria criteria1 = example.createCriteria();
        criteria1.andSexEqualTo("男");
        //or连接两个条件
        example.or(criteria1);

        List<User> userList = mapper.selectByExample(example);
        for (User user : userList) {
            System.out.println(user);
        }
    }

在这里插入图片描述
在这里插入图片描述

;