MyBatis——输出映射

user数据库描述:

定义User类

public class User{
	
	//属性名和数据库表的字段对应
	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址
	
	//........set,get方法省略
}

1.resultType

查询结果不止一行一列时,需要使用自定义包装类来接受结果,例如查询id=1的用户信息,此时使用User类来接受结果。

1)在map.xml中编写SQL映射文件

<select 
        id="findUserById" parameterType="int" resultType="user">
	SELECT id,username,sex,birthday,address FROM USER WHERE id=#{value}
</select>

其中:

id:标识映射文件的sql

parameterType:制定输入参数的类型,这里是int类型

#{}是占位符

resultType:指定的sql输出结果所映射的java类型

2)在SqlMapConfig.xml配置文件中加载映射文件

	<!-- 加载 映射文件 -->
	<mappers>
		<mapper resource="sqlmap/User.xml"/>
		
		<!-- 批量加载mapper
		指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
		遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
		上边规范的前提是:使用的是mapper代理方法
		 -->
		<package name="cn.itcast.mybatis.mapper"/>

	</mappers>

注:这类可以单独加载,也可以批量加载。

3)对应的Mapp接口——Map.java

public interface UserMapper {
	
	//根据id查询用户信息
	public User findUserById(int id) throws Exception;
}

4)编写测试代码

	@Test
	public void testFindUserById() throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//创建UserMapper对象,mybatis自动生成mapper代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		//调用userMapper的方法
		User user = userMapper.findUserById(1);
		System.out.println(user);
		
	}

结果输出:

User [id=1, username=王五, sex=2, birthday=null, address=null]

注意

1)上面输出的是一条数据,当以性别为条件时,查询出来的是多条数据,但是resultType依然配置了User类,但是在Mapper.java中,findUserById方法返回的是List<User>

<select id="findUserById" parameterType="int" resultType="user">
		SELECT id,username,sex,birthday,address FROM USER WHERE id=#{value}
</select>
//根据用户名列查询用户列表
	public List<User> findUserByName(String name)throws Exception;

2)如果从数据库查询出来的列名和包装类的属性名不一致,此时不会创建包装类对象,例如:

<select id="findUserById" parameterType="int" resultType="user">
		SELECT id _id,username _username,sex _sex,birthday _birthday,address _address FROM USER WHERE id=#{value}
</select>

这时候可以使用resultMap。

2.resultMap

1)Map.xml映射文件中定义resultMap

	<!-- 定义resultMap
	将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系
	
	type:resultMap最终映射的java对象类型,可以使用别名
	id:对resultMap的唯一标识
	 -->
	 <resultMap type="user" id="userResultMap">
	 	<!-- id表示查询结果集中唯一标识 
	 	column:查询出来的列名
	 	property:type指定的pojo类型中的属性名
	 	最终resultMap对column和property作一个映射关系 (对应关系)
	 	-->
	 	<id column="id_" property="id"/>
	 	<!-- 
	 	result:对普通名映射定义
	 	column:查询出来的列名
	 	property:type指定的pojo类型中的属性名
	 	最终resultMap对column和property作一个映射关系 (对应关系)
	 	 -->
	 	<result column="username_" property="username"/>
	 
	 </resultMap>

2)Map.xml映射文件中编写SQL映射

	<!-- 使用resultMap进行输出映射
	resultMap:指定定义的resultMap的id,如果这个resultMap在其它的mapper文件,前边需要加namespace
	-->
	<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
		SELECT id id_,username username_ FROM USER WHERE id=#{value}
	</select>

3)SqlMapConfig配置文件中加载映射文件

	<!-- 加载 映射文件 -->
	<mappers>
		<mapper resource="sqlmap/User.xml"/>
		
		<!-- 批量加载mapper
		指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
		遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
		上边规范的前提是:使用的是mapper代理方法
		 -->
		<package name="cn.itcast.mybatis.mapper"/>

	</mappers>

3)Map.java接口中编写方法

public interface UserMapper {
	
	//根据id查询用户信息,使用resultMap输出
	public User findUserByIdResultMap(int id) throws Exception;

}

4)编写测试代码

	@Test
	public void testFindUserByIdResultMap() throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//创建UserMapper对象,mybatis自动生成mapper代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		//调用userMapper的方法
		User user = userMapper.findUserByIdResultMap(1);
		System.out.println(user);
	}

注:一般来说,数据库的结果集中的列名与Java实体类中属性的名称是不同的,所以需要resultMap来对列名进行转换才能映射到Java实体类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值