(一)输入参数/输出参数
(1)User.java
package cn.shu.pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
//实现序列化接口
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String sex;
private Date birthday;
private String address;
/*setter and getter and toString*/
(2)QueryVo.java
package cn.shu.pojo;
import java.io.Serializable;
//QueryVo为包装类,将User类进行包装
public class QueryVo implements Serializable{
//不实现Serializable接口,就无法实现序列化(对象转化为二进制的过程)
//和反序列化(二进制到对象的过程),在同一台电脑中进行数据调用可以不用此过程
//但不同电脑之间进行数据传输会有序列化和反序列化的过程
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
(3)sqlMapperConfig.xml
/*
数据库连接配置省略
*/
<mappers>
<mapper class="cn.shu.mapper.UserMapper"/>
</mappers>
(4)UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.shu.mapper.UserMapper">
<!-- 根据用户名进行模糊查询 -->
<select id="findUserByQueryVo" parameterType="QueryVo" resultType="cn.shu.pojo.User">
select * from user where username like "%"#{user.username}"%"
</select>
</mapper>
(5)UserMapper.java
package cn.shu.mapper;
import java.util.List;
import cn.shu.pojo.QueryVo;
import cn.shu.pojo.User;
public interface UserMapper {
public List<User> findUserByQueryVo(QueryVo vo);
}
(6)测试类书写
//进行模糊查询
@Test
public void testMapperQueryVo() throws Exception {
// 加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//sqlSession帮助生成实现类(给接口,接口遵循四大原则)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
QueryVo vo = new QueryVo();
User user = new User();
user.setUsername("hong");
vo.setUser(user);
List<User> ulist = userMapper.findUserByQueryVo(vo);
for(User u:ulist){
System.out.println(u);
}
/*
User [id=30, username=stephen hong, sex=男, birthday=Sat Aug 04 00:00:00 CST 2018, address=Hong Kong]
User [id=31, username=stephen hong, sex=男, birthday=Sat Aug 04 00:00:00 CST 2018, address=Hong Kong]
* */
}
(二)手动映射resultMap
(1)Orders.java
package cn.shu.pojo;
import java.io.Serializable;
import java.util.Date;
public class Orders implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note;
/*
setter and getter and toString
*/
(2)OrderMapper.java
package cn.shu.mapper;
import java.util.List;
import cn.shu.pojo.Orders;
public interface OrderMapper {
//查询订单所有数据
public List<Orders> selectOrdersList();
}
(3)OrderMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.shu.mapper.OrderMapper">
<!-- 查询订单所有数据 -->
<!-- <select id="selectOrdersList" resultType="Orders"> -->
<resultMap type="Orders" id="orders">
<!-- select元素中的resultMap的值必须与resultMap元素中的id值相同
这样两块元素可以关联到一起 -->
<id column="id" property="id"/>
<!-- id为id映射,result为其他字段映射,column为表中字段,property为POJO中字段 -->
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 除了以上常规方式,还可以采用半自动映射,相同的字段不用配置,只需要配置不同的即可
此时只需要配置user_id字段<result column="user_id" property="userId"/>
-->
</resultMap>
<select id="selectOrdersList" resultMap="orders">
select id,user_id,number,createtime,note from orders
</select>
</mapper>
(4)sqlMapperConfig.xml
<mappers>
<mapper class="cn.shu.mapper.OrderMapper"/>
</mappers>
(5)测试类
//查询订单所有数据
@Test
public void testOrderList() throws Exception {
// 加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
List<Orders> ordersList = mapper.selectOrdersList();
for (Orders orders : ordersList) {
System.out.println(orders);
}
/*
* Orders [id=3, userId=null, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null]
Orders [id=4, userId=null, number=1000011, createtime=Tue Feb 03 13:22:41 CST 2015, note=null]
Orders [id=5, userId=null, number=1000012, createtime=Thu Feb 12 16:13:23 CST 2015, note=null]
发现userid都为空,是因为POJO类字段(userId)与表中的字段(user_id)不一样,不能使用resultType进行自动映射
需要使用resultMap进行手动映射
Orders [id=3, userId=1, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null]
Orders [id=4, userId=1, number=1000011, createtime=Tue Feb 03 13:22:41 CST 2015, note=null]
Orders [id=5, userId=10, number=1000012, createtime=Thu Feb 12 16:13:23 CST 2015, note=null]
*/
}