学习MyBatis

Posted 月下赶路人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习MyBatis相关的知识,希望对你有一定的参考价值。

文章目录

MyBatis

基于Java的数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。

(1)ORM对象关系映射,一种数据持久化技术。
		O:Object	对象===java中的实体类---对象
		R:Relation	关系===关系型数据库---表
		M:Mapping	映射===提供一种映射的机制
		
(2)半自动化:在映射过程中需要写一些SQL语句才能完成指定功能

搭建

  1. 创建Maven工程。

  2. 添加项目依赖。

<!--MyBatis项目依赖包-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>
<!-- junit测试包 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<!-- 日志包 -->
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.17</version>
</dependency>
  1. 创建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>
  <!--环境-->
    <environments default="development">
        <environment id="development">
          <!--事务管理-->
            <transactionManager type="JDBC"/>
          <!--数据源设置-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssm_db"/>
                <property name="username" value="root"/>
                <property name="password" value="rootstart"/>
            </dataSource>
        </environment>
    </environments>
  <!--加载mapper映射文件-->
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>
  1. 创建实体类。

  2. 创建sql映射文件。

<?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.cwd.mybatisdemo.userDao">
    <select id="selectBlog" resultType="com.cwd.mybatisdemo.User">
        select *
        from Blog
        where id = #id
  </select>
</mapper>
  1. 测试。

核心配置文件

核心配置文件下载地址

<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>

核心配置文件sqlMapperConfig中的标签顺序应按照上面👆的顺序:properties—>mappers

数据库环境配置

<!--环境-->
    <environments default="development">
        <environment id="development">
          <!--事务管理-->
            <transactionManager type="JDBC"/>
          <!--数据源设置-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssm_db"/>
                <property name="username" value="root"/>
                <property name="password" value="rootstart"/>
            </dataSource>
        </environment>
    </environments>

属性设置

1.在属性中配置对应的数据。

 <!--属性引用-->
    <properties>
        <property name="driver" value="com.mysql.jdbc.Driver"/>
    </properties>
    
<!--环境-->
    <environments default="development">
        <environment id="development">
          <!--事务管理-->
            <transactionManager type="JDBC"/>
          <!--数据源设置-->
            <dataSource type="POOLED">
                <property name="driver" value="$driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssm_db"/>
                <property name="username" value="root"/>
                <property name="password" value="rootstart"/>
            </dataSource>
        </environment>
    </environments>

2.提取属性到一个全新的文件(jdbc.properties)进行引用

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/ssm_db
username=root
password=rootstart
<configuration>
    <!--属性引用-->
    <properties resource="jdbc.properties">
      
    </properties>
  
  <!--环境-->
    <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>

</configuration>

3.赋默认值(以password为例)

<configuration>
    <!--属性引用-->
    <properties resource="jdbc.properties">
    		<!--开启默认值-->
        <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
    </properties>


  <!--环境-->
    <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:rootstart"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

设置setting

<!--设置-->
    <settings>
        <!--开启log4j日志-->
        <setting name="logImpl" value="LOG4J"/>
        <!--开启二级缓存-->
        <setting name="cacheEnabled" value="true"/>
        <!--开启延迟加载/懒加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

类型别名

1.标签设置,依次设置

<typeAliases>
     <typeAlias type="com.cwd.mybatisdemo.User" alias="user"/>
</typeAliases>

2.直接设置一个包

<!--类型别名-->
<typeAliases>
		<package name="com.cwd.mybatisdemo"/>
</typeAliases>

其它配置项

  1. 类型处理器 typeHandlers
  2. 对象工厂 objectFactory
  3. 插件 plugins
  4. 映射器 mappers
<!--加载mapper映射文件-->
<mappers>
		<mapper resource="UserDao.xml"/>
</mappers>

逆向工程

​ Mybatis需要自己编写SQL,若是表太多的话难免会麻烦,所以官方提供了一种逆向工程,可以针对单个表自动生成Mybatis执行所需要的代码(包括Mapper.xml、mapper.java、pojo)。一搬我们在开发中常用的逆向工程是通过数据库的表生成代码。

创建逆向工程

  1. 新建一个maven工程。
  2. 添加依赖的jar包。
<!-- Mysql驱动包 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.16</version>
</dependency>

<!-- 日志包 -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

<!--代码生成工具-->
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>

  1. 添加配置文件generatorConfig.xml文件,用于设置数据库驱动,配置,包名,文件保存位置,表名等等。
  2. 定义GeneratorSqlmap类,调用MyBatis自动创建接口,在main方法执行自动创建。

使用为主!!!

使用逆向工程

  1. 添加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="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/ssm_db"
                        userId="root"
                        password="rootstart">
        </jdbcConnection>

        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
            和 NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成PO类的位置
            注意:mac电脑写的地址是./src
                windows电脑写的是.\\src
        -->
        <javaModelGenerator targetPackage="main.java.com.cwd.mybatisdemo"
                            targetProject="./src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- targetProject:mapper映射文件生成的位置
            注意:mac电脑写的地址是./src
                windows电脑写的是.\\src
        -->
        <sqlMapGenerator targetPackage="main.resources.mapper"
                         targetProject="./src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <!-- targetPackage:mapper接口生成的位置
            注意:mac电脑写的地址是./src
                windows电脑写的是.\\src
        -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="main.java.com.cwd.mybatisdemo" targetProject="./src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 指定数据库表
            tableName   表名
            domainObjectName 生成实体类对应的名称
        -->
        <table tableName="t_role" domainObjectName="Role" enableCountByExample="false"
            enableUpdateByExample="falsemybatis学习笔记-订单商品数据模型分析

Mybatis基础学习—关系映射

MyBatis:学习笔记——关联查询

学习SpringBoot+jsp图书管理系统项目,源码

学习SpringBoot+jsp图书管理系统项目,源码

MyBatis——商品的类别