美文网首页
5 - TypeHandler-1

5 - TypeHandler-1

作者: 农民工__乔Young | 来源:发表于2019-05-14 18:25 被阅读0次

当需要将jdbc类型的数据和Java程序中类型的书数据进行转换时,可以使用TypeHandler来完成转换过程。怎么实现呢?
Java类型==》jdbc
将Java类型值value1通过某种策略转化为数据库(jdbc)类型值value2,然后将value2设置为SQL参数 :preparedStatement.setType(i,value2);
Java类型《== jdbc
resultSet中取出值value2,然后通过某种策略将value2转换为Java类型值value1

table

create table `student`(
`id` int auto_increment primary key,
`name` varchar(30) not null,
`age` int,
`birthday` varchar(30)
)auto_increment=10000;

model

package model;

import java.util.Date;

public class Student {
    private int id;
    private String name;
    private int age;

    private Date birthday;//在数据库中对应的类型是varchar(n)

    public Student() {
    }
//getter和setter略
}

TypeHandler


//表注转换的两种类型
@MappedJdbcTypes({JdbcType.VARCHAR})//jdbc类型
@MappedTypes({java.util.Date.class})//程序类型
public class MyDateTypeHandler extends BaseTypeHandler<Date> {

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {

        preparedStatement.setString(i,String.valueOf(date.getTime()));
    }

    @Override
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return new Date(resultSet.getLong(i));
    }

    @Override
    public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return new Date(resultSet.getLong(s));
    }

    @Override
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return new Date(callableStatement.getLong(i));
    }
}

dao

package dao;

import model.Student;

public interface StudentMapper {

    int insertStudent(Student student);

    Student selectStudentById(int id);
}

mapper

在对应参数处使用typeHandler来转换
作为输入参数:
#{birthday,typeHandler=dao.MyDateTypeHandler}
这里的typeHandler的值不成写成字符串类型
作为输出结果:
<result property="birthday" column="birthday" typeHandler="dao.MyDateTypeHandler"/>

 <insert id="insertStudent" parameterType="student">
        insert into `student`(`name`,`age`,`birthday`)
        values(#{name},#{age},#{birthday,typeHandler=dao.MyDateTypeHandler})
        <selectKey resultType="int" keyProperty="id" keyColumn="id" order="AFTER">
            select last_insert_id()
        </selectKey>
    </insert>

    <resultMap id="studentMapper" type="student">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <result property="birthday" column="birthday" typeHandler="dao.MyDateTypeHandler"/>
    </resultMap>

    <select id="selectStudentById" parameterType="int" resultMap="studentMapper">
        select * from `student` where `id` = #{id}
    </select>

test


public class AppTest {

    SqlSessionFactory factory = null;

    @Before
    public void prepare() throws IOException{
        InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
        factory = new SqlSessionFactoryBuilder().build(inputStream);
        inputStream.close();
    }

    @Test
    public void test(){
        SqlSession session = factory.openSession();
        try{
            StudentMapper studentMapper = session.getMapper(StudentMapper.class);
//            Student student = new Student("wang",20,new Date());
//            int affectedRows = studentMapper.insertStudent(student);
            int id=10001;
            Student student  = studentMapper.selectStudentById(id);

            System.out.println(student);
        }finally{
            session.commit();
            session.close();
        }
    }
}

相关文章

  • 5 - TypeHandler-1

    当需要将jdbc类型的数据和Java程序中类型的书数据进行转换时,可以使用TypeHandler来完成转换过程。怎...

  • 灵心儿组计分

    9.24 棉芯➕5➕5 晨萌➕5 乐乐➕5➕5➕5➕5 楠楠➕5➕5➕5➕5 水儿➕5➕5 七炫➕5➕5➕5➕5

  • 未闻花名口琴简谱

    1 4 5 5 6 6 6 6 6 6 5 5 5 5 5 5 4 4 4 4 4 4 4 1 1 1 4 5 5...

  • 5/5

    该地区最重要的科技增长毫无疑问是半导体产品。在新泽西州Bell实验室里,William曾是晶体管发明人之一,195...

  • 5/5

    我允许自己表达疲惫,允许自己懒懒前行,允许自己自然而然……感觉到放松,感觉到对自我的接纳,自己理解自己,直面自己,...

  • 5、5

    しょんぼり [寂しく]孤零零(地);[がっくり]垂气(成),无精打采(成) ¶~立っている/无精打采地站着 ¶彼は...

  • 5 .5

    今天去的晚了一点,然后男队那边早早就开始在训练了,但是女队现在还在慢悠悠的走,有十多分钟,这种学生投入性低,缺...

  • 5/5

    五一后第一天上课,虽然起晚了一点,不过语文课还是听上了。数学老师的课就是摸鱼,老师讲评了五一的卷子,真的超难!我原...

  • 托姆拉物语暴力火线技能树

    剑术:战吼5+5+10 射击:弱狙5+5+10 火线5+10 要领10 分身5+5+10 魔法:冲击波5+5+5+...

  • 密码

    1【5】1 云1 2【5】2 云2 3【5】3 云3 4【5】4 云4 5【5】5 云5 《2.0》 公告 6【5...

网友评论

      本文标题:5 - TypeHandler-1

      本文链接:https://www.haomeiwen.com/subject/moalaqtx.html