达梦数据库应用开发_MyBatis框架介绍
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等
达梦数据库应用开发专栏连接