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());
}