【Mybatis】Mybatis對clob字段的處理


【前篇】

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM