MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
开发环境搭建
软件
版本
DM 数据库
DM 8.0 及以上版本
JDK
JDK 8
Eclipse
2018-12 (4.10.0)
mybatis
3.4.4
安装 DM 数据库 请参考 DM 数据库快速上手指南 。
数据库安装过程中,请勾选创建 BOOKSHOP,DMHR 示例库,作为数据库模拟环境,如下图所示:
安装 Java 开发工具包–JDK 双击安装包进行安装,安装步骤简单,点击【下一步】安装即可。以安装目录 D:\java\jdk1.8.0_111 为例,安装完成如下图所示:
安装成功后需要配置 JDK 环境变量,即将 JDK 安装路径的 bin 路径复制到环境变量 path 里,如下图所示:
环境变量配置成功后,可使用 win+R 打开命令提示符,输入 java -version 命令,可以正常出现 JDK 版本号,即环境变量配置成功,如下图所示:
注意 JDK 安装完成后还需配置环境变量 ,环境变量配置不正确会导致项目启动报错。
因环境变量配置错误导致的常见错误代码如下:
Unable to find a javac compiler; Perhaps JAVA_HOME does not point to the JDK;
安装集成开发环境 eclipse 正确配置 Java 环境变量后,eclipse 可正常打开。
开发示例 MyBatis 框架的搭建
准备项目所需 jar 包 。
新建项目 JAVA_Mybatis,并导入项目所需 jar 包,如下图所示:
注意 复制 jar 包到 lib 文件夹后,要选择所有 jar 包,鼠标右键,Build path–>Add to Build path。
在 src 源码目录下创建如下包名,完整项目目录结构如下图所示:
书写 Mybatis 的主配置文件:mybatis-config.xml,存放在 src 目录下。mybatis-config.xml 文件如下所示:
<?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 > <properties resource ="jdbc.properties" > </properties > <environments default ="development" > <environment id ="development" > <transactionManager type ="JDBC" /> <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 > <mappers > <mapper resource ="com/dao/PersonMapper.xml" /> </mappers > </configuration >
添加 jdbc.properties 配置文件,(主要配置 driver、url、username、password 等)。
修改数据库连接信息,只修改 jdbc.properties 里的字段即可。jdbc.properties 文件如下所示:
jdbc.driver =dm.jdbc.driver.DmDriver jdbc.url =jdbc:dm://localhost:5236 jdbc.username =SYSDBA jdbc.password =SYSDBA
基础绑定参数示例代码 基本操作使用的数据表为示例库中 Product 的 PRODUCT_CATEGORY 表,对应于数据库表添加实体类 PRODUCT_CATEGORY,其位置放于 com.pojo 下。
操作数据库对应的实体类 PRODUCT_CATEGORY.java 文件如下所示:
package com.pojo;public class PRODUCT_CATEGORY { private int PRODUCT_CATEGORYID; private String NAME; public int getPRODUCT_CATEGORYID () { return PRODUCT_CATEGORYID; } public void setPRODUCT_CATEGORYID (int pRODUCT_CATEGORYID) { PRODUCT_CATEGORYID = pRODUCT_CATEGORYID; } public String getNAME () { return NAME; } public void setNAME (String nAME) { NAME = nAME; } public PRODUCT_CATEGORY (int pRODUCT_CATEGORYID, String nAME) { super (); PRODUCT_CATEGORYID = pRODUCT_CATEGORYID; NAME = nAME; } public PRODUCT_CATEGORY () { super (); } }
数据访问层接口 ProductCategoryMapper.java 文件如下所示:
java package com.dao; import java.util.List; import com.pojo.ProductCategory; public interface ProductCategoryMapper { public List<ProductCategory> selectAll(); public int selectCount(); public ProductCategory selectProductCategoryById(Integer id); public void insertProductCategory(ProductCategory ProductCategory); public void deleteById(Integer id); public void updateProductCategory(ProductCategory ProductCategory); }
数据访问层接口对应配置文件 <?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="com.dao.ProductCategoryMapper"> <!--parameterType 参数类型 --> <!--resultType 返回结果集类型 --> <!--查询所有数据--> <select id="selectAll" resultType="com.pojo.ProductCategory"> select * from PRODUCTION.PRODUCT_CATEGORY; </select> <!--查询总条数--> <select id="selectCount" resultType="int"> select count(*) from PRODUCTION.PRODUCT_CATEGORY; </select> <!--根据 ID 查询指定信息--> <!--有参数有返回值--> <select id="selectProductCategoryById" parameterType="java.lang.Integer" resultType="com.pojo.ProductCategory"> select * from PRODUCTION.PRODUCT_CATEGORY WHERE PRODUCT_CATEGORYID = #{PRODUCT_CATEGORYID}; </select> <!--插入信息--> <insert id="insertProductCategory" parameterType="com.pojo.ProductCategory" > INSERT into PRODUCTION.ProductCategory(name)VALUES ( #{name} ); </insert> <!--根据 id 删除信息--> <delete id="deleteById" parameterType="int"> delete from PRODUCTION.PRODUCT_CATEGORY where PRODUCT_CATEGORYID = #{PRODUCT_CATEGORYID}; </delete> <!--根据 id 修改信息--> <update id="updateProductCategory" parameterType="com.pojo.ProductCategory"> update PRODUCTION.PRODUCT_CATEGORY set NAME = #{NAME} where PRODUCT_CATEGORYID = #{PRODUCT_CATEGORYID} </update> </mapper>
测试类 TestProduct.java 文件如下所示:
java package com.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 com.dao.ProductCategoryMapper; import com.pojo.ProductCategory; public class TestProduct { SqlSession sqlSession = null; ProductCategoryMapper productCategoryMapper = 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); productCategoryMapper = sqlSession.getMapper(ProductCategoryMapper.class); } catch (IOException e) { e.printStackTrace(); } } //测试插入信息 @Test public void testInstert(){ productCategoryMapper.insertProductCategory(new ProductCategory(null, "语文")); } //测试修改信息 @Test public void testUpdate(){ ProductCategory productCategory = productCategoryMapper.selectProductCategoryById(4); productCategory.setNAME("英语"); productCategoryMapper.updateProductCategory(productCategory); } //测试根据 id 查询指定人信息 @Test public void testSelectPersonById(){ ProductCategory productCategory = productCategoryMapper.selectProductCategoryById(1); System.out.println(productCategory); } //测试全查 @Test public void testSelectAll(){ List<ProductCategory> list = productCategoryMapper.selectAll(); for(ProductCategory p: list){ System.out.println(p); } } //测试删除 @Test public void testDelete(){ productCategoryMapper.deleteById(5); } public static void main(String[] args) { TestProduct test = new TestProduct(); test.init(); test.testUpdate(); test.testSelectPersonById(); test.testSelectAll(); test.testDelete(); } }
运行后控制台截图如下所示:
运行后数据库表截图如下所示:
大字段操作示例
创建需要操作的含大字段类型的数据表。
CREATE TABLE "PRODUCTION" ."TEST_BIG_DATE" ( "id" INT IDENTITY (1 , 1 ) NOT NULL ,"photo" IMAGE,"describe" BLOB ,"txt" CLOB );
在 D 盘根目录下,创建 DM8 特点.jpg、达梦产品简介.txt 两个文件,作为大字段存储,如下图所示:
操作数据库对应的实体类 TestBigDate.java 文件如下所示:
package com.pojo;public class TestBigDate { private Integer id; private byte [] photo; private byte [] describe; private String txt; 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 TestBigDate (Integer id, byte [] photo, byte [] describe, String txt) { super (); this .id = id; this .photo = photo; this .describe = describe; this .txt = txt; } public TestBigDate () { super (); } }
数据访问层接口 TestBigDateMapper.java 文件如下所示:
package com.dao;import java.util.List;import com.pojo.TestBigDate;public interface TestBigDateMapper { public void InsertIntoTestBigDate (TestBigDate bigdate) ; public List<TestBigDate> SelectFromTestBigDate () ; }
数据访问层接口对应配置文件 <?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="com.dao.TestBigDateMapper"> <!--parameterType 参数类型--> <!--resultType 返回结果集类型--> <!--查询所有数据--> <select id="SelectFromTestBigDate" resultType="com.pojo.TestBigDate"> select * from PRODUCTION.TEST_BIG_DATE; </select> <!--插入信息--> <insert id="InsertIntoTestBigDate" parameterType="com.pojo.TestBigDate" > INSERT into PRODUCTION.TEST_BIG_DATE("photo","describe","txt")VALUES ( #{photo},#{describe},#{txt} ); </insert> </mapper>
测试类 Test_TestBigDate.java 文件如下所示:
package com.test;import java.io.BufferedInputStream;import java.io.BufferedReader; 「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。