Mybatis的体系结构和快速使用

版权声明:本文为博主在学习过程给自己记录,也让给朋友们少走点弯路。手动码字,义务整理,不喜勿喷。 https://blog.csdn.net/pratise/article/details/86215165

传统JDBC的弊端

  1. jdbc 底层没有用连接池、操作数据库需要频繁的创建和关联链接。消耗很大的资源
  2. 写原生的 jdbc 代码在 java 中,一旦我们要修改 sql 的话,java 需要整体编译,不利于系 统维护
  3. 使用 PreparedStatement 预编译的话对变量进行设置 123 数字,这样的序号不利于维护
  4. 返回 result 结果集也需要硬编码。

Mybatis

MyBatis介绍

中文官网:http://www.mybatis.org/mybatis-3/zh/index.html
Mybatis 是一个ORM框架 (Object relation mapping 对象关系映射 )

MyBatis快速开始

1、maven

如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

2、mybatis-config.xml

XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)

<?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="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

3、mapper.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.pratise.mybatis.UserMapper">
    <select id="selectUser" resultType="com.pratise.mybatis.pojo.User">
    select * from cf_user AS user where id = #{id}
  </select>
    <insert id="insertUser">
      insert into cf_user(name,age,tel) value (#{name},#{age},#{tel})
    </insert>
</mapper>

Mybatis 全局配置详解

1、概述

(1)SqlMapConfig.xml的配置内容和顺序如下(顺序不能乱):

  • Properties(属性)
  • Settings(全局参数设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境信息集合)
    • environment(单个环境信息)
      • transactionManager(事物)
      • dataSource(数据源)
  • mappers(映射器)

(2)具体参数解释与使用可参考 这儿,

2、Mybatis 之 annotation:

public interface UserMapper {
    @Select("select * from user where id=#{id}")
    public User selectUser(Integer id); 
} 
<mapper class="com.jiagouedu.mybatis.mapper.UserMapper"></mapper> 

3、问题收集

Mybatis 之注解和 xml 优缺点:

  • Xml:增加 xml 文件、麻烦、条件不确定、容易出错,特殊字符转义
  • 注释:不适合复杂 sql,收集 sql 不方便,重新编译

Mybatis 之#与$区别:

  • 都是参数标记符号
  • #预编译,防止 sql 注入(推荐)
  • $可以 sql 注入,代替作用

Mybatis 之 parameterType 与 parameterMap 区别:

  • 通过 parameterType 指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型
  • parameterMap通常应用于mapper中有多个参数要传进来时,表示将查询结果集中列值的类型一一映射到java对象属性的类型上,在开发过程中不推荐这种方式。

Mybatis 之 resultType 与 resultMap 区别:

  • 使用 resultType 进行输出映射,只有查询出来的列名和 pojo 中的属性名一致,该列才可以 映射成功。
  • mybatis 中使用 resultMap 完成高级输出结果映射。

Mybatis 逆向工程

官方网址:http://www.mybatis.org/generator/configreference/javaClientGenerator.html

什么是逆向工程:

MyBatis 的一个主要的特点就是需要程序员自己编写 sql,那么如果表太多的话,难免会很 麻烦,所以 mybatis 官方提供了一个逆向工程,可以针对单表自动生成 mybatis 执行所需要 的代码(包括 mapper.xml、mapper.java、po…)。一般在开发中,常用的逆向工程方式是 通过数据库的表生成代码

1、在maven中添加插件 引入 jar

<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.7</version>
        <dependencies>
            <dependency>       
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId> 
                <version>${mysql-connector-java.version}</version>
            </dependency>   
        </dependencies> 
        <configuration>
                    <!-- 打印执行过程 -->
                    <verbose>true</verbose>
                    <!-- 允许覆盖生成的文件 -->
                    <overwrite>true</overwrite>
                    <!-- 配置文件路径 -->
                    <configurationFile>${basedir}/src/main/resources/mybatis/generatorConfig.xml</configurationFile>
                    <!-- 生成部分mapper,指定table名字 -->
                    <tableNames>
                        tb_user
                    </tableNames>
       </configuration>
</plugin>

2、配置 mybatis-genrtator.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="mybatis/db.properties"/>

    <!-- 指定数据库驱动jar地址,可以pom.xml中设置 -->
    <!--<classPathEntry location="${user.home}/.m2/repository/mysql/mysql-connector-java/5.1.44/mysql-connector-java-5.1.44.jar"/>-->

    <!-- 配置环境
     defaultModelType:指定生成模型类型策略
     1.conditional:这是默认值,这个模型和下面的hierarchical类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个
     表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。
     2.flat:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。
     3.hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然
     后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。 -->
    <context id="mysql" defaultModelType="flat">

        <!-- 是否取消注释 -->
        <commentGenerator>
            <property name="suppressAllComments"  value="true"/>
        </commentGenerator>

        <!-- jdbc连接 -->
        <jdbcConnection driverClass="${jdbc.driverClassName}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}" password="${jdbc.password}"/>

        <!-- 生成实体类 -->
        <javaModelGenerator targetPackage="com.learn.spring.server.model"
                            targetProject="src/main/java"/>

        <!-- 生成maper.xml文件 -->
        <sqlMapGenerator targetPackage="mybatis/mapper"
                         targetProject="src/main/resources"/>

        <!-- 生成dao接口 -->
        <javaClientGenerator targetPackage="com.learn.spring.server.dao"
                             targetProject="src/main/java" type="XMLMAPPER"/>

        <!-- 配置表信息,不生成帮助类examples-->
        <table schema="" tableName="tb_user" domainObjectName="UserDO"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false"/>
    </context>
</generatorConfiguration>

3、执行验证
执行mvn mybatis-generator:generate,生成UserDOMapper.java、UserDO.java、UserDOMapper.xml,插件执行成功。


猜你喜欢

转载自blog.csdn.net/pratise/article/details/86215165