小峰mybatis(1) 处理clob,blob等。。
一、mybatis处理CLOB、BLOB类型数据
create table t_student(
id int primary key auto_increment,
name varchar(20),
age int,
pic longblob,
remark longtext
)
项目结构:

1)jdbc.properties:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test_demo
jdbc.username=root
jdbc.password=123456
2)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"/>
<!-- 别名 -->
<typeAliases>
<package name="com.cy.model"/>
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments> <mappers>
<package name="com.cy.mapper"/>
</mappers>
</configuration>
3)Student.java model:
 package com.cy.model;
 public class Student {
     private Integer id;
     private String name;
     private Integer age;
     private byte[] pic;
     private String remark;
     public Integer 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 Integer getAge() {
         return age;
     }
     public void setAge(Integer age) {
         this.age = age;
     }
     public byte[] getPic() {
         return pic;
     }
     public void setPic(byte[] pic) {
         this.pic = pic;
     }
     public String getRemark() {
         return remark;
     }
     public void setRemark(String remark) {
         this.remark = remark;
     }
     @Override
     public String toString() {
         return "Student [id=" + id + ", name=" + name + ", age=" + age
                 + ", remark=" + remark + "]";
     }
 }
4)获取sqlSession:SqlSessionFactoryUtil.java:
package com.cy.util; import java.io.IOException;
import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SqlSessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory; public static SqlSessionFactory getSqlSessionFactory(){
if(sqlSessionFactory==null){
InputStream inputStream=null;
try {
inputStream=Resources.getResourceAsStream("mybatis_config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
} return sqlSessionFactory;
} public static SqlSession openSession(){
return getSqlSessionFactory().openSession();
}
}
5)测试代码:StudentTest.java: service层:
package com.cy.service; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream; import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.cy.mapper.StudentMapper;
import com.cy.model.Student;
import com.cy.util.SqlSessionFactoryUtil; public class StudentTest {
private SqlSession sqlSession=null;
private StudentMapper studentMapper=null; @Before
public void setUp() throws Exception {
sqlSession=SqlSessionFactoryUtil.openSession();
studentMapper=sqlSession.getMapper(StudentMapper.class);
} @After
public void tearDown() throws Exception {
sqlSession.close();
} @Test
public void testInsertStudent(){
Student student=new Student();
student.setName("zhangsan");
student.setAge(14);
student.setRemark("很长的文本...");
byte []pic=null;
try{
File file=new File("I://shoot.png");
InputStream inputStream=new FileInputStream(file);
pic=new byte[inputStream.available()];
inputStream.read(pic);
inputStream.close();
}catch(Exception e){
e.printStackTrace();
}
student.setPic(pic);
studentMapper.insertStudent(student);
sqlSession.commit();
} @Test
public void testGetStudentById(){
Student student=studentMapper.getStudentById(1);
System.out.println(student);
byte []pic=student.getPic();
try{
File file=new File("i://boy.png");
OutputStream outputStream=new FileOutputStream(file);
outputStream.write(pic);
outputStream.close();
}catch(Exception e){
e.printStackTrace();
}
} }
执行testInsertStudent方法后,查看数据库中插入情况:

执行testGetStudentById获取这个记录,将pic保存到I盘 boy.png,已将数据库中的图片,以流的形式写入到I盘中;
6)StudentMapper.java:
 package com.cy.mapper;
 import com.cy.model.Student;
 public interface StudentMapper {
     //插入
     public int insertStudent(Student student);
     //根据id获取student
     public Student getStudentById(Integer id);    
 }
7)StudentMapper.xml mapper映射文件:
<?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.cy.mapper.StudentMapper"> <insert id="insertStudent" parameterType="Student">
insert into t_student values(null,#{name},#{age},#{pic},#{remark});
</insert> <select id="getStudentById" parameterType="Integer" resultType="Student">
select * from t_student where id=#{id}
</select>
</mapper>
二、项目中使用log4j:
在项目中加入log4j的jar包,以及配置log4j.properties:

1)log4j.properties配置文件:
log4j.rootLogger=info,appender1,appender2 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.File=I:/logFile.txt log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
而且,发现配置文件名必须为log4j.properties;
上面的输入到两个地方:
console;
I盘下面的logFile.txt;
2)测试代码:StudentTest.java:
package com.cy.service; import org.apache.log4j.Logger;
import org.junit.Test; public class StudentTest { private static Logger logger = Logger.getLogger(StudentTest.class); @Test
public void testLogger(){
logger.info("测试log4j.....");
} @Test
public void testOtherLogger(){
logger.info("测试other log4j.....");
}
}
运行后console输出:这样信息:
[main] INFO com.cy.service.StudentTest - 测试other log4j.....
查看I盘下面logFile.txt:

