【前篇】
https://www.cnblogs.com/heyang78/p/15937919.html
https://www.cnblogs.com/heyang78/p/15937891.html
【綱領】
用jdbc處理clob字段,存入時需要創建Clob對象,然后以setString(1,"...")的方式存入;取出時需要把字段內容先放入Clob對象里,然后要用個char數組將內容一段段讀出來,再拼接成文字。一言以蔽之,有點麻煩!
在Mybatis的幫助下,Clob字段可以和varchar2,nvarchar2字段等同視之,一律映射為String類型,其中繁瑣工作就由Mybatis代行就好了,便利很多。
【表結構】
create table test03( id number(3), content clob, primary key(id) )
映射的類:
public class Article { private long id; private String content; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
注意Article的content成員和表Test03的字段content的對應關系。
【Mapper類】
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @Mapper public interface Test03Mapper { Article findById(long id); int addOne(@Param("id") long id, @Param("content") String content); }
【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="Test03Mapper"> <select id="findById" resultType="Article"> select * from test03 where id = #{id} </select> <insert id="addOne"> insert into test03 (id,content) values (#{id},#{content}) </insert> </mapper>
【存入代碼】
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.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; public class MybatisClobWriter { public static void main(String[] args) throws Exception{ String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try (SqlSession session = sqlSessionFactory.openSession()) { Test03Mapper mapper = session.getMapper(Test03Mapper.class); String content=readFromFile("c:\\hy\\yylj.txt"); mapper.addOne(2,content); session.commit(); } } static String readFromFile(String path) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8")); String line = null; StringBuilder sb=new StringBuilder(); while( ( line = br.readLine() ) != null ) { sb.append(line+"\n"); } br.close(); return sb.toString(); } }
【取出代碼】
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.InputStream; public class MybaticClobReader { public static void main(String[] args) throws Exception{ String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try (SqlSession session = sqlSessionFactory.openSession()) { Test03Mapper mapper = session.getMapper(Test03Mapper.class); Article a = mapper.findById(2); System.out.println(a.getContent()); } } }
【代碼下載】
https://files.cnblogs.com/files/heyang78/RestAccessEs220226.rar?t=1645882753
END