zoukankan      html  css  js  c++  java
  • mybatis入门

    mybatis介绍

    MyBatis是一个款优秀的持久层框架,它支持定制化的SQL、存储过程以及高级映射。MyBatis封装了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和POJO对象(javaBean)映射成数据库中的记录。

    搭建mybatis框架环境

    1、创建maven工程

    2、导入相关pom依赖

    3、Mybatis相关插件安装

    4、Mybatis.cfg.xml配置

    Pom.xml依赖

    <?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">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.liuwenwu</groupId>
      <artifactId>mybatis01</artifactId>
      <version>1.0-SNAPSHOT</version>
      <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>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>mybatis01</finalName>
        <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>
    
    
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <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>
    
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.1.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.22.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>

    Jdbc.properties 连接数据库配置文件

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/t224?useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true
    jdbc.username=root
    jdbc.password=123

    接下来安装以下插件

    Free mybatis plugin

    Mybatis generater

    mybatis tools

    maven helper

    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.zking.oa.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/liuwenwu/mapper/BookMapper.xml"/>
        </mappers>
    </configuration>

    基于ssm逆向工程的使用

    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>
        <!-- 引入配置文件 -->
        <properties resource="jdbc.properties"/>
    
        <!--指定数据库jdbc驱动jar包的位置-->
        <classPathEntry location="F:\Maven\maven_repository\mysql\mysql-connector-java\5.1.44"/>
    
        <!-- 一个数据库一个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.liuwenwu.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映射文件生成的位置 -->
            <sqlMapGenerator targetPackage="com.liuwenwu.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.liuwenwu.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="t_mvc_book" domainObjectName="Book"
                   enableCountByExample="false" enableDeleteByExample="false"
                   enableSelectByExample="false" enableUpdateByExample="false">
                <!-- 忽略列,不生成bean 字段 -->
                <!-- <ignoreColumn column="FRED" /> -->
                <!-- 指定列的java数据类型 -->
                <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
            </table>
    
        </context>
    </generatorConfiguration>

    配置maven运行generator命令

    mybatis-generator:generate -e

    Mybatis增删改查案例

    SessionUtil.java
    package com.liuwenwu.util;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    /**
     * @author LWW
     * @site www.LWW.com
     * @company xxx公司
     * @create
     */
    public class SessionUtil {
        private static SqlSessionFactory sessionFactory;
        private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
        static {
            sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));
        }
    
        public static SqlSession openSession() {
            SqlSession session = threadLocal.get();
            if (null == session) {
                session = sessionFactory.openSession();
                threadLocal.set(session);
            }
            return session;
        }
    
        public static void main(String[] args) {
            SqlSession session = openSession();
            System.out.println(session.getConnection());
            session.close();
    //        System.out.println(session.getConnection());
        }
    }
    BookService.java
    package com.liuwenwu.service;
    
    
    import com.liuwenwu.model.Book;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-19 22:23
     */
    public interface BookService {
        int deleteByPrimaryKey(Integer bid);
    
        int insert(Book record);
    
        int insertSelective(Book record);
    
        Book selectByPrimaryKey(Integer bid);
    
        int updateByPrimaryKeySelective(Book record);
    
        int updateByPrimaryKey(Book record);
    }
    BookServiceImpl.java
    package com.liuwenwu.service.impl;
    
    import com.liuwenwu.mapper.BookMapper;
    import com.liuwenwu.model.Book;
    import com.liuwenwu.service.BookService;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-19 22:58
     */
    public class BookServiceImpl implements BookService {
        private BookMapper bookMapper;
    
        public BookMapper getBookMapper() {
            return bookMapper;
        }
    
        public void setBookMapper(BookMapper bookMapper) {
            this.bookMapper = bookMapper;
        }
    
        @Override
        public int deleteByPrimaryKey(Integer bid) {
            return bookMapper.deleteByPrimaryKey(bid);
        }
    
        @Override
        public int insert(Book record) {
            return bookMapper.insert(record);
        }
    
        @Override
        public int insertSelective(Book record) {
            return bookMapper.insertSelective(record);
        }
    
        @Override
        public Book selectByPrimaryKey(Integer bid) {
            return bookMapper.selectByPrimaryKey(bid);
        }
    
        @Override
        public int updateByPrimaryKeySelective(Book record) {
            return bookMapper.updateByPrimaryKeySelective(record);
        }
    
        @Override
        public int updateByPrimaryKey(Book record) {
            return bookMapper.updateByPrimaryKey(record);
        }
    }
    BookServiceImplTest.java
    package com.liuwenwu.test;
    
    import com.liuwenwu.mapper.BookMapper;
    import com.liuwenwu.model.Book;
    import com.liuwenwu.service.BookService;
    import com.liuwenwu.service.impl.BookServiceImpl;
    import com.liuwenwu.util.SessionUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-19 23:08
     */
    public class BookServiceImplTest {
        private BookService bookService;
        private SqlSession sqlSession;
    
        @Before
        public void setUp() throws Exception {
            BookServiceImpl bookServiceImpl = new BookServiceImpl();
            sqlSession = SessionUtil.openSession();
            bookServiceImpl.setBookMapper(sqlSession.getMapper(BookMapper.class));
            this.bookService = bookServiceImpl;
        }
    
        @After
        public void tearDown() throws Exception {
            sqlSession.commit();
            sqlSession.close();
        }
    
        @Test
        public void insert() {
            Book book = new Book();
            book.setBname("zzz");
            book.setPrice(99.3);
            book.setBid(3);
            int insert = bookService.insert(book);
        }
    
    
        @Test
        public void selectByPrimaryKey() {
            Book book = this.bookService.selectByPrimaryKey(2);
            System.out.println(book);
    
        }
    
    }

    效果:

  • 相关阅读:
    随笔2
    随笔
    关于updateElement接口
    随笔1
    本地访问正常,服务器访问乱码 记录
    Redis (error) NOAUTH Authentication required.解决方法
    tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.
    微信公众号消息回复
    微信公众号 报token验证失败
    idea中web.xml报错 Servlet should have a mapping
  • 原文地址:https://www.cnblogs.com/liuwenwu9527/p/11556737.html
Copyright © 2011-2022 走看看