达梦数据库应用开发_MyBatis框架介绍_yxy

1 MyBatis框架是什么?

MyBatis 前身是 iBatis,它最初由 Clinton Begin 于 2002 年创建,2010 年更名为 MyBatis。

它支持自定义 SQL、存储过程以及高级映射,能够帮助开发者更方便地实现 Java 对象与数据库表之间的映射,完成数据的持久化操作。

MyBatis 可以通过 XML 或注解的方式将 SQL 语句与 Java 方法进行绑定,使得开发者能够以面向对象的方式操作数据库。

MyBatis框架核心概念为:

SQL 与 Java 代码耦合问题:
MyBatis 将 SQL 语句从 Java 代码中分离出来,存储在 XML 文件或注解中,实现了业务逻辑和数据访问逻辑的解耦,提高了代码的可维护性

手动处理结果集映射问题:
MyBatis 提供了强大的结果集映射功能,能够自动将查询结果映射到 Java 对象中,减少了开发者的工作量。

数据库连接管理问题:
在 JDBC 编程中,需要手动管理数据库连接的创建、使用和关闭,容易出现连接泄漏等问题。MyBatis 提供了连接池管理功能,能够自动管理数据库连接的生命周期,提高了数据库连接的使用效率和安全性。

优势:
1.灵活的 SQL 编写:
MyBatis 允许开发者直接编写 SQL 语句,能够充分利用数据库的特性,对于复杂的 SQL 查询和特定的数据库操作非常方便。开发者可以根据实际需求灵活调整 SQL 语句,以达到最佳的性能。例如,对于一些复杂的报表查询,开发者可以编写高效的 SQL 语句来满足业务需求。

2.良好的可维护性:由于 SQL 语句和 Java 代码分离,当数据库表结构或 SQL 语句需要修改时,只需要修改对应的 XML 文件或注解,不会影响到 Java 代码的逻辑,降低了维护成本。同时,MyBatis 的配置文件和代码结构清晰,便于开发者进行代码的阅读和维护。

3.强大的映射功能:MyBatis 提供了丰富的映射方式,包括基本类型映射、复杂对象映射、一对一映射、一对多映射等。开发者可以根据不同的业务需求选择合适的映射方式,实现 Java 对象与数据库表之间的灵活映射。

4.支持多种数据库:MyBatis 是一个数据库无关的框架,它支持多种数据库,如 MySQL、Oracle、SQL Server、PostgreSQL 等。开发者只需要在配置文件中指定不同的数据库方言,就可以轻松地切换数据库。

5.可扩展性强:MyBatis 具有良好的扩展性,开发者可以通过插件机制对其进行扩展,实现自定义的功能。例如,开发者可以开发自己的分页插件、缓存插件等,以满足不同的业务需求。

2 MyBatis框架基本使用

2.1 依赖包导入

下载链接
JAVA_Mybatis.zip
在这里插入图片描述

2.2 开发示例_基础绑定参数示例

2.2.1 初始化数据库表

CREATE TABLE "JAVA_MYBATIS_TABLE"
(
"ID" INT,
"NAME" VARCHAR(50) NOT NULL)

2.2.2 构建相关包结构

在这里插入图片描述

2.2.3 主配置文件

书写 MyBatis 的主配置文件:mybatis-config.xml,存放 src 目录下
在这里插入图片描述

<?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>
    <!-- <!– 引入 db.properties 文件 –> -->
    <properties resource="jdbc.properties"></properties>
    <!-- 配置 mybatis 运行环境-->
    <environments default="development">
        <environment id="development">
            <!-- 配置事务管理,采用 JDBC 的事务管理 -->
            <transactionManager type="JDBC" />
            <!-- POOLED:mybatis 自带的数据源,JNDI:基于 Tomcat 的数据源 -->
            <!--使用 DB.properties-->
            <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>
    <!-- 将 mapper 文件加入到配置文件中 mapper 文件是写 SQL 语句的文件 -->
    <mappers>
        <!--普通数据的增删改查/-->
        <mapper resource="dm_04/dao/Java_MyBatis_Mapper.xml" />
    </mappers>
</configuration>

src 目录下添加 jdbc.properties 配置文件

jdbc.driver=dm.jdbc.driver.DmDriver
jdbc.url=jdbc:dm://localhost:5236
jdbc.username=SYSDBA
jdbc.password=*****

2.2.5 实体类POJO

创建跟数据库表对应的实体类

package dm_04.pojo;

