美文网首页
从mybatis到mybatis-mapper

从mybatis到mybatis-mapper

作者: 我是光芒万丈 | 来源:发表于2022-10-10 17:32 被阅读0次

1.新建maven空工程:过程略。
2.引入mybatis,pg驱动和slf4j.

     <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
        <!--引入驱动-->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.23</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>runtime</scope>
        </dependency>

引入mybatis-generater插件:

   <build>
    <!--插件-->
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.4.0</version>
            <!--插件设置-->
            <configuration>
                <!--允许移动生成的文件-->
                <verbose>true</verbose>
                <!--启用覆盖-->
                <overwrite>true</overwrite>
                <!--自动生成配置 如果名字是generatorConfig.xml可以省略配置-->
                <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>42.2.23</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
    </build>

增加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>
    <context id="postgretable" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否生成注释代时间戳-->
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接地址账号密码-->
        <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql:///" userId="" password="!">
        </jdbcConnection>
        <javaTypeResolver>
            <!--该属性可以控制是否强制DECIMAL和NUMERIC类型的字段转换为Java类型的java.math.BigDecimal,默认值为false,一般不需要配置。-->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!--生成Model类存放位置-->
        <javaModelGenerator targetPackage="com.Boyang.entity" targetProject="src/main/java">
            <!--enableSubPackages:如果true,MBG会根据catalog和schema来生成子包。如果false就会直接用targetPackage属性。默认为false。-->
            <property name="enableSubPackages" value="true"/>
            <!--trimStrings:是否对数据库查询结果进行trim操作,如果设置为true就会生成类似这样public void setUsername(String username) {this.username = username == null ? null : username.trim();}的setter方法。默认值为false。-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!--生成映射xml文件存放位置-->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!--生成Dao类存放位置(*Mapper.java)-->
        <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
            type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
            type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
            type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
        -->
        <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.Boyang.dao" targetProject="src/main/java/">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>
        <!--生成对应表及类名-->
        <table tableName="skdtm_job_info" domainObjectName="Skdtm_job_info" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
            <!--useActualColumnNames:如果设置为true,那么MBG会使用从数据库元数据获取的列名作为生成的实体对象的属性。 如果为false(默认值),MGB将会尝试将返回的名称转换为驼峰形式。 在这两种情况下,可以通过 元素显示指定,在这种情况下将会忽略这个(useActualColumnNames)属性。-->
            <property name="useActualColumnNames" value="true"/>
            <!-- 数据库表主键 -->
            <generatedKey column="id" sqlStatement="postgrelsql" identity="true" />
        </table>
    </context>
</generatorConfiguration>

执行maven命令,即可生成mapper及xml和实体类

mvn mybatis-generator:generate

配置log:

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n

配置mybatis:

<?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>
    <typeAliases>
        <typeAlias alias="Skdtm_job_info" type="com.Boyang.entity.Skdtm_job_info" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="org.postgresql.Driver" />
                <property name="url" value="" />
                <property name="username" value="" />
                <property name="password" value="!" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 扫描指定的包 -->
        <package name="com.Boyang.dao"/>
    </mappers>
</configuration>

启动验证:

        SqlSessionFactory sessionFactory = SessionFactory.getSqlSessionFactory();
        SqlSession session = sessionFactory.openSession();
//获取mapper代理对象,此处额外多提一句,spring-mybatis的工作其实是是将这里获取的mapper代理对象注册到springIOC容器中,
//由于此处未引入spring,因此直接进行获取
        Skdtm_job_infoMapper skdtm_job_infoMapper = session.getMapper(Skdtm_job_infoMapper.class);
        Skdtm_job_info skdtm_job_info = skdtm_job_infoMapper.selectByPrimaryKey(1L);
        System.out.println(skdtm_job_info.toString());

由于前面在生成时table中配置了:

nableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"

因此可以使用example:

        Skdtm_job_infoExample example = new Skdtm_job_infoExample();
        example.createCriteria().andIdIn(Arrays.asList(1l,2l));
        List<Skdtm_job_info> list = skdtm_job_infoMapper.selectByExample(example);
        System.out.println(list.size());

而mybatis-generator生成庞杂的Skdtm_job_infoExample类,类中为每个字段提供了所有实现,以下为部分截取:

   public Criteria andCjrLike(String value) {
            addCriterion("cjr like", value, "cjr");
            return (Criteria) this;
        }

        public Criteria andCjrNotLike(String value) {
            addCriterion("cjr not like", value, "cjr");
            return (Criteria) this;
        }

        public Criteria andCjrIn(List<String> values) {
            addCriterion("cjr in", values, "cjr");
            return (Criteria) this;
        }

        public Criteria andCjrNotIn(List<String> values) {
            addCriterion("cjr not in", values, "cjr");
            return (Criteria) this;
        }

想起来mybatis-mapper会进行动态拼接,因此再次引入mybatis-mapper
参考地址:https://gitee.com/mybatis-mapper/mapper

        Example<Skdtm_job_info> example1 = new Example<>();
        example1.createCriteria().andIn(Skdtm_job_info::getId, Arrays.asList(1l,2l));
        List<Skdtm_job_info> list1 = skdtm_job_infoMapper.selectByExample(example1);
        System.out.println(list1.size());

相关文章

网友评论

      本文标题:从mybatis到mybatis-mapper

      本文链接:https://www.haomeiwen.com/subject/mstlortx.html