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());
    }

}

输出结果如下:

 

最终项目目录结构如下:

原文地址:https://www.cnblogs.com/s1165482267/p/8031952.html