public class Java_MyBatis {
	private Integer ID;
	private String NAME;
	public int getID() {
		return ID;
	}
	public void setID(Integer ID) {
		this.ID = ID;
	}
	public String getNAME() {
		return NAME;
	}
	public void setNAME(String NAME) {
		this.NAME = NAME;
	}
	public Java_MyBatis(Integer ID, String NAME) {
		super();
		this.ID = ID;
		this.NAME = NAME;
	}
	public Java_MyBatis() {
		super();
	}
	@Override
	public String toString() {
		return "Java_MyBatis [ID=" + ID + ", NAME=" + NAME + "]";
	}
}

2.2.6 数据访问层

接口

dm_04/Java_MyBatis_Mapper.java

package dm_04.dao;

import java.util.List;

import dm_04.pojo.Java_MyBatis;

public interface Java_MyBatis_Mapper {
	    public List<Java_MyBatis> selectAll();
	    public int selectCount();
	    public Java_MyBatis selectById(Integer id);
	    public void insertJava_MyBatis(Java_MyBatis Java_MyBatis);
	    public void deleteById(Integer id);
	    public void updateJava_MyBatis(Java_MyBatis Java_MyBatis);
}

对应配置文件
<?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">
<!--命名空间  会映射到 接口-->
<mapper namespace="dm_04.dao.Java_MyBatis_Mapper">
    <!--parameterType 参数类型 -->
    <!--resultType 返回结果集类型 -->
    
    <!--查询所有数据-->
    <select id="selectAll" resultType="dm_04.pojo.Java_MyBatis">
      select * from JAVA_MYBATIS_TABLE;
    </select>
    
    <!--查询总条数-->
    <select id="selectCount" resultType="int">
      select count(*) from JAVA_MYBATIS_TABLE;
    </select>
    
    <!--根据 ID 查询指定信息-->
    <!--有参数   有返回值-->
    <select id="selectById" parameterType="java.lang.Integer"
            resultType="dm_04.pojo.Java_MyBatis">
      select * from JAVA_MYBATIS_TABLE WHERE ID = #{ID};
    </select>
    
    <!--插入信息   -->
    <insert id="insertJava_MyBatis" parameterType="dm_04.pojo.Java_MyBatis" >
        INSERT into JAVA_MYBATIS_TABLE(ID,name)VALUES(#{ID},#{NAME});
    </insert>
    
    <!--根据 id 删除信息-->
    <delete id="deleteById" parameterType="int">
        delete from JAVA_MYBATIS_TABLE where ID = #{ID};
    </delete>
    
    <!--根据 id 修改信息-->
    <update id="updateJava_MyBatis" parameterType="dm_04.pojo.Java_MyBatis">
        update JAVA_MYBATIS_TABLE set NAME = #{NAME}
        where ID = #{ID}
    </update>
</mapper>

2.2.7 创建测试类,开始测试

package dm_04.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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.Test;
import dm_04.dao.Java_MyBatis_Mapper;
import dm_04.pojo.Java_MyBatis;

public class Test_MyBatis {
		SqlSession sqlSession = null;
		Java_MyBatis_Mapper java_MyBatis_Mapper = null;
		public void init() {
			try {
			//1. 生成 sqlsession factory biulder 对象
		    SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
		    //2. 加载配置文件作为一个输入流
		    InputStream resourceAsStream;
				resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
		    //3. 通过会话工厂构造器 对象和  配置文件流 构建一个会话构造工厂
		    SqlSessionFactory factory = sfb.build(resourceAsStream);
		    //4. 通过 sql 会话工厂 //true 设置 mybatis 事务自动提交
		    sqlSession = factory.openSession(true);
		  
		    java_MyBatis_Mapper = sqlSession.getMapper(Java_MyBatis_Mapper.class);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//测试插入信息
	    @Test
	    public void testInstert(Integer ID, String NAME){
			this.init();
			java_MyBatis_Mapper.insertJava_MyBatis(new Java_MyBatis(ID, NAME));
	    }
	    //测试修改信息
	    @Test
	    public void testUpdate(Integer ID, String NAME){
	    	Java_MyBatis java_MyBatis = java_MyBatis_Mapper.selectById(ID);
	    	java_MyBatis.setNAME(NAME);
	    	java_MyBatis_Mapper.updateJava_MyBatis(java_MyBatis);
	    }
	    //测试根据 id 查询指定人信息
	    @Test
	    public void testSelectById(Integer id){
	    	Java_MyBatis java_MyBatis = java_MyBatis_Mapper.selectById(id);
	        System.out.println(java_MyBatis);
	    }
	    //测试全查
	    @Test
	    public void testSelectAll(){
	        List<Java_MyBatis> list = java_MyBatis_Mapper.selectAll();
	        for(Java_MyBatis p: list){
	            System.out.println(p);
	        }
	    }
	    //测试删除
	    @Test
	    public  void testDelete(Integer ID){
	    	java_MyBatis_Mapper.deleteById(ID);
	    }
	    
		public static void main(String[] args) {
			Test_MyBatis test = new Test_MyBatis();
			test.init();
			test.testInstert(1,"yxy_01");
			test.testInstert(2,"yxy_02");
			test.testInstert(3,"yxy_03");
			
			test.testUpdate(1,"yxy_000001");
			
	        test.testSelectById(1);
	        
	        test.testDelete(1);
	        
	        test.testSelectAll();
	        
		}
	}


2.2.8 打印出结果为

数据库表中初始数据为
[ID=2, NAME=yxy_02]
[ID=3, NAME=yxy_03]

Java_MyBatis [ID=1, NAME=yxy_000001]
Java_MyBatis [ID=2, NAME=yxy_02]
Java_MyBatis [ID=3, NAME=yxy_03]

2.3 开发示例_大字段操作示例

2.3.1 创建大字段类型的表

CREATE TABLE "JAVA_MYBATIS_BIG_DATA_TABLE"
(
"ID" INT IDENTITY(1, 1) NOT NULL,
"PHOTO" IMAGE,
"DESCRIBE" BLOB,
"TXT" CLOB,
NOT CLUSTER PRIMARY KEY("ID"));

2.3.2 准备测试文件

本地准备两个大文件进行测试
在这里插入图片描述

2.3.3 主配置文件

修改 MyBatis 的主配置文件:mybatis-config.xml
在这里插入图片描述

2.3.4 大字段对应实体类POJO

Java_MyBatis_BigData.java

package dm_04.pojo;

public class Java_MyBatis_BigData {
	private Integer id;
	private byte[] photo; //mybatis将 Image 和Blob 映射成byte[]
	private byte[] describe;
	private String txt; //mybatis 将 Clob 映射成 String
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public byte[] getPhoto() {
		return photo;
	}
	public void setPhoto(byte[] photo) {
		this.photo = photo;
	}
	public byte[] getDescribe() {
		return describe;
	}
	public void setDescribe(byte[] describe) {
		this.describe = describe;
	}
	public String getTxt() {
		return txt;
	}
	public void setTxt(String txt) {
		this.txt = txt;
	}
	@Override
	public String toString() {
		return "TestBigDate [id=" + id + ", txt=" + txt + "]";
	}
	public Java_MyBatis_BigData(Integer id, byte[] photo, byte[] describe, String txt) {
		super();
		this.id = id;
		this.photo = photo;
		this.describe = describe;
		this.txt = txt;
	}
	public Java_MyBatis_BigData() {
		super();
	}
}


2.3.5 数据访问层

接口

Java_MyBatis_BigData_Mapper.java

package dm_04.dao;

import java.util.List;

import dm_04.pojo.Java_MyBatis_BigData;

public interface Java_MyBatis_BigData_Mapper {
	    //插入大字段
		public void InsertIntoJava_MyBatis_BigData(Java_MyBatis_BigData bigdate);
		//查询大字段
		public List<Java_MyBatis_BigData> SelectFromJava_MyBatis_BigData();
}

对应配置文件

Java_MyBatis_BigData_Mapper.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">
<!--命名空间  会映射到 接口-->
<mapper namespace="dm_04.dao.Java_MyBatis_BigData_Mapper">
    <!--parameterType 参数类型 -->
    <!--resultType 返回结果集类型 -->
    
    <!--查询所有数据-->
    <select id="SelectFromJava_MyBatis_BigData" resultType="dm_04.pojo.Java_MyBatis_BigData">
      select * from JAVA_MYBATIS_BIG_DATA_TABLE;
    </select>
    
    <!--插入信息   -->
    <insert id="InsertIntoJava_MyBatis_BigData" parameterType="dm_04.pojo.Java_MyBatis_BigData" >
        INSERT into JAVA_MYBATIS_BIG_DATA_TABLE(photo,describe,txt)VALUES (
        	#{photo},#{describe},#{txt}
        );
    </insert>
</mapper>

2.3.6 大字段数据测试类

Test_MyBatis_BigData.java

package dm_04.test;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
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 dm_04.dao.Java_MyBatis_BigData_Mapper;
import dm_04.pojo.Java_MyBatis_BigData;

public class Test_MyBatis_BigData {

	
		SqlSession sqlSession = null;
		Java_MyBatis_BigData_Mapper java_MyBatis_BigData_Mapper = null;
		public void init() {
			try {
			//1. 生成 sqlsession factory biulder 对象
		    SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
		    //2. 加载配置文件作为一个输入流
		    //这里 Resources 使用的包是 ibatis 包
		    InputStream resourceAsStream;
				resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
		    //3. 通过会话工厂构造器 对象和  配置文件 流  构建一个会话构造工厂
		    SqlSessionFactory factory = sfb.build(resourceAsStream);
		    //4. 通过 sql 会话工厂 //true 设置 mybatis 事务自动提交
		    sqlSession = factory.openSession(true);
		    java_MyBatis_BigData_Mapper = sqlSession.getMapper(Java_MyBatis_BigData_Mapper.class);
		    resourceAsStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		//测试插入大字段表
		private void testInsert() {
			try {
			String filePath = "D:\\DM\\test\\java20250223\\photo_test.jpg";
			File file = new File(filePath);
			String filePath2 = "D:\\DM\\test\\java20250223\\clob_test.txt";
			File file2 = new File(filePath2);
			InputStream in;
			in = new BufferedInputStream(new FileInputStream(file));
			byte[] bytes1 = new byte[732160];//缓冲区要够大
			byte[] bytes2 = new byte[732160];//缓冲区要够大
			in.read(bytes1);
			InputStream in2 = new BufferedInputStream(new FileInputStream(file));
			in2.read(bytes2);
			BufferedReader reader = new BufferedReader(new InputStreamReader
					(new FileInputStream(file2),"UTF-8"));
			char[] chars = new char[4096];
			reader.read(chars);
			Java_MyBatis_BigData bigDate = new Java_MyBatis_BigData(null,bytes1,bytes2,new String(chars));
			java_MyBatis_BigData_Mapper.InsertIntoJava_MyBatis_BigData(bigDate);
			in.close();
			in2.close();
			reader.close();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//测试查询大字段表
		private void testSelect() {
			List<Java_MyBatis_BigData> list = java_MyBatis_BigData_Mapper.SelectFromJava_MyBatis_BigData();
			try {
				for(Java_MyBatis_BigData big:list) {
					//打印出 id
					System.out.println("id = "+big.getId());
					//将 photo 列信息 输出到指定路径
					FileOutputStream fos = new FileOutputStream("D:\\DM\\test\\java20250223\\"+big.getId()+"_mybatis_photo_test.jpg");
					fos.write(big.getPhoto());
					//将 describe 列信息 输出到指定路径
					FileOutputStream fos2 = new FileOutputStream("D:\\DM\\test\\java20250223\\"+big.getId()+"_mybatis_describe_test.jpg");
					fos2.write(big.getDescribe());
					//将 txt 列信息 输出到控制台
					System.out.println("txt="+big.getTxt());
					fos.close();
					fos2.close();
			}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		public static void main(String[] args) {
			Test_MyBatis_BigData test = new Test_MyBatis_BigData();
			test.init();
			test.testInsert();
			test.testSelect();
		}	
	}

2.3.7 打印结果

id = 1
txt=clob_test.txt文本

//1.插入大字段信息:  
    package java_jdbc;
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    public class jdbc_operate_bigData{
        // 定义 DM JDBC 驱动串
        static String jdbcString = "dm.jdbc.driver.DmDriver";
        // 定义 DM URL 连接串
        ............

输出文件为
在这里插入图片描述

下一篇
达梦数据库应用开发_MyBatis-Plus 框架_yxy


更多其他数据库相关专栏:

1.数据库优化
数据库优化基本思路、索引详解、执行计划、统计信息、CBO原理、单表优化、多表优化、分布式优化、子查询、优化案例等
数据库优化(sql优化)专栏连接

2.达梦分布式数据库:
部署详细步骤(DEM)、备份还原实战、核心特性理解、使用心得、表分区方式详细介绍、表分区最佳实践、DPC架构详解等
达梦分布式DPC专栏连接

3.应用开发类
jdbc、hibernate、ibatis、mybatis、MyBatis-Plus、Spring、中间件mycat、Sharding-JDBC等
达梦数据库应用开发专栏连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值