參考:https://mybatis.org/mybatis-3/zh/configuration.html#
1. 類型處理器(typeHandlers)
你可以重寫已有的類型處理器或創建你自己的類型處理器來處理不支持的或非標準的類型。 具體做法爲:實現 org.apache.ibatis.type.TypeHandler 接口, 或繼承一個很便利的類 org.apache.ibatis.type.BaseTypeHandler, 並且可以(可選地)將它映射到一個 JDBC 類型。
例如:一個Java中Date數據類型,要將其存到數據庫的時候存成一個1970年至今的毫秒數,取出來時轉換成java的Date,即Java的Date與數據庫的varchar毫秒值的轉換。
重寫類中的方法:
public class DateTypeHandler extends BaseTypeHandler<Date> {
//將java類型 轉換成 數據庫需要的類型
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
long time = date.getTime();
preparedStatement.setLong(i,time);
}
//將數據庫中類型 轉換成java類型
//String參數是要轉換的字段的名稱
//ResultSet 查詢出的結果集
@Override
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
//獲取結果集中需要的數據(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 {
long aLong = resultSet.getLong(i);
Date date = new Date(aLong);
return date;
}
//將數據庫中類型 轉換成java類型
@Override
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
long aLong = callableStatement.getLong(i);
Date date = new Date(aLong);
return date;
}
}
MyBatis核心配置文件:
<!--自定義類型處理器-->
<typeHandlers>
<typeHandler handler="com.itheima.handler.DateTypeHandler"></typeHandler>
</typeHandlers>
2.plugins標籤
分頁助手PageHelper:
- 導入通用PageHelper的座標
- 在mybatis核心配置文件中配置PageHelper插件
- 測試分頁數據獲取
pom.xml配置:
<!--分頁助手-->
<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>
sqlMapConfig配置:
<!--配置分頁助手插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
測試:
@Test
public void test3() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//設置分頁的相關參數 當前頁+每頁顯示的條數
PageHelper.startPage(1,3);
List<User> userList = mapper.findAll();
for (User user : userList) {
System.out.println(user);
}
sqlSession.commit();
sqlSession.close();
}
分頁相關數據獲取:
@Test
public void test3() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//設置分頁的相關參數 當前頁+每頁顯示的條數
PageHelper.startPage(1,3);
List<User> userList = mapper.findAll();
for (User user : userList) {
System.out.println(user);
}
//獲得與分頁相關的參數
PageInfo<User> pageInfo = new PageInfo<User>(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());
sqlSession.commit();
sqlSession.close();
}