zoukankan      html  css  js  c++  java
  • Mybatis环境配置以及使用

    什么是Mybatis?

    MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

    MyBatis的几个关键概念

    1. Mapper 配置: Mapper 配置可以使用基于 XML 的 Mapper 配置文件来实现,也可以使用基于 Java 注解的 MyBatis 注解来实现,甚至可以直接使用 MyBatis 提供的 API 来实现。

    2. Mapper 接口: Mapper 接口是指自行定义的一个数据操做接口,类似于通常所说的 DAO 接口。早期的 Mapper 接口需要自定义去实现,现在 MyBatis 会自动为 Mapper 接口创建动态代理对象。Mapper 接口的方法通常与 Mapper 配置文件中的 select、insert、update、delete 等 XML 结点存在一一对应关系。

    3. Executor: MyBatis 中所有的 Mapper 语句的执行都是通过 Executor 进行的,Executor 是 MyBatis 的一个核心接口。

    4. SqlSession: SqlSession 是 MyBatis 的关键对象,是执行持久化操作的独享,类似于 JDBC 中的 Connection,SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作的方法,它的底层封装了 JDBC 连接,可以用 SqlSession 实例来直接执行被映射的 SQL 语句。

    5. SqlSessionFactory: SqlSessionFactory 是 MyBatis 的关键对象,它是单个数据库映射关系经过编译后的内存镜像。SqlSessionFactory 对象的实例可以通过 SqlSessionFactoryBuilder 对象类获得,而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出。

    MyBatis工作流程

    在这里插入图片描述

    配置 Mybatis环境

    创建一个Javaweb项目

    这部分不清楚的小伙伴可以查看我的另一篇博客创建自己的第一个Javaweb项目

    项目代码

    • User.java
    package cn.newtol.pojo.model;
    
    /**
     * @Author: REN
     * @Description:
     * @Date: Created in 22:45 2018/4/26
     */
    public class User {
        private int id;
        private String name;
        private String phone;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPhone() {
            return phone;
        }
    
        public void setPhone(String phone) {
            this.phone = phone;
        }
    }
    
    • IUser.java
    package cn.newtol.mybatis.dao;
    
    import cn.newtol.mybatis.pojo.User;
    
    /**
     * @Author: REN
     * @Description:
     * @Date: Created in 22:55 2018/4/26
     */
    public interface IUser {
        public User getUser();
    }
    
    • MyselfDefineDataSourceFactory .java
    package cn.newtol.mybatis.util;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
    
    public class MyselfDefineDataSourceFactory extends UnpooledDataSourceFactory {
        public MyselfDefineDataSourceFactory() {
            this.dataSource = new DruidDataSource();
        }
    }
    
    • SqlSessionFactoryUtil.java
    package cn.newtol.mybatis.util;
    /**
     * @Author: REN
     * @Description:
     * @Date: Created in 23:25 2018/3/14
     */
    
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.IOException;
    import java.io.Reader;
    
    public class SqlSessionFactoryUtil {
        //首先创建静态成员变量sqlSessionFactory,静态变量被所有的对象所共享。
        public static SqlSessionFactory sqlSessionFactory = null;
        public static SqlSessionFactory getSqlSessionFactory() {
            //如果sqlSessionFactory没有被创建就读取全局配置文件,假如已经被创建过了,就使用已经存在的sqlsessionfactory。
            //这样就有了单例模式的效果
            if(sqlSessionFactory==null){
                String resource = "Configure.xml";
                try {
                    Reader reader = Resources.getResourceAsReader(resource);
                    sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return sqlSessionFactory;
        }
    }
    
    • 主函数test.java
    package cn.newtol.mybatis;
    
    import cn.newtol.mybatis.dao.IUser;
    import cn.newtol.mybatis.pojo.User;
    import cn.newtol.mybatis.util.SqlSessionFactoryUtil;
    import org.apache.ibatis.session.SqlSession;
    
    /**
     * @Author: REN
     * @Description:
     * @Date: Created in 23:37 2018/4/26
     */
    public class test {
    
            public static void main(String[] args) {
                SqlSessionFactoryUtil sqlSessionFactoryUtil = null;
                SqlSession session = sqlSessionFactoryUtil.getSqlSessionFactory().openSession();
                try {
                    IUser iuser = session.getMapper(IUser.class);
                    User u = iuser.getUser();
                    System.out.println("id:"+u.getId()+"----"+"name:"+u.getName()+"----"+"phone:"+u.getPhone());
                }finally {
                    session.close();
                }
    
            }
    }
    
    • User.xml
    <?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="cn.newtol.mybatis.dao.IUser">
        <!--管理员登录-->
        <select id="getUser"  resultType="User">
            select * from `user`
        </select>
    </mapper>
    
    • Configure.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"></properties>
    
        <typeAliases>
            <typeAlias alias="User" type="cn.newtol.mybatis.pojo.User" />
        </typeAliases>
    
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <dataSource type="cn.newtol.mybatis.util.MyselfDefineDataSourceFactory">
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                    <property name="driverClass" value="${jdbc.driver}"/>
    
                    <property name="initialSize" value="${jdbc.initialSize}" />
                    <property name="minIdle" value="${jdbc.minIdle}" />
                    <property name="maxActive" value="${jdbc.maxActive}" />
                    <property name="maxWait" value="${jdbc.maxWait}" />
                    <!-- 超过时间限制是否回收 -->
                    <property name="removeAbandoned" value="${jdbc.removeAbandoned}" />
                    <!-- 超过时间限制多长; -->
                    <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />
                    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
                    <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
                    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
                    <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
                    <!-- 用来检测连接是否有效的sql,要求是一个查询语句-->
                    <property name="validationQuery" value="${jdbc.validationQuery}" />
                    <!-- 申请连接的时候检测 -->
                    <property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
                    <!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
                    <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
                    <!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
                    <property name="testOnReturn" value="${jdbc.testOnReturn}" />
                </dataSource>
            </environment>
    
        </environments>
    
        <mappers>
            <mapper resource="Mapper/User.xml" />
        </mappers>
    </configuration>
    
    • jdbc.properties
    jdbc.url=jdbc:mysql://127.0.0.1/你的数据库名?characterEncoding=utf-8
    jdbc.username=数据库账号
    jdbc.password=数据库密码
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.initialSize=1
    jdbc.minIdle=1
    jdbc.maxActive=20
    jdbc.maxWait=60000
    jdbc.removeAbandoned=true
    jdbc.removeAbandonedTimeout=180
    jdbc.timeBetweenEvictionRunsMillis=60000
    jdbc.minEvictableIdleTimeMillis=300000
    jdbc.validationQuery=SELECT 1 
    jdbc.testWhileIdle=true
    jdbc.testOnBorrow=false
    jdbc.testOnReturn=false
    
    • log4j.properties(无需修改)
    log4j.rootCategory=DEBUG, stdout
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
    
    log4j.logger.com.jege.mybatis=TRACE
    
    # 设置日志输出类型 , 为文件类型
    
    log4j.appender.R= org.apache.log4j.FileAppender 
    
    # 设置日志文件的位置
    
    log4j.appender.R.file=../logs/cheer_vote.log
    
    # 每次在文件尾写入新的日志信息
    
    log4j.appender.R.Append= true 
    
    # 日志输出信息格式类型
    
    log4j.appender.R.layout= org.apache.log4j.PatternLayout 
    
    # 日志输出信息格式为 换行、日期、优先级、 [ 全类名 ] 、日志信息、换行
    
    log4j.appender.R.layout.ConversionPattern= %n%d%p [%l] %m%n
    
    • 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>cn.newtol</groupId>
      <artifactId>testMybatis</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>testMybatis 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.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.1.9</version>
        </dependency>
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-core</artifactId>
          <version>2.11.0</version>
        </dependency>
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.12</version>
        </dependency>
        <dependency>
          <groupId>commons-pool</groupId>
          <artifactId>commons-pool</artifactId>
          <version>1.6</version>
        </dependency>
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.0</version>
        </dependency>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.13</version>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>testMybatis</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.0.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.7.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.20.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.0</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>
    

    项目目录

    这里写图片描述

    创建数据表

    CREATE TABLE `user` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(64) NOT NULL DEFAULT '',
      `phone` varchar(16) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    INSERT INTO `user` VALUES ('1', 'rock', '13800009988');
    

    然后只需要运行test.java的主函数,看到下面的运行结果:
    这里写图片描述

    那么恭喜你,mybaitis环境配置成功,连接池使用的是druid,可以直接使用该代码用于项目开发

    Github地址

    源码下载地址

  • 相关阅读:
    20155311《信息安全系统设计基础》课程总结
    20155311《信息安全系统设计基础》第14周学习总结
    20155311《信息安全系统设计基础》第十三周学习总结
    2017-2018-1 《信息安全系统设计基础》实验五 通信协议设计
    补交课下测试(ch12并发编程) 08.第八周
    2017-2018-1 20155311 实验四 外设驱动程序设计
    2017-2018-1 学号20155311 《信息安全系统设计基础》第11周学习总结
    PWD的编译及调试
    2017-2018-1 学号20155311 《信息安全系统设计基础》第9周学习总结
    2017-2018-1 20155311 实验三 实时系统
  • 原文地址:https://www.cnblogs.com/newtol/p/10159119.html
Copyright © 2011-2022 走看看