• Mybatis入门


    标题目录

        1.mybatis简单介绍

      2.mybatis与hibernate的区别

            3.搭建mybatis框架环境

          4.基于ssm逆向工程的使用(IDEA)

          5.Mybatis增删改查案例

    1.mybatis简单介绍

    1.1 mybatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
    mybatis是一个基于Java的持久层框架(半自动),主要包括SQL Maps和Data Access Objects(DAO)
    1.2 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
    MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
    1.3 每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。
    SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。

    2. mybatis与hibernate的区别


    两者均为ORM框架,但也有一些不同
    mybatis                                 hibernate
    轻量级                              重量级
    半自动化                              全自动化
    sql                              hql(但也可以使用sql,但违背了hibernate的初衷)
    扩展性、迁移性比较差        无缝移植

    3.搭建mybatis框架环境

    1、创建maven工程

     2、导入相关pom依赖

    <?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">
        <parent>
            <artifactId>redis</artifactId>
            <groupId>com.jt</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>mybatis01</artifactId>
        <packaging>war</packaging>
    
        <name>mybatis01 Maven Webapp</name>
        <!-- FIXME change it to the project's website -->
        <url>http://www.example.com</url>
    
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <!-- ********************** junit单元测试依赖 ********************** -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
    
            <!-- ********************** Java Servlet API  ********************** -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.0</version>
                <scope>provided</scope>
            </dependency>
    
            <!-- ********************** Mybatis依赖 ********************** -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.5</version>
            </dependency>
    
            <!-- ********************** Mysql JDBC驱动 ********************** -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.44</version>
            </dependency>
    
            <!-- **********************  日志配置  ********************** -->
            <!--记得修改mybatis.cfg.xml添加如下内容-->
            <!--<setting name="logImpl" value="LOG4J2"/>-->
            <!--核心log4j2jar包-->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.9.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.9.1</version>
            </dependency>
            <!--web工程需要包含log4j-web,非web工程不需要-->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-web</artifactId>
                <version>2.9.1</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    
        <build>
        <resources>
    
            <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>jdbc.properties</include>
                    <include>*.xml</include>
                </includes>
            </resource>
        </resources>
    
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <dependencies>
                    <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.44</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
        </build>
    </project>

    3、Mybatis相关插件安装

       

       mybatis plugin

    3、Mybatis相关插件安装

       mybatis plugin

    没安装的时候是显示install,完成之后重启IDEA即可,下面的插件以此类推

     Mybatis generator

    mybatis tools

     maven helper

    4、Mybatis.cfg.xml配置

    <?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>
        <!-- 引入外部配置文件 -->
        <properties resource="jdbc.properties"/>
    
        <settings>
            <setting name="logImpl" value="LOG4J2"/>
        </settings>
    
        <!-- 别名 -->
        <typeAliases>
            <!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>-->
        </typeAliases>
    
    
        <!-- 配置mybatis运行环境 -->
        <environments default="development">
            <environment id="development">
                <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
                <transactionManager type="jdbc"/>
    
                <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
                <!-- POOLED 表示支持JDBC数据源连接池 -->
                <!-- UNPOOLED 表示不支持数据源连接池 -->
                <!-- JNDI 表示支持外部数据源连接池 -->
                <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>
    
        <mappers>
            <mapper resource="com/jt/mapper/storageMapper.xml"/>
        </mappers>
    </configuration>

    2、配置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>
        <!-- 引入配置文件 -->
        <properties resource="jdbc.properties"/>
    
        <!--指定数据库jdbc驱动jar包的位置-->
        <classPathEntry location="D:
    epositorymvn-repositorymysqlmysql-connector-java5.1.44mysql-connector-java-5.1.44.jar"/>
    
        <!-- 一个数据库一个context -->
        <context id="infoGuardian">
            <!-- 注释 -->
            <commentGenerator>
                <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
                <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
            </commentGenerator>
    
            <!-- jdbc连接 -->
            <jdbcConnection driverClass="${jdbc.driver}"
                            connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    
            <!-- 类型转换 -->
            <javaTypeResolver>
                <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!-- 01 指定javaBean生成的位置 -->
            <!-- targetPackage:指定生成的model生成所在的包名 -->
            <!-- targetProject:指定在该项目下所在的路径  -->
            <javaModelGenerator targetPackage="com.jt.model"
                                targetProject="src/main/java">
                <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
                <property name="enableSubPackages" value="false"/>
                <!-- 是否对model添加构造函数 -->
                <property name="constructorBased" value="true"/>
                <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
                <property name="trimStrings" value="false"/>
                <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
                <property name="immutable" value="false"/>
            </javaModelGenerator>
    
            <!-- 02 指定sql映射文件生成的位置 jt-->
            <sqlMapGenerator targetPackage="com.jt.mapper"
                             targetProject="src/main/java">
                <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
                <property name="enableSubPackages" value="false"/>
            </sqlMapGenerator>
    
            <!-- 03 生成XxxMapper接口 -->
            <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
            <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
            <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
            <javaClientGenerator targetPackage="com.jt.mapper"
                                 targetProject="src/main/java" type="XMLMAPPER">
                <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
                <property name="enableSubPackages" value="false"/>
            </javaClientGenerator>
    
            <!-- 配置表信息 -->
            <!-- schema即为数据库名 -->
            <!-- tableName为对应的数据库表 -->
            <!-- domainObjectName是要生成的实体类 -->
            <!-- enable*ByExample是否生成 example类 -->
            <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
            <!--enableCountByExample="false" enableDeleteByExample="false"-->
            <!--enableSelectByExample="false" enableUpdateByExample="false">-->
            <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
            <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
            <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
            <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
            <!--</table>-->
    
            <table schema="" tableName="storage" domainObjectName="storage"
                   enableCountByExample="false" enableDeleteByExample="false"
                   enableSelectByExample="false" enableUpdateByExample="false">
                <!-- 忽略列,不生成bean 字段 -->
                <!-- <ignoreColumn column="FRED" /> -->
                <!-- 指定列的java数据类型 -->
                <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
            </table>
    
        </context>
    </generatorConfiguration>

    3、配置maven运行generator命令

    5.Mybatis增删改查案例

    public interface StorageService {
        int deleteByPrimaryKey(Long stkId);
    
        int insert(storage record);
    
        int insertSelective(storage record);
    
        storage selectByPrimaryKey(Integer stkId);
    
        int updateByPrimaryKeySelective(storage record);
    
        int updateByPrimaryKey(storage record);
    }

    StorageServiceImpl

    package com.jt.service.impl;
    
    import com.jt.mapper.storageMapper;
    import com.jt.model.storage;
    import com.jt.service.StorageService;
    
    public class StorageServiceImpl implements StorageService {
        public storageMapper getStoragemapper() {
            return storagemapper;
        }
    
        public void setStoragemapper(storageMapper storagemapper) {
            this.storagemapper = storagemapper;
        }
    
        private storageMapper storagemapper;
    
        @Override
        public int deleteByPrimaryKey(Long stkId) {
            return storagemapper.deleteByPrimaryKey(stkId);
        }
    
        @Override
        public int insert(storage record) {
            return storagemapper.insert(record);
        }
    
        @Override
        public int insertSelective(storage record) {
            return storagemapper.insertSelective(record);
        }
    
        @Override
        public storage selectByPrimaryKey(Integer stkId) {
            return storagemapper.selectByPrimaryKey(stkId);
        }
    
        @Override
        public int updateByPrimaryKeySelective(storage record) {
            return storagemapper.updateByPrimaryKeySelective(record);
        }
    
        @Override
        public int updateByPrimaryKey(storage record) {
            return storagemapper.updateByPrimaryKey(record);
        }
    }
    接下来测试一下StorageServiceTest
    package com.jt.service;
    
    import com.jt.mapper.storageMapper;
    import com.jt.model.storage;
    import com.jt.service.impl.StorageServiceImpl;
    import com.jt.util.SessionUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    public class StorageServiceTest {
    
        private StorageService storageService;
        private SqlSession sqlSession;
    
        @Before
        public void setUp() throws Exception {
            StorageServiceImpl storageService=new StorageServiceImpl();
            SqlSession sqlSession= SessionUtil.openSession();
            storageMapper mapper=sqlSession.getMapper(storageMapper.class);
            storageService.setStoragemapper(mapper);
            this.storageService=storageService;
        }
    
        @Test
        public void insert() {
            storage s=new storage();
            s.setStkId(999);
            s.setStkProdId("mybatis插入");
            s.setStkWarehouse("mybatis插入");
            s.setStkWare("mybatis插入");
            s.setStkCount(1);
            s.setStkMemo("mybatis插入");
        }
    
        @Test
        public void selectByPrimaryKey() {
            storage storage = this.storageService.selectByPrimaryKey(8);
    //        this.storageService.deleteByPrimaryKey(1);
            System.out.println(storage);
        }
        @After
        public void tearDown() throws Exception {
            sqlSession.commit();
            sqlSession.close();
        }
    }

     

  • 相关阅读:
    Vue组件别名及Ctrl跳转组件问题
    Scrapy Item Loaders
    scrapy Selector
    NSSM 注册windows服务
    windows 删除注册的服务
    RedisDesktopManager软件窗口不显示
    hexo + Matery主题 + Nginx + 阿里云 搭建个人博客网站
    sublime text3 安装插件
    关于 Windows 10 时间更新
    动画 | 什么是堆排序?
  • 原文地址:https://www.cnblogs.com/ztbk/p/11674699.html
Copyright © 2020-2023  润新知