文章目录
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.jar
(pom.xml 文件下
) db.properties(resources 文件下)
:配置你本地 Oracle 用户名,密码,url
- 注意 Oracle 依赖包:
- 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();
}
}