idea + maven + mybaits + Oracle 环境搭建入门案例

1 概述

1.1 前言

  • 新手入坑,环境部署没啥大的难点,但很考验动手能力和熟练度。
  • 如果有条件,可以请大神吃个饭,让人家手把手教你配置一遍 ^_^
  • 因为工作中常用到的是 Oracle 数据库,所以本文以一个完整的案例,来对 Mybaits + Oracle 环境部署来进行讲解。
  • 案例下载 GIt 地址:https://github.com/YoYo-simida/MybaitsDemo
  • 扩展:工作中,最常见的架构是 SprintBoot + Maven + Mybaits + Oracle,其环境搭建入门案例地址:

温馨提醒:不同的人部署,部分步骤可能会有些不同,但大体流程都是一样的,咱刚开始学,只要能成功部署一次,体验常用的 增,删,修,查 即可。后面用多了,自然就熟悉了。

1.2 说明

  • idea 中自带有 Maven,入门案例中,你可以用自带的,也可以自己下载
    • 位置:File - Settings - 搜索 Maven
    • 或者下图的 “步骤2”
      在这里插入图片描述
  • 用到的数据库表 person(先插入一条记录,测试用)
SQL> desc person;
Name      Type         Nullable Default Comments 
--------- ------------ -------- ------- -------- 
PERSON_NO NUMBER(5)    Y                         
NAME      VARCHAR2(30) Y                         
SEX       VARCHAR2(2)  Y                         
BIRTHDAY  DATE         Y 
  • 用到的存储过程
CREATE OR REPLACE PROCEDURE SCOTT.pro_get_salsumbyename(v_name  IN scott.emp.ename%TYPE,
                                                       v_sal OUT NUMBER) AS

BEGIN
  SELECT SUM(t.sal) INTO v_sal FROM scott.emp t WHERE t.ename = v_name;
EXCEPTION
  WHEN OTHERS THEN
     dbms_output.put_line(SQLERRM);
END pro_get_salsumbyename;
  • 若发现截图中的文件,你在部署的时候没有,新建 一个即可。

1.3 目录结构

  • 要想在你本地运行此项目,注意替换以下几点
  • Java:
    • 注意 Oracle 依赖包:ojdbc6.jarpom.xml 文件下
    • db.properties(resources 文件下):配置你本地 Oracle 用户名,密码,url
  • DB:
    • 创建表: person
    • 创建过程: SCOTT.pro_get_salsumbyename(内容自定义亦可)
      在这里插入图片描述

2 详细步骤

2.1 步骤1:创建 Maven 工程

  • File -> New -> Project...
    在这里插入图片描述

(1) 录入 GroupId 和 ArtifactId

  • Next
    在这里插入图片描述

(2) 录入 Project Name

  • Finish
    在这里插入图片描述

(3) 检查 Maven 是否部署成功

  • 第一次导入 jar 包,会有点慢,耐心等待就好(界面最下面,会有 Running … 的进度条)
    在这里插入图片描述

2.2 步骤2:在 pom.xml 中配置依赖关系

(1) 配置 Oracle 依赖

  • oracle 是要收费的,不能通过远程的方式来引入,只能通过配置本地库来加载到工程里,所以得我们 手动安装.
  • 可在 Oracle 本地安装路径中找到 ojdbc6.jar (参考: D:\app\YoYo\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar)
  • Maven 命令:mvn install:install-file -Dfile=D:/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -DgeneratePom=true
    • 注意你 D:/ojdbc6.jar 包的位置
    • 和你自身 Oracle 的版本号 11.2.0.1.0(我的是 Oracle 11g)
      在这里插入图片描述
      在这里插入图片描述

(2) 配置 .xml 和 .properties 文件

  • 右下角弹出框框时,选择:Import changes
  • 很多小盆友启动项目时,找不到 XXX 配置文件,多半是这里没配置好
