如何使用mybatis自定义日期类型转换器(mybatis,开发技术)

时间:2024-04-29 00:20:45 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    前言

    使用mybatis中的typeHandlers 实现自定义日期类型的转换器。
    重点在2.2 handler中

    一、resources

    如何使用mybatis自定义日期类型转换器

    1.1 sqlMapConfig.xml

    typeHandlers: 自定义的日期类型转换器:
    (1)将日期类型转为long的长整型存入数据库中。
    (2)将数据库中的bigint(本质对应java的long类型)转为date类型。environments:加载数据库mapper: 映射文件的位置

    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><typeHandlers><typeHandlerhandler="com.mytest.handler.DateTypeHandler"></typeHandler></typeHandlers><environmentsdefault="dev"><environmentid="dev"><transactionManagertype="JDBC"></transactionManager><dataSourcetype="POOLED"><propertyname="driver"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/test"/><propertyname="username"value="root"/><propertyname="password"value="123456"/></dataSource></environment></environments><mappers><mapperresource="com.mytest.mapper/UserMapper.xml"></mapper></mappers></configuration>

    1.2 log4j.properties

    打印日志

    ###directlogmessagestostdout###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L-%m%n###directmessagestofilemylog.log###log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=c:/mylog.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L-%m%n###setloglevels-formoreverboseloggingchange'info'to'debug'###log4j.rootLogger=debug,stdout

    1.3 userMapper.xml

    1.findByid: 通过id查询插入元素

    2.save: xml映射器mapper时,

    useGeneratedKeys:值为true 并分别指定属性:
    keyProperty: 对应的Java对象的主键属性
    keyColumn: 对应的数据库记录主键字段

    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.mytest.dao.UserMapper"><!--通过id查询插入元素--><selectid="findByid"parameterType="int"resultType="com.mytest.pojo.User">select*fromsys_userwhereid=#{id}</select><!--插入元素--><insertid="save"parameterType="com.mytest.pojo.User"useGeneratedKeys="true"keyProperty="id"keyColumn="id">insertintosys_user(id,username,email,password,phoneNum,birthday)values(null,#{username},null,#{password},null,#{birthday})</insert></mapper>

    二、java结构

    如何使用mybatis自定义日期类型转换器

    2.1 dao

    UserMapper

    1.findByid: 使用id值查询User

    2.save: 插入User到数据库中

    packagecom.mytest.dao;importcom.mytest.pojo.User;importjava.util.List;publicinterfaceUserMapper{UserfindByid(intid);publicvoidsave(Useruser);}

    2.2 handler

    DateTypeHandler

    1. setNonNullParameter:将java类型 转换成 数据库需要的类型

    2. getNullableResult:将数据库中类型 转换成java类型

    packagecom.mytest.handler;importorg.apache.ibatis.type.BaseTypeHandler;importorg.apache.ibatis.type.JdbcType;importjava.sql.CallableStatement;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Date;publicclassDateTypeHandlerextendsBaseTypeHandler<Date>{//将java类型转换成数据库需要的类型publicvoidsetNonNullParameter(PreparedStatementpreparedStatement,inti,Datedate,JdbcTypejdbcType)throwsSQLException{longtime=date.getTime();preparedStatement.setLong(i,time);}//将数据库中类型转换成java类型//String参数要转换的字段名称//ResultSet查询出的结果集publicDategetNullableResult(ResultSetresultSet,Strings)throwsSQLException{//获得结果集中需要的数据(long)转换成Date类型返回longaLong=resultSet.getLong(s);Datedate=newDate(aLong);returndate;publicDategetNullableResult(ResultSetresultSet,inti)throwsSQLException{longaLong=resultSet.getLong(i);publicDategetNullableResult(CallableStatementcallableStatement,inti)throwsSQLException{longaLong=callableStatement.getLong(i);}

    2.3 pojo

    packagecom.mytest.pojo;importjava.util.Date;publicclassUser{privateIntegerid;privateStringusername;privateStringpassword;privateDatebirthday;publicDategetBirthday(){returnbirthday;}publicvoidsetBirthday(Datebirthday){this.birthday=birthday;@OverridepublicStringtoString(){return"User{"+"id="+id+",username='"+username+'\''+",password='"+password+'\''+",birthday="+birthday+'}';publicIntegergetId(){returnid;publicvoidsetId(Integerid){this.id=id;publicStringgetUsername(){returnusername;publicvoidsetUsername(Stringusername){this.username=username;publicStringgetPassword(){returnpassword;publicvoidsetPassword(Stringpassword){this.password=password;}

    2.4 service

    service没用进行实现,在本demo中只用于测试使用。
    sqlSession.commit()用于mybatis的事务提交。mybatis的事务默认是不提交的,故在增删改中需要进行事务的提交,在mybatis中事务的提交方式一般有两种:
    1 sqlSession.commit()
    2 采用openSession(true),即可实现自动提交,无需调用commit()方法。

    packagecom.mytest.service;importcom.mytest.dao.UserMapper;importcom.mytest.pojo.User;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importjava.io.IOException;importjava.io.InputStream;importjava.util.Date;importjava.util.List;publicclassServiceTest{publicstaticvoidmain(String[]args)throwsIOException{InputStreaminputStream=Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactorysqlSessionFactory=(SqlSessionFactory)newSqlSessionFactoryBuilder().build(inputStream);//openSession为true则自动提交事务SqlSessionsqlSession=sqlSessionFactory.openSession();UserMappermapper=sqlSession.getMapper(UserMapper.class);Useruser=newUser();//插入不需要设置id值//user.setId(5);user.setUsername("wangwu");user.setPassword("123");user.setBirthday(newDate());//会返回属性值mapper.save(user);IntegeruserId=user.getId();sqlSession.commit();UserfindUser=mapper.findByid(userId);System.out.println(findUser);}}

    三 数据表结构及测试

    数据表结构

    如何使用mybatis自定义日期类型转换器

    测试

    如何使用mybatis自定义日期类型转换器

     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:如何使用mybatis自定义日期类型转换器的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:PHP中如何使用Oracle数据库下一篇:

    9 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18