32.MyBatis配置文件深入(类型转换)

 

1.数据表添加一个字段 

2.User类

package entity;


import java.util.Date;

public class User {

  private String username;
  private String password;
  private long id;
  private Date birthday;


  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }


  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }


  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }


  public Date getBirthday() {
    return birthday;
  }

  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }

}

3.新建对应接口

package Dao;

import entity.User;

import java.io.IOException;
import java.util.List;

public interface UserDao3
{
    public void insert(User user);
}

4.接口对应mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Dao.UserDao3">

    <insert id="insert" parameterType="entity.User">
        insert into user values(#{username},#{password},#{id},#{birthday})
    </insert>


</mapper>

5.在sqlMapConfig.xml加载mapper映射文件

 <!--加载映射文件-->
    <mappers>
        <mapper resource="UserMapper3.xml"></mapper>
    </mappers>

6.测试:

    @Test
    public void test4() throws IOException
    {
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UserDao3 mapper = sqlSession.getMapper(UserDao3.class);
        User user = new User();
        user.setUsername("测试");
        user.setPassword("77");
        user.setBirthday(new Date());
        mapper.insert(user);
    }

 报错,传递给数据表birthday字段的类型不对,需要使用类处理器进行转换

在handler包定义DateTypeHandler类:

package handler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

public class DateTypeHandler extends BaseTypeHandler<Date>//类的一个参数类型
{
    /*将java中的数据类型 转为 数据库需要的数据类型*/
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException
    {
        /*i为当前参数位置*/
        long time = date.getTime();/*Date转为Long*/
        preparedStatement.setLong(i,time);
    }


    /*将数据库的数据类型 转为 java中需要的数据类型  */
    @Override
    public Date getNullableResult(ResultSet resultSet, String s) throws SQLException
    {
        //string参数:要转换的字段名称
        //resultSet: 查询出的结果集
        //将结果集(long)=>date,再返回
        long aLong = resultSet.getLong(s);
        Date date = new Date(aLong);
        return date;
    }

    /*将数据库的数据类型 转为 java中需要的数据类型  */
    @Override
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException
    {
        //int参数:要转换的字段位置
        //resultSet: 查询出的结果集
        //将结果集(long)=>date,再返回
        long aLong = resultSet.getLong(i);
        Date date = new Date(aLong);
        return date;
    }

    /*将数据库的数据类型 转为 java中需要的数据类型  */
    @Override
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException
    {
        //callableStatement参数:查询出的结果集
        //i: 要转换的字段位置
        //将结果集(long)=>date,再返回
        long aLong = callableStatement.getLong(i);
        Date date = new Date(aLong);
        return date;
    }
}

在sqlMapConfig.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"></properties>

    <!--自定义别名-->
    <typeAliases>
        <typeAlias type="entity.User" alias="user"></typeAlias>
    </typeAliases>

    <!--注册自定义类型转换器-->
    <typeHandlers>
        <typeHandler handler="handler.DateTypeHandler"></typeHandler>
    </typeHandlers>

    <!--数据源环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </dataSource>
        </environment>
    </environments>

    <!--加载映射文件-->
    <mappers>
        <mapper resource="UserMapper.xml"></mapper>
        <mapper resource="UserMapper2.xml"></mapper>
        <mapper resource="UserMapper3.xml"></mapper>
    </mappers>


</configuration>

成功

再测试从数据库的数据类型 转换为类的类型

 UserDao3新建一个方法:

public interface UserDao3
{
    public void insert(User user);
    public User findById(int id);
}

mapper.xml

    <select id="findById" parameterType="int" resultType="entity.User">
        select * from user where id=#{id}
    </select>

测试:

    @Test
    public void test5() throws IOException
    {
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UserDao3 mapper = sqlSession.getMapper(UserDao3.class);

        User user = mapper.findById(7);
        System.out.println("user中的birthday:"+user.getBirthday());
    }

 1.导入坐标

    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>3.7.5</version>
    </dependency>

    <dependency>
      <groupId>com.github.jsqlparser</groupId>
      <artifactId>jsqlparser</artifactId>
      <version>0.9.1</version>
    </dependency>

2.在sqlMapConfig.xml配置插件

    <!--配置分页插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <property name="dialect" value="mysql"/><!--指定方言是mysql-->
        </plugin>
    </plugins>

3.使用

 @Test
    public void test6() throws IOException
    {
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UserDao3 mapper = sqlSession.getMapper(UserDao3.class);

        /*设置分页的相关参数  当前页和每页显示的条数*/
        PageHelper.startPage(2,3);
        List<User> userList = mapper.findAll();
        for(User u:userList)
        {
            System.out.println(u);
        }

        PageInfo<User> pageInfo = new PageInfo(userList);
        System.out.println("当前页:"+pageInfo.getPageNum());
        System.out.println("每页显示条数:"+pageInfo.getPageSize());
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("总页数:"+pageInfo.getPages());
        System.out.println("上一页:"+pageInfo.getPrePage());
        System.out.println("下一页:"+pageInfo.getNextPage());
        System.out.println("是否是第一页:"+pageInfo.isIsFirstPage());
        System.out.println("是否是最后一页:"+pageInfo.isIsLastPage());
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值