zoukankan      html  css  js  c++  java
  • MyBatis学习存档(1)——入门

    一、简介

    MyBatis的前身是iBatis,本是Apache的一个开源的项目

    MyBatis是一个数据持久层(ORM)框架,把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现

    MyBatis小巧,简单易学,优点如下:

    基于SQL语法,简单易学

    能了解底层组装过程

    SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度

    程序调试方便

    二、入门

    2.1 环境搭建

    1、创建项目,Java或Web项目均可,此处以Java项目为例:

    2、下载mybatis及其他所需jar包,导入工程

    MyBatis:下载地址为https://github.com/mybatis/mybatis-3/releases

    此处以3.2.7版本为例,核心jar包为mybatis-3.2.7.jar,lib中为可选依赖包

    mybatis-generator-core.jar:用于反向生产

    (以上jar包可在https://gitee.com/shizuru/MyBatis下载)

    JDBC驱动包:下载数据库相对应的驱动包即可

     3、建立数据库并加入几条测试数据(此处以SqlServer为例)

    sql脚本:

    CREATE DATABASE test;
    USE test;
    CREATE TABLE users(id INT PRIMARY KEY identity(1,1), name VARCHAR(20), password VARCHAR(20));
    INSERT INTO users(name, password) VALUES ('aaa', '123');
    INSERT INTO users(name, password) VALUES ('bbb', '456');

    至此环境搭建完毕

    2.2 反向生成实体类和映射文件

    1、编写反向生成配置文件generatorConfig.xml(在src目录下)

    <?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>
        <context id="testTables" targetRuntime="MyBatis3">
            <commentGenerator>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true" />
            </commentGenerator>
            <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
            <jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
                connectionURL="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test" userId="sa"
                password="123456">
            </jdbcConnection>
    
            <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
                NUMERIC 类型解析为java.math.BigDecimal -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
    
            <!-- targetProject:生成实体类的位置 -->
            <javaModelGenerator targetPackage="com.pojo"
                targetProject=".\src">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
                <!-- 从数据库返回的值被清理前后的空格 -->
                <property name="trimStrings" value="true" />
            </javaModelGenerator>
            <!-- targetProject:mapper映射文件生成的位置 -->
            <sqlMapGenerator targetPackage="com.mapper" 
                targetProject=".\src">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </sqlMapGenerator>
            <!-- targetPackage:mapper接口生成的位置 -->
            <javaClientGenerator type="XMLMAPPER"
                targetPackage="com.mapper" 
                targetProject=".\src">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </javaClientGenerator>
            <!-- 指定数据库表 -->
            <table tableName="users"  selectByExampleQueryId="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableCountByExample="false" ></table>
        
        </context>
    </generatorConfiguration>

    2、编写映射java代码

    package com.util;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.mybatis.generator.api.MyBatisGenerator;
    import org.mybatis.generator.config.Configuration;
    import org.mybatis.generator.config.xml.ConfigurationParser;
    import org.mybatis.generator.internal.DefaultShellCallback;
    
    public class Build {
        public static void main(String[] args) throws Exception {
    
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            //映射配置文件
            File configFile = new File("generatorConfig.xml");
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);  
            System.out.println("映射完成");
            
        }
    }

    3、执行反向程序,刷新项目,可看见已经在配置路径下生成实体类和映射文件了

    2.3 使用MyBatis对数据库进行操作

     1、编写MyBatis核心配置文mybatis-config.xml及数据库配置文件database.properties

    <?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="database.properties"></properties>
          
          <!-- 起别名 -->
          <typeAliases>
              <package name="com.pojo"/>
          </typeAliases>
          
         <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                   <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>
            <package name="com.mapper"/>
          </mappers>
          
    </configuration>
    jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
    jdbc.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test
    jdbc.username=sa
    jdbc.password=123456

    2、编写测试类

    由于反向生成的映射文件中自带了6种查询方法,所以此处直接使用其中的selectByPrimaryKey方法进行查询操作

    这里有2种执行查询操作的方法:

    package com.test;
    
    import java.io.InputStream;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import com.mapper.UsersMapper;
    import com.pojo.Users;
    
    public class Test1 {
        
        public static void main(String[] args) throws Exception {
            //mybatis的核心配置文件
            String resource = "mybatis-config.xml";
            //使用MyBatis提供的Resources类加载mybatis的配置文件
            InputStream  is = Resources.getResourceAsStream(resource);
            //构建SqlSession的工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            //开启SqlSession
            SqlSession session = factory.openSession();
            //通过映射接口执行查询
            UsersMapper mapper = session.getMapper(UsersMapper.class);
            Users user1 = mapper.selectByPrimaryKey(1);
            //映射sql的标识字符串
            String statement = "com.mapper.UsersMapper.selectByPrimaryKey";
            //执行查询
            Users user2 = session.selectOne(statement, 1);
            //输出结果
            System.out.println("user1:" + user1.getName() + "=======" + user1.getPassword());
            System.out.println("user2:" + user2.getName() + "=======" + user2.getPassword());
        }
    
    }

    输出结果如下:

     

    最终项目目录结构如下:

  • 相关阅读:
    angular 按下回车键触发事件
    vue 父组件与子组件的通信
    最近在开发一个文章聚合的工具
    Martinjingyu的开发环境
    个推push数据统计(爬虫)
    基于redis的订单号生成方案
    电商平台--Mysql主从搭建(2)
    Mysql主从搭建(1)
    mysql物理级别热备脚本
    外键查询及删除
  • 原文地址:https://www.cnblogs.com/s1165482267/p/8031952.html
Copyright © 2011-2022 走看看