小峰mybatis(1) 处理clob,blob等。。的更多相关文章
- 小峰mybatis(3)mybatis分页和缓存
		一.mybatis分页-逻辑分页和物理分页: 逻辑分页: mybatis内置的分页是逻辑分页:数据库里有100条数据,要每页显示10条,mybatis先把100条数据取出来,放到内存里,从内存里取10 ... 
- 小峰mybatis(4)mybatis使用注解配置sql映射器
		主流开发还是使用xml来配置:使用注解配置比较快,但是不支持所有功能:有些功能还是得用配置文件: 一.基本映射语句: @Inert @Update @Delete @Select 二.结果集映射语句 ... 
- 小峰mybatis(2)mybatis传入多个参数等..
		一.mybatis传入多个参数: 前面讲传入多个参数都是使用map,hashmap:key value的形式:-- 项目中开发都建议使用map传参: 比如现在通过两个参数,name和age来查询: 通 ... 
- 小峰mybatis(5)mybatis使用注解配置sql映射器--动态sql
		一.使用注解配置映射器 动态sql: 用的并不是很多,了解下: Student.java 实体bean: package com.cy.model; public class Student{ pri ... 
- MyBatis(3.2.3) - Handling the CLOB/BLOB types
		MyBatis provides built-in support for mapping CLOB/BLOB type columns. Assume we have the following t ... 
- mybatis 处理CLOB/BLOB类型数据
		BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ... 
- myBatis之Clob & Blob
		1. 表结构 1.1 在Mysql中的数据类型,longblob --> blob, longtext --> clob 2. 配置文件, 请参考 myBatis之入门示例 3. L ... 
- mybatis学习之CLOB、BLOB处理及多参数方法映射
		CLOB数据mysql对应数据类型为longtext.BLOB类型为longblob: model实体: ... private Integer id; private String name; pr ... 
- Mybatis对MySQL中BLOB字段的读取
		1.在sqlMapConfig中,定义一个typeHandlers <typeHandlers> <typeHandler jdbcType="BLOB" jav ... 
随机推荐
- DBGridEh 在粘贴中文时出现乱码和错位 100zhx_888]
			http://www.fx114.net/qa-29-3439.aspx 回复于: -- :: unit DBGridEh; 把下面这个函数替换成这样 procedure TDBGridInplace ... 
- python 爬虫系列教程方法总结及推荐
			爬虫,是我学习的比较多的,也是比较了解的.打算写一个系列教程,网上搜罗一下,感觉别人写的已经很好了,我没必要重复造轮子了. 爬虫不过就是访问一个页面然后用一些匹配方式把自己需要的东西摘出来. 而访问页 ... 
- Windows折腾之路 兼谈纯净强迫情节
			早期新鲜感 想当年,终于有了第一台属于自己自由处置的电脑,1.2Ghz的CPU,256兆的内存.这在CPU刚刚上1G的年代,不说顶级,也算主流.操作系统呢,在别人的帮助下,装上新鲜的XP,各种的华丽, ... 
- 201621123010《Java程序设计》第10周学习总结
			1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ... 
- screen 命令 http://man.linuxde.net/screen
			http://man.linuxde.net/screen -A 将所有的视窗都调整为目前终端机的大小. -d <作业名称> 将指定的screen作业离线. -h <行数> 指 ... 
- HDU 3046
			http://acm.hdu.edu.cn/showproblem.php?pid=3046 典型的最小割模型 #include <iostream> #include <cstdi ... 
- HDU 2853 && HDU 3315
			http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:给一个n-m二分图,边权用一个n*m的矩阵表示,给出初始匹配,求二分图完美匹配相比初始匹配改变了几条 ... 
- TJU Problem 1644 Reverse Text
			注意: int N; cin >> N; cin.ignore(); 同于 int N; scanf("%d\n",&N); 另:关于 cin 与 scanf: ... 
- OVSSL企业证书认证
			最近,在做http->https的转化,虽然我没有操作证书的安装过程,但是在这个过程中学习到不少知识呢. 因为我没有操作,所以操作上我就不知道了.下面是这个过程中要注意的一些事项: 1.公司名称 ... 
- HDU 1003:Max Sum(DP,连续子段和)
			Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ... 
