动态SQL及其resultMap的功能 (Java+Oracle框架--mybatis)

本文介绍了在Java+Oracle框架下MyBatis的动态SQL使用,包括项目结构、核心配置、工具类和POJO的创建。重点讲解了动态SQL的配置及查询,以及如何处理属性和列名不一致的问题。resultMap功能的探讨,包括处理属性与列名不一致的情况,以及解决联表查询中一对一和一对多关系映射的方法。
摘要由CSDN通过智能技术生成

动态SQL

项目结构:

在这里插入图片描述

一、核心配置文件 (配置了log4j)

<?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 核心配置文件的根元素   -->
<configuration>

	<!-- properties 加载外部的配置文件 -->
	<properties resource="db.properties"/>

	<!-- settings 标签 -->
	<settings>
		<!-- 设置mybatis使用log4j日志支持 -->
		<setting name="logImpl" value="LOG4J"/>
	</settings>

	<!-- typeAliases 定义别名 -->
	<typeAliases>
		<package name="com.xxxx.pojo"/>
	</typeAliases>

	<!-- 
		用于指定使用哪一个开发环境
	 -->
	<environments default="ev">
		<environment id="ev">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="${driver}"/>
		        <property name="url" value="${url}"/>
		        <property name="username" value="${username}"/>
		        <property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>

	<!--接口绑定方案: 通过mapper配置扫描的接口-->
	<mappers>
		<!--配置整个包mappers所有的接口-->
		<package name="com.xxxx.mappers"/>
	</mappers>
</configuration>

二、工具类 和 pojo

package com.xxxx.utils;

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 java.io.IOException;

/*
    封装获取回话的工具类->静态
 */
public class SessionUtils {
   
    //回话工厂  单例
    private static SqlSessionFactory factory = null;

    static{
   
        try {
   
            factory =  new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }

    //获取回话
    public static SqlSession getSession(){
   
        SqlSession session = null;
        if(factory!=null){
   
            session = factory.openSession(true);  //参数true->自动提交  默认为false手动提交
        }
        return session;
    }
}

package com.xxxx.pojo;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

public class Emp implements Serializable {
   
    private int empno;
    private String ename;
    private String job;
    private int mgr;
    private double sal;
    private double comm;
    private Date date;
    private Integer deptno;

    public Emp() {
   
    }

    public Emp(int empno, String name, String job, int mgr, double sal, double comm, Date hiredate, Integer deptno) {
   
        this.empno = empno;
        this.ename = name;
        this.job = job;
        this.mgr = mgr;
        this.sal = sal;
        this.comm = comm;
        this.date = hiredate;
        this.deptno = deptno;
    }

    public int getEmpno() {
   
        return empno;
    }

    public void setEmpno(int empno) {
   
        this.empno = empno;
    }

    public String getEname() {
   
        return ename;
    }

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

    public String getJob() {
   
        return job;
    }

    public void setJob(String job) {
   
        this.job = job;
    }

    public int getMgr() {
   
        return mgr;
    }

    public void setMgr(int mgr) {
   
        this.mgr = mgr;
    }

    public double getSal() {
   
        return sal;
    }

    public void setSal(double sal) {
   
        this.sal = sal;
    }

    public double getComm() {
   
        return comm;
    }

    public void setComm(double comm) {
   
        this.comm = comm;
    }

    public Date getDate() {
   
        return date;
    }

    public void setDate(Date date) {
   
        this.date = date;
    }

    public Integer getDeptno() {
   
        return deptno;
    }

    public void setDeptno(Integer deptno) {
   
        this.deptno = deptno;
    }

    @Override
    public String toString() {
   
        return "Emp{" +
                "empno=" + empno +
                ", name='" + ename + '\'' +
                ", job='" + job + '\'' +
                ", mgr=" + mgr +
                ", sal=" + sal +
                ", comm=" + comm +
                ", hiredate=" + date +
                ", deptno=" + deptno +
                '}';
    }

    @Override
    public boolean equals(Object o) {
   
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Emp emp = (Emp) o;
        return empno == emp.empno &&
                mgr == emp.mgr &&
                Double.compare(emp.sal, sal) == 0 &&
                Double.compare(emp.comm, comm) == 0 &&
                Objects.equals(ename, emp.ename) &&
                Objects.equals(job, emp.job) &&
                Objects.equals(date, emp.date) &&
                Objects.equals(deptno, emp.deptno);
    }

    @Override
    public int hashCode() {
   
        return Objects.hash(empno, ename, job, mgr, sal, comm, date, deptno);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值