mybatis学习笔记--手动映射

(一)输入参数/输出参数

(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]
           */
	}

猜你喜欢

转载自blog.csdn.net/JayBillions/article/details/81454777
今日推荐