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

    一、导入相关pom依赖

    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.zhuling</groupId>
      <artifactId>mybatis1</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>mybatis1 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>
      </dependencies>
    
    
    
      <build>
        <finalName>mybatis1</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>
    
        <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>

    Jdbc.properties

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

    Web.xml

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
    </web-app>

    接下来安装以下插件

    Free mybatis plugin

    Mybatis generater

    mybatis tools

    maven helper 

     

    详细介绍

    https://blog.csdn.net/yangshijin1988/article/details/63258960/

    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:\initpath\mvn_repository\mysql\mysql-connector-java\5.1.44\mysql-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.zhuling.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.zhuling.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.zhuling.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>

    运行mavengenerator命令

    Mybatis增删改查案例

    写service把你自动生成的Mapper接口复制过来,然后选中类名BookService,Alt+Enter生成实现类

    生成   BookServiceImpl

    package com.zhuling.service.impl;
    
    import com.zhuling.mapper.BookMapper;
    import com.zhuling.model.Book;
    import com.zhuling.service.BookService;
    
    /**
     * @author zhuling
     * @site www.xiaomage.com
     * @company xxx公司
     * @create  2019-10-14 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);
        }
    }

    SessionUtil

    package com.zhuling.util;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    /**
     * @author zhuling
     * @site www.xiaomage.com
     * @company xxx公司
     * @create  2019-10-14 23:07
     */
    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());
        }
    }

    然后测试一下

    BookServiceTest

    package com.zhuling.service;
    
    import com.zhuling.mapper.BookMapper;
    import com.zhuling.model.Book;
    import com.zhuling.service.impl.BookServiceImpl;
    import com.zhuling.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.*;
    
    /**
     * @author zhuling
     * @site www.xiaomage.com
     * @company xxx公司
     * @create  2019-10-14 23:13
     */
    public class BookServiceTest {
    
        private BookService bookService;
        private SqlSession sqlSession;
    
        @Before
        public void setUp(){
            BookServiceImpl bookService=new BookServiceImpl();
            sqlSession= SessionUtil.openSession();
            BookMapper mapper=sqlSession.getMapper(BookMapper.class);
            bookService.setBookMapper(mapper);
            this.bookService=bookService;
        }
    
        @Test
        public void insert() {
            Book book=new Book();
            book.setBid(1);
            book.setBname("mybatis插入");
            book.setPrice(22f);
            bookService.insert(book);
        }
    
        @Test
        public void selectByPrimaryKey() {
    //        Book book = this.bookService.selectByPrimaryKey(27);
            this.bookService.deleteByPrimaryKey(27);
    //        System.out.println(book);
    
        }
            @After
            public void tearDown() throws  Exception{
    
           sqlSession.commit();
           sqlSession.close();
    
        }
    }

    运行

    到数据库查看效果

  • 相关阅读:
    设计模式—— 十 :模板方法模式
    设计模式—— 九 :抽象工厂模式
    StringUtils常用方法
    设计模式—— 八 :工厂方法模式
    Navicat查看并导出ER图
    设计模式—— 七 :单例模式
    设计模式—— 六:开闭原则
    设计模式—— 五:迪米特原则
    Java编码辅助工具:Mapstruct—— Java对象转换框架
    Java编码辅助工具:Lombok —— 避免重复臃肿的代码,提高效率
  • 原文地址:https://www.cnblogs.com/BAYOUA/p/11677004.html
Copyright © 2011-2022 走看看