zoukankan      html  css  js  c++  java
  • Mybatis01

    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">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.hxc</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>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <!--junit-->
        <junit.version>4.12</junit.version>
        <!--servlet  -->
        <servlet.version>4.0.0</servlet.version>
        <!--mybatis-->
        <mybatis-version>3.4.5</mybatis-version>
        <!--mysql-->
        <mysql.version>5.1.44</mysql.version>
      </properties>
    
      <!--junit-->
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
          <scope>test</scope>
        </dependency>
    
        <!--servlet  -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>${servlet.version}</version>
          <scope>provided</scope>
        </dependency>
    
        <!--mysql-->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>${mysql.version}</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${mybatis-version}</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>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
          <version>5.1.2</version>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>mybatis01</finalName>
    
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.7.0</version>
              <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
                <encoding>${project.build.sourceEncoding}</encoding>
              </configuration>
            </plugin>
            <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>${mysql.version}</version>
                </dependency>
              </dependencies>
              <configuration>
                <overwrite>true</overwrite>
              </configuration>
            </plugin>
    
    
          </plugins>
        </pluginManagement>
          <resources>
            <resource>
              <directory>src/main/java</directory>
              <includes>
                <include>**/*.xml</include>
              </includes>
            </resource>
              <!--对应的资源目录-->
            <resource>
              <directory>src/main/resources</directory>
              <includes>
                <include>*.properties</include>
                <include>*.xml</include>
              </includes>
            </resource>
          </resources>
      </build>
    </project>

    3、Mybatis相关插件安装

    Free 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"/>
    
        <!--由log4j实现mybatis日志打印-->
        <settings>
            <setting name="logImpl" value="LOG4J2"/>
        </settings>
    
        <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
        <plugins>
            <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
            <plugin interceptor="com.github.pagehelper.PageInterceptor">
            </plugin>
        </plugins>
    
      
    
        <!-- 配置mybatis运行环境  development开发环境-->
        <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/hxc/mapper/BookMapper.xml"/>
        </mappers>
    
    </configuration>

    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:Maven-folderapache-maven-3.5.0-binapache-maven-3.5.0mvn_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.hxc.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.hxc.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.hxc.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">
            </table>
    
        </context>
    </generatorConfiguration>

    3、配置maven运行generator命令

    mybatis增删改案例

    SessionUtil.java
    package com.hxc.util;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    
    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.hxc.service;
    
    import com.hxc.model.Book;
    
    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.hxc.service.impl;
    
    import com.hxc.mapper.BookMapper;
    import com.hxc.model.Book;
    import com.hxc.service.BookService;
    
    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.hxc.service;
    
    
    import com.hxc.mapper.BookMapper;
    import com.hxc.model.Book;
    import com.hxc.service.impl.BookServiceImpl;
    import com.hxc.util.SessionUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    
    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(33f);
            bookService.insert(book);
        }
    
        @Test
        public void selectByPrimaryKey() {
    //        Book book = this.bookService.selectByPrimaryKey(27);
              this.bookService.deleteByPrimaryKey(1);
    //        System.out.println(book);
        }
        @After
        public void tearDown()throws  Exception{
            sqlSession.commit();
            sqlSession.close();
        }
    }
    
    

     

  • 相关阅读:
    Oracle锁表与解锁 对象锁与解锁
    Unity3D开发之NGUI点击事件穿透响应处理
    Unity 3D 关于给APK包加广告的流程
    Unity 3D 粒子系统的一点经验
    Unity3D模型的细致纹理问题解决办法
    Unity 3D学习之 Prime31 Game Center插件用法
    Unity3D如何制作透贴和使用透贴模型
    NGUI的部分控件无法更改layer?
    关于Unity3D中Resources动态加载NGUI图片的方法
    关于NGUI的动态加载后的刷新显示问题,解决办法!!
  • 原文地址:https://www.cnblogs.com/huxiaocong/p/11693351.html
Copyright © 2011-2022 走看看