欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

MyBatis访问Db2小例子

时间:2023-06-14
环境 Db2

$ db2levelDB21085I This instance or install (instance name, where applicable:"db2inst1") uses "64" bits and DB2 code release "SQL11050" with levelidentifier "0601010F".Informational tokens are "DB2 v11.5.0.0", "s1906061700", "DYN1906061700AMD64",and Fix Pack "0".Product is installed at "/opt/ibm/db2/V11.5".

Db2 JCC driver

db2jcc_license_cu.jardb2jcc4.jardb2java.zip //没用db2jcc.jar //不仅没用,而且会导致出错

注意,不能用 db2jcc.jar ,而要用 db2jcc4.jar 。当二者同时存在时,貌似就会用前者,从而报错: Method com/ibm/db2/jcc/am/hp.isClosed()Z is absstract

网上搜了一下,说是driver版本问题。

Anyway,只用 db2jcc4.jar 和 db2jcc_license_cu.jar 就OK,同时不能有 db2jcc.jar 。

MyBatis

登录MyBatis官网(http://www.mybatis.org),下载最新的release。

注:该网址会自动重定向到 https://blog.mybatis.org 。

我下载的是mybatis-3.5.9.zip。

解压后,得到mybatis-3.5.9.jar,以及lib目录下一堆jar包。

Database

SAMPLE

$ db2 connect to sample Database Connection Information Database server = DB2/LINUXX8664 11.5.0.0 SQL authorization ID = DB2INST1 Local database alias = SAMPLE

Table

T6

$ db2 describe table t6 Data type ColumnColumn name schema Data type name Length Scale Nulls------------------------------- --------- ------------------- ---------- ----- ------C1 SYSIBM INTEGER 4 0 YesC2 SYSIBM VARCHAR 8 0 Yes 2 record(s) selected.

代码

在Eclipse里新建一个Java project(本例中project name是 TestProject0209 ),在project上点击右键,属性,Java Build Path -> Libraries -> Add external JARs…,把Mybatis和jcc driver的jar包文件加进来,如下:

注:为了方便,我在project的根目录下创建了一个 lib 目录,并把3个jar文件都复制到这里了。

注:解压 mybatis-3.5.9.zip 后,在lib子目录下还有一堆jar文件,比如log4j-1.2.17.jar ,本例貌似用不上,所以都没加到project里。

在 src 目录下创建3个package:

pojodaoservice

在 pojo 下创建类 MyObject ,这是一个非常简单的POJO,对应DB里的table T6 :

c1 成员变量对应table的 c1 列c2 成员变量对应table的 c2 列

package pojo;public class MyObject {private int c1;private String c2;public int getC1() {return c1;}public void setC1(int c1) {this.c1 = c1;}public String getC2() {return c2;}public void setC2(String c2) {this.c2 = c2;}}

接下来我们来创建mapper,在 dao 下,创建 Test0209Mapper.java 和 Test0209Mapper.xml 文件。

Test0209Mapper.java

package dao;import java.util.List;import pojo.MyObject;public interface Test0209Mapper {int insert(MyObject obj);List read();}

Test0209Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>insert into t6 (c1, c2) values (#{c1}, #{c2})

在 src 目录下新建 mybatis-config.xml 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

注:

注释的driver属性,是MySQL的配置,若要改用MySQL,则这里需要相应改一下所有mapper都定义在最下面的mapper处,本例中只使用了一个mapper dao.Test0209Mapper ,这是mapper类的全路径

最后,我们在 service 下创建 TestMybatis 类,来测试一下mapper:

package service;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 pojo.MyObject;import dao.Test0209Mapper;public class TestMybatis {public static void main(String[] args) throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);try {Test0209Mapper mapper = sqlSession.getMapper(Test0209Mapper.class);System.out.println("Test 1: query t6");List list = mapper.read();list.forEach(e -> System.out.println("c1: " + e.getC1() + ", c2: " + e.getC2()));System.out.println("Test 2: insert into t6");MyObject obj = new MyObject();obj.setC1(123);obj.setC2("abc");mapper.insert(obj);System.out.println("Test 3: query t6 again");list = mapper.read();list.forEach(e -> System.out.println("c1: " + e.getC1() + ", c2: " + e.getC2()));} finally {sqlSession.close();}}}

运行程序,结果如下:

Test 1: query t6c1: 111, c2: xxxTest 2: insert into t6Test 3: query t6 againc1: 111, c2: xxxc1: 123, c2: abc

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。