SSM14【Mybatis:Mybatis核心配置文件深入--typeHandlers标签&plugins标签】

typeHandlers标签

 

 

 

 

 

 

 

 

 

复制代码
 1 package com.haifei.domain;
 2 
 3 import java.util.Date;
 4 
 5 public class User {
 6 
 7     private int id;
 8     private String username;
 9     private String password;
10     private Date birthday;
11 
12     @Override
13     public String toString() {
14         return "User{" +
15                 "id=" + id +
16                 ", username='" + username + '\'' +
17                 ", password='" + password + '\'' +
18                 ", birthday=" + birthday +
19                 '}';
20     }
21 
22     public Date getBirthday() {
23         return birthday;
24     }
25 
26     public void setBirthday(Date birthday) {
27         this.birthday = birthday;
28     }
29 
30     public int getId() {
31         return id;
32     }
33 
34     public void setId(int id) {
35         this.id = id;
36     }
37 
38     public String getUsername() {
39         return username;
40     }
41 
42     public void setUsername(String username) {
43         this.username = username;
44     }
45 
46     public String getPassword() {
47         return password;
48     }
49 
50     public void setPassword(String password) {
51         this.password = password;
52     }
53 }
复制代码

 

 

 

 

 

复制代码
 1 package com.haifei.mapper;
 2 
 3 import com.haifei.domain.User;
 4 
 5 import java.util.List;
 6 
 7 public interface UserMapper {
 8 
 9     public void save(User user);
10     public User findById(int id);
11 
12 }
复制代码
复制代码
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 
 4 <mapper namespace="com.haifei.mapper.UserMapper">
 5 
 6     <insert id="save" parameterType="user">
 7         insert into user values(#{id},#{username},#{password},#{birthday})
 8     </insert>
 9 
10     <select id="findById" parameterType="int" resultType="user">
11         select * from user where id=#{id}
12     </select>
13 
14 </mapper>
复制代码

 

 

 

复制代码
 1 package com.haifei.test;
 2 
 3 import com.haifei.domain.User;
 4 import com.haifei.mapper.UserMapper;
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 import org.junit.Test;
10 
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.util.ArrayList;
14 import java.util.Date;
15 import java.util.List;
16 
17 public class MybatisTest {
18 
19     @Test
20     public void test1() throws IOException {
21         InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
22         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
23         SqlSession sqlSession = sqlSessionFactory.openSession();
24 
25         //模拟user数据
26         User user = new User();
27         user.setUsername("11");
28         user.setPassword("11");
29         user.setBirthday(new Date());
30 
31         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
32         mapper.save(user);
33         /*
34         编写DateTypeHandler以及在sqlMapConfig.xml中配置类型处理器
35         之前
36         java.sql.SQLException: Data truncated for column 'birthday' at row 1
37 
38         之后
39         ok,插入成功
40          */
41 
42         sqlSession.commit();
43         sqlSession.close();
44     }
45 
46     @Test
47     public void test2() throws IOException {
48         InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
49         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
50         SqlSession sqlSession = sqlSessionFactory.openSession();
51 
52         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
53         User user = mapper.findById(9);
54         System.out.println(user); //User{id=9, username='11', password='11', birthday=Sat Jul 24 20:00:29 CST 2021}
55 
56         sqlSession.commit();
57         sqlSession.close();
58     }
59 
60 }
复制代码

 

复制代码
 1 package com.haifei.handler;
 2 
 3 import org.apache.ibatis.type.BaseTypeHandler;
 4 import org.apache.ibatis.type.JdbcType;
 5 
 6 import java.sql.CallableStatement;
 7 import java.sql.PreparedStatement;
 8 import java.sql.ResultSet;
 9 import java.sql.SQLException;
10 import java.util.Date;
11 
12 public class DateTypeHandler extends BaseTypeHandler<Date> {
13 
14     /**
15      * 将java数据类型 转换为 数据库所需的数据类型
16      * @param preparedStatement
17      * @param i
18      * @param date
19      * @param jdbcType
20      * @throws SQLException
21      */
22     @Override
23     public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
24         long time = date.getTime();
25         preparedStatement.setLong(i, time);
26     }
27 
28     /**
29      * 将数据库中的数据类型 转换为 所需的java数据类型
30      * @param resultSet  查询出的结果集
31      * @param s  要转换的字段名称
32      * @return
33      * @throws SQLException
34      */
35     @Override
36     public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
37         //获取结果集中需要的数据类型(long)转换为Date类型,并返回
38         long aLong = resultSet.getLong(s);
39         Date date = new Date(aLong);
40         return date;
41     }
42 
43     /**
44      * 将数据库中的数据类型 转换为 所需的java数据类型
45      * @param resultSet
46      * @param i
47      * @return
48      * @throws SQLException
49      */
50     @Override
51     public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
52         long aLong = resultSet.getLong(i);
53         Date date = new Date(aLong);
54         return date;
55     }
56 
57     /**
58      * 将数据库中的数据类型 转换为 所需的java数据类型
59      * @param callableStatement
60      * @param i
61      * @return
62      * @throws SQLException
63      */
64     @Override
65     public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
66         long aLong = callableStatement.getLong(i);
67         Date date = new Date(aLong);
68         return date;
69     }
70 }
复制代码
复制代码
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 
 4 <!--The content of element type "configuration" must match
 5 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,
 6 objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".-->
 7 
 8 <configuration>
 9 