<?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.company.mybaitsdemo</groupId>
    <artifactId>mybaitsdemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--添加依赖 start-->
    <dependencies>
        <!--添加 Mybatis 依赖 start-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!--添加 Mybatis 依赖 end-->

        <!--添加 Oracle 依赖 start-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.1.0</version>
        </dependency>
        <!--添加 Oracle 依赖 end-->

        <!--添加日志依赖 start-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--添加日志依赖 end-->

        <dependency>
            <!--添加单元测试依赖 start-->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
            <!--添加单元测试依赖 end-->
        </dependency>
    </dependencies>
    <!--添加依赖 end-->

    <!--解决找不到配置文件的方法 start-->
    <build>
        <finalName>MybaitsDemo</finalName>
        <resources>
            <resource>
                <directory>${basedir}/src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
        </resources>
    </build>
    <!--解决找不到配置文件的方法 end-->
</project>

2.3 步骤3:文件配置

(1) mybaits-config.xml 主文件配置

项目启动时,第一个 进入的配置文件

  • 名字不一样非要按这个来,只是大家都习惯这样命名。
  • resources 文件夹下新建 mybaits-config.xml 文件
  • 复制 头文件(如果爆红,尝试导入包快捷键 Alter Enter
  • 建议,按照 “代码提示” 来写代码
<?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>
    <!--导入数据库连接属性 start-->
    <properties resource="db.properties"/>
    <!--导入数据库连接属性 end-->

    <!--设置别名, 简化书写 start-->
    <typeAliases>
        <typeAlias type="java.lang.Integer" alias="Integer"/>
    </typeAliases>
    <!--设置别名, 简化书写 end-->

    <!--对事物的管理和连接池的配置,default=id=自定义环境id,其他写法一般固定 start-->
    <environments default="dev_Oracle">
        <environment id="dev_Oracle">
            <transactionManager type="JDBC"></transactionManager>
            <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>
    <!--对事物的管理和连接池的配置,default=id=自定义环境id,其他写法一般固定 end-->

    <!--实体类映射配置 start-->
    <mappers>
        <mapper resource="com.company.mapper/PersonMapper.xml"/>
    </mappers>
    <!--实体类映射配置 end-->
</configuration>

(2) xxx.properties 配置

  • 比如 db.properties
  • 其他配置文件,如 log4j.properties 同理
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=SYSTEM
jdbc.password=Wy1239221426

(3) xxx.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">
<!--以上,文档声明部分: 注意格式别写错了-->

<!--com.company.mapper 中的 namespace 参数: 用来绑定 DAO 接口-->
<mapper namespace="com.company.mapper.PersonMapper">
    <!--定义返回值类型,其中 id=方法名,type=返回值类型,result=数据库列和实体类属性对应 start-->
    <resultMap id="personMap" type="com.company.domain.PersonDomain">
        <result column="PERSON_NO" property="personNo" jdbcType="INTEGER"/> <!--jdbcType 严格大写-->
        <result column="NAME" property="name" jdbcType="VARCHAR"/>
        <result column="SEX" property="sex" jdbcType="VARCHAR"/>
        <result column="BIRTHDAY" property="birthday" jdbcType="DATE"/>
    </resultMap>
    <!--定义返回值类型,其中 id=方法名,type=返回值类型,result=数据库列和实体类属性对应 end-->
    <!--具体的数据库操作 start-->
    <select id="select" resultMap="personMap">
        select * from person
    </select>

    <select id="selectByPersonNo" parameterType="Integer" resultMap="personMap">
        select * from person where person_no = #{personNo}
    </select>

    <insert id="insert">
        insert into person(PERSON_NO, NAME, SEX, BIRTHDAY)
        values(#{personNo}, #{name}, #{sex}, #{birthday})
    </insert>

    <update id="update" parameterType="com.company.domain.PersonDomain">
        update person set name = #{name}, sex = #{sex} where person_no = #{personNo}
    </update>

    <delete id="delete" parameterType="Integer">
      delete from person where person_no = #{personNo}
    </delete>
    <!--具体的数据库操作 end-->

    <parameterMap id="SalSumByEname" type="java.util.Map">
        <parameter property="v_name" mode="IN" jdbcType="VARCHAR"/> <!--jdbcType 严格大写-->
        <parameter property="v_sal" mode="OUT" jdbcType="INTEGER"/>
    </parameterMap>
    <select id="getSalSumByEname" parameterMap="SalSumByEname" statementType="CALLABLE">
        {CALL scott.pro_get_salsumbyename(?, ?)}
    </select>
</mapper>

2.4 实体类创建

  • getter(),setter()
  • toString()
package com.company.domain;

import java.util.Date;

/**
 * @Description: 实体类 Person
 * @Author: YoYo
 * @Date: 2019-12-18 22:55
 */
public class PersonDomain {
    private int personNo;
    private String name;
    private String sex;
    private Date birthday;

    public int getPersonNo() {
        return personNo;
    }

    public void setPersonNo(int personNo) {
        this.personNo = personNo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "PersonDomain{" +
                "personNo=" + personNo +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", birthday=" + birthday +
                '}';
    }
}

2.5 测试

package com.company.controller;

import com.company.domain.PersonDomain;
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 org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;


public class DemoTest {
    private Logger logger = Logger.getLogger(DemoTest.class.toString());
    private SqlSessionFactory sqlsessionFactory;

    @Before
    public void init() {
        try {
            String resource = "mybaits-config.xml";
            InputStream is = Resources.getResourceAsStream(resource);
            sqlsessionFactory = new SqlSessionFactoryBuilder().build(is);
            is.close();
            logger.info("主配置文件读取成功: mybaits-config.xml");
        } catch (IOException e) {
            logger.info("初始化配置文件报错:mybaits-config.xml");
            e.printStackTrace();
        }
    }

    @Test
    public void selectByPK() {
        SqlSession sqlSession = sqlsessionFactory.openSession();

        PersonDomain personDomain = new PersonDomain();
        personDomain.setPersonNo(1);

        List<PersonDomain> selectOne = sqlSession.selectList("selectByPersonNo", personDomain);
        logger.info("查询一条记录:开始");
        System.out.println(selectOne);
        logger.info("查询一条记录:结束");
        
		sqlSession.close();
    }

    @Test
    public void select() {
        SqlSession sqlSession = sqlsessionFactory.openSession();

        List<PersonDomain> selectAll = sqlSession.selectList("select");
        logger.info("查询所有记录:开始");
        for (PersonDomain p : selectAll
        ) {
            System.out.println(p);
        }
        logger.info("查询所有记录:结束");

        sqlSession.close();
    }

    @Test
    public void insert(){
        SqlSession sqlSession = sqlsessionFactory.openSession();

        PersonDomain personDomain = new PersonDomain();
        personDomain.setPersonNo(2);
        personDomain.setName("小悠悠");
        personDomain.setSex("女");
        personDomain.setBirthday(new Date());

        int insertPersonByPersonNo = sqlSession.insert("insert", personDomain);

        System.out.println("插入了 " + insertPersonByPersonNo + " 条记录");
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void update(){
        SqlSession sqlSession = sqlsessionFactory.openSession();

        PersonDomain personDomain = new PersonDomain();
        personDomain.setPersonNo(1);
        personDomain.setName("小游子");
        personDomain.setSex("女");

        int updatePersonByPersonNo = sqlSession.update("update", personDomain);
        System.out.println("更新了 " + updatePersonByPersonNo + " 条记录");

        sqlSession.commit();
        sqlSession.close();
    }


    @Test
    public void delete(){
        SqlSession sqlSession = sqlsessionFactory.openSession();

        PersonDomain personDomain = new PersonDomain();
        personDomain.setPersonNo(2);

        int deletePersonByPersonNo = sqlSession.delete("delete", personDomain);

        System.out.println("删除了 " + deletePersonByPersonNo + " 条记录");
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void procedure(){
        SqlSession sqlSession = sqlsessionFactory.openSession();

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("v_name", "SMITH");

        sqlSession.selectOne("getSalSumByEname", map);

        System.out.println(map.get("v_sal"));
        sqlSession.close();
    }
}
发布了43 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_34745941/article/details/103378115