美文网首页
mybatics细节问题

mybatics细节问题

作者: mingyi_b37e | 来源:发表于2019-07-26 10:28 被阅读0次

最近在学习基于springboot的SSM项目的后台程序,期间遇到很多问题,也解决很多问题,简单介绍下。

1 mybatics genatator

对于 mybatics genatator是mybatics为了简化工作量,根据数据库表自动映射出mapper.xml文件,POJO实体类和DAO层类,减少了很多工作量。介绍mybatics genatator的使用文章很多。这里介绍一个介绍很详细的博客地址:https://blog.csdn.net/testcs_dn/article/details/79295065
构建步骤有很多需要注意的地方:

  1. 大多数项目使用很主流的版本管理器maven构建,网上很多介绍在引入mybatics genatator时候,写的不全。具体POM的插件项配置如下:
            <!--mybatis逆向生產-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <configurationFile>src/main/resources/Mybatics/GenerateConfig</configurationFile>
                    <overwrite>true</overwrite> <!--是否在运行时候重写POJO和配置文件-->
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.16</version> <!--即使在上面的依赖已经添加了mysql-connector-java
                                                    也必须再次添加,而且必须加版本号,版本号去包里找-->
                    </dependency>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.6</version> <!--核心依赖库,最好添加上,注意版本对应-->
                    </dependency>
                </dependencies>
            </plugin>
  1. 接着就是配置GenerateConfig.xml,这里面的配置项很多,每个属性的详解见以上的链接。它分为总体配置和对每个表的单独配置。总体配置如下:
<generatorConfiguration>
    <context id="Mysql"  defaultModelType="flat">

        <!-- 是否去除自动生成的注释 true:是 : false:否 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="false"/>
        </commentGenerator>

        <!--数据库连接驱动类,URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"
                        userId="用户"
                        password="密码">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成(实体)模型的包名和位置-->
        <javaModelGenerator targetPackage="oil.oil_test.POJO" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成XML映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="Mybatics.Mapper" targetProject="src\main\resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO接口的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="oil.oil_test.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
  1. 对于表的配置。最好按照小编的配置,tableName是列名,domainObjectName是根据该表生成的实体的名称。很多false选项是指把自动生成的SQL语言给除去掉(写的乱,不如自己写)。useActualColumnNames是指按照数据每张表里的列名,生成实体类里的属性名,详细解释见链接里。
       <table tableName="apply_table" domainObjectName="Apply"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false" enableInsert="false">
            <property name="useActualColumnNames" value="true"/>
        </table>

小编就是在这里遇到的问题,遇到了数据库表生成的实体对应属性不对,莫名其妙多了一些属性,有一些实体就少了一些属性。估计是mybatics genatator映射到其他表去了,但是原因一直找不到。摸索很久,找到解决办法:1.建立数据库的时候,表名后面加些后缀(例如:_table)等等,如果把用户表直接写user,很可能出错,因为我看后台仿佛mybatics genatator找表的时候,貌似是SQL里的模糊查询方式。2,数据库的列名,最好按照javabean规则,写成驼峰样子(如:userName,userPassword),注意首字母不要大写

2 mybatics联表查询

大家肯定遇到过需要查询数据库里某几张表联合起来的结果,比如把学生表的信息和学生所在班级的信息联合查询并显示(因为数据库搭建时,学生表里只会存一个班级的唯一ID,不会存关于这个班级的其余信息),所以我们要使用联合查询。这点不同于hibernate,因为我们可以自己写SQL语句。这里介绍步骤如下:
1 建立对应的POJO类。有很多人嫌麻烦,不肯建立,真有那么烦么?这里推荐一个做法,比如要显示学生(包括班级,爱好的所有信息)直接新建一个类,继承学生类,在private引入班级类和爱好类就完事了。如下:

public class UserAll extends User {
    private Class  userClass;
    private Favourate favourate;
    然后get与set。。。
}

2.对应mapper里的.xml怎么写也很方便,把几个类的mapper里自动生成的基本resultmap拼在一起就好了。
注意两个关键字就行:association是一对一连接的,collection是一对多连接的。

<!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性-->
<resultMap id="唯一的标识" type="映射的pojo对象">
  <id column="表的主键字段,或者可以为查询语句中的别名字段" jdbcType="字段类型" property="映射pojo对象的主键属性" />
  <result column="表的一个字段(可以为任意表的一个字段)" jdbcType="字段类型" property="映射到pojo对象的一个属性(须为type定义的pojo对象中的一个属性)"/>
  <association property="pojo的一个对象属性" javaType="pojo关联的pojo对象">
    <id column="关联pojo对象对应表的主键字段" jdbcType="字段类型" property="关联pojo对象的主席属性"/>
    <result  column="任意表的字段" jdbcType="字段类型" property="关联pojo对象的属性"/>
  </association>
  <!-- 集合中的property须为oftype定义的pojo对象的属性-->
  <collection property="pojo的集合属性" ofType="集合中的pojo对象">
    <id column="集合中pojo对象对应的表的主键字段" jdbcType="字段类型" property="集合中pojo对象的主键属性" />
    <result column="可以为任意表的字段" jdbcType="字段类型" property="集合中的pojo对象的属性" />  
  </collection>
</resultMap>

3.接下来就是SQL语句,使用左右拼接的方式(left join)


image.png

相关文章

  • mybatics细节问题

    最近在学习基于springboot的SSM项目的后台程序,期间遇到很多问题,也解决很多问题,简单介绍下。 1 my...

  • mybatics批量更改

    controller @ApiOperation(value ="批量更改审核及删除状态", notes ="批量...

  • 项目的搭建

    1.项目的建立Spring Initializr---->web,mybatics等 2.pom.xml依赖等的配...

  • 细节问题

    细心决定一切,有时候成也萧何败也萧何,所以说,细节,也是决定成败的。 但是呢,有些细节,是可以给成功添加一些色彩,...

  • 细节问题(待续)

    sgid:只对二进制可执行文件有效,脚本是文本文件,故无效 alias别名在脚本中无效,不能使用别名 判断文件是否...

  • jquery 细节问题

    操作布尔属性 jquery操作以下元素的属性: 方法 jquery中attr和prop的区别 固有属性使用prop...

  • javascript 细节问题

    获取对象的属性个数 Object.getOwnPropertyNames(a).length

  • python细节问题

    数据类型: list有序集合,可增删 tuple有序列表,不可修改 字典键值对保存,查找速度快 set无序集合,k...

  • UI细节问题

    1 iOS 导航栏导致scrollView类视图自动便宜问题 (iOS 11 导航栏 automaticallyA...

  • MySql细节问题

    聚合函数 当使用聚合函数的时候,count ,max,min,avg,sum.如果有NULL的数据,则不会统计.如...

网友评论

      本文标题:mybatics细节问题

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