10     <!--加载外部properties文件-->
11     <properties resource="jdbc.properties"></properties>
12 
13     <!--自定义别名-->
14     <typeAliases>
15         <typeAlias type="com.haifei.domain.User" alias="user" />
16     </typeAliases>
17 
18     <!--注册类型处理器-->
19     <typeHandlers>
20         <typeHandler handler="com.haifei.handler.DateTypeHandler"/>
21     </typeHandlers>
22 
23     <environments default="development">
24         <!--配置数据源环境-->
25         <environment id="development">
26             <transactionManager type="JDBC"></transactionManager>
27             <dataSource type="POOLED">
28                 <property name="driver" value="${jdbc.driver}"/>
29                 <property name="url" value="${jdbc.url}"/>
30                 <property name="username" value="${jdbc.username}"/>
31                 <property name="password" value="${jdbc.password}"/>
32             </dataSource>
33         </environment>
34     </environments>
35 
36     <!--加载映射文件-->
37     <mappers>
38         <mapper resource="com/haifei/mapper/UserMapper.xml"></mapper>
39     </mappers>
40 
41 </configuration>
复制代码

 

 

plugins标签

 

 

 

 

 

 

 

 

 

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.haifei</groupId>
 8     <artifactId>SSM14_mybatis_config</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10     <packaging>war</packaging>
11 
12 
13     <dependencies>
14         <dependency>
15             <groupId>mysql</groupId>
16             <artifactId>mysql-connector-java</artifactId>
17             <version>5.1.32</version>
18         </dependency>
19         <dependency>
20             <groupId>org.mybatis</groupId>
21             <artifactId>mybatis</artifactId>
22             <version>3.4.6</version>
23         </dependency>
24         <dependency>
25             <groupId>junit</groupId>
26             <artifactId>junit</artifactId>
27             <version>4.12</version>
28         </dependency>
29         <dependency>
30             <groupId>log4j</groupId>
31             <artifactId>log4j</artifactId>
32             <version>1.2.17</version>
33         </dependency>
34 
35         <!--分页助手PageHelper相关依赖坐标-->
36         <dependency>
37             <groupId>com.github.pagehelper</groupId>
38             <artifactId>pagehelper</artifactId>
39             <version>3.7.5</version>
40         </dependency>
41         <dependency>
42             <groupId>com.github.jsqlparser</groupId>
43             <artifactId>jsqlparser</artifactId>
44             <version>0.9.1</version>
45         </dependency>
46 
47     </dependencies>
48 
49 
50     <build>
51         <plugins>
52             <!--jdk编译插件-->
53             <plugin>
54                 <groupId>org.apache.maven.plugins</groupId>
55                 <artifactId>maven-compiler-plugin</artifactId>
56                 <version>3.1</version>
57                 <configuration>
58                     <target>1.8</target>
59                     <source>1.8</source>
60                     <encoding>UTF-8</encoding>
61                 </configuration>
62             </plugin>
63         </plugins>
64     </build>
65 
66 
67 </project>
复制代码
复制代码
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 
 4 <!--The content of element type "configuration" must match
 5 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,
 6 objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".-->
 7 
 8 <configuration>
 9 
10     <!--加载外部properties文件-->
11     <properties resource="jdbc.properties"></properties>
12 
13     <!--自定义别名-->
14     <typeAliases>
15         <typeAlias type="com.haifei.domain.User" alias="user" />
16     </typeAliases>
17 
18     <!--注册类型处理器-->
19     <typeHandlers>
20         <typeHandler handler="com.haifei.handler.DateTypeHandler"/>
21     </typeHandlers>
22 
23     <!--配置分页助手PageHelper插件-->
24     <plugins>
25         <plugin interceptor="com.github.pagehelper.PageHelper">
26             <property name="dialect" value="mysql"/> <!--指定支持mysql的方言-->
27         </plugin>
28     </plugins>
29 
30     <environments default="development">
31         <!--配置数据源环境-->
32         <environment id="development">
33             <transactionManager type="JDBC"></transactionManager>
34             <dataSource type="POOLED">
35                 <property name="driver" value="${jdbc.driver}"/>
36                 <property name="url" value="${jdbc.url}"/>
37                 <property name="username" value="${jdbc.username}"/>
38                 <property name="password" value="${jdbc.password}"/>
39             </dataSource>
40         </environment>
41     </environments>
42 
43     <!--加载映射文件-->
44     <mappers>
45         <mapper resource="com/haifei/mapper/UserMapper.xml"></mapper>
46     </mappers>
47 
48 </configuration>
复制代码
复制代码
 1 package com.haifei.mapper;
 2 
 3 import com.haifei.domain.User;
 4 
 5 import java.util.List;
 6 
 7 public interface UserMapper {
 8 
 9     public void save(User user);
10     public User findById(int id);
11 
12     public  List<User> findAll();
13 
14 }
复制代码
复制代码
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 
 4 <mapper namespace="com.haifei.mapper.UserMapper">
 5 
 6     <insert id="save" parameterType="user">
 7         insert into user values(#{id},#{username},#{password},#{birthday})
 8     </insert>
 9 
10     <!--select * from user where id=#{id}-->
11     <select id="findById" parameterType="int" resultType="user">
12         <include refid="selectUser"/> where id=#{id}
13     </select>
14 
15     <sql id="selectUser">select * from user</sql>
16 
17     <select id="findAll" resultType="user">
18         <include refid="selectUser"/>
19     </select>
20 
21 </mapper>
复制代码
复制代码
 1     @Test
 2     public void test3() throws IOException {
 3         InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
 4         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
 5         SqlSession sqlSession = sqlSessionFactory.openSession();
 6 
 7         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
 8         List<User> userList = mapper.findAll();
 9         for (User user : userList) {
10             System.out.println(user);
11         }
12         /*
13         User{id=1, username='zhangsan', password='123', birthday=null}
14         User{id=2, username='lisi', password='345', birthday=null}
15         User{id=3, username='tom', password='abc', birthday=null}
16         User{id=4, username='lucy', password='def', birthday=null}
17         User{id=5, username='sam', password='sam', birthday=null}
18         User{id=9, username='11', password='11', birthday=Sat Jul 24 20:00:29 CST 2021}
19          */
20 
21         sqlSession.close();
22     }
23 
24     @Test
25     public void test4() throws IOException {
26         InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
27         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
28         SqlSession sqlSession = sqlSessionFactory.openSession();
29 
30         //设置分页相关参数:当前页+每页显示条数
31         PageHelper.startPage(2, 3);
32 
33         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
34         List<User> userList = mapper.findAll();
35         for (User user : userList) {
36             System.out.println(user);
37         }
38 
39         //获取与分页相关的参数
40         PageInfo<User> pageInfo = new PageInfo<User>(userList);
41         System.out.println("当前页:"+pageInfo.getPageNum());
42         System.out.println("每页显示条数:"+pageInfo.getPageSize());
43         System.out.println("总条数:"+pageInfo.getTotal());
44         System.out.println("总页数:"+pageInfo.getPages());
45         System.out.println("上一页:"+pageInfo.getPrePage());
46         System.out.println("下一页:"+pageInfo.getNextPage());
47         System.out.println("是否是第一页:"+pageInfo.isIsFirstPage());
48         System.out.println("是否是最后一页:"+pageInfo.isIsLastPage());
49         /*
50         User{id=4, username='lucy', password='def', birthday=null}
51         User{id=5, username='sam', password='sam', birthday=null}
52         User{id=9, username='11', password='11', birthday=Sat Jul 24 20:00:29 CST 2021}
53 
54         当前页:2
55         每页显示条数:3
56         总条数:6
57         总页数:2
58         上一页:1
59         下一页:0
60         是否是第一页:false
61         是否是最后一页:true
62          */
63 
64         sqlSession.close();
65     }
复制代码

 

 

 

posted @   yub4by  阅读(61)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示