Mybatis 41_构造器映射及使用注解完成构造器映射

41_构造器映射

  • 构造器映射:
    • XML Mapper
      • 项目0503构造器映射
    • @ConstructorArgs注解
      • 项目0504构造器映射_注解

构造器映射:

构造器映射能控制MyBatis调用指定、有参数的构造器来创建结果集要映射的Java对象

XML Mapper

元素内添加子元素来实现构造器映射。
元素可包含多个子元素,它们用于定义数据列与构造参数之间的对应关系。
其中元素用于定义作为标识属性的构造参数,它们可指定如下属性:
- column:指定列名。
- javaType:指定属性的Java类型。通常需要指定,
调用指定构造器需要根据构造器参数类型来匹配
- jdbcType:指定该列的JDBC类型。一般无需指定,MyBatis可以自动推断。
- typeHandler:为该数据列与属性值之间的转换指定类型处理器。
- name:指定构造参数的参数名。要用@Param或-parameters编译选项
- select:该属性引用另一个元素的id,指定使用嵌套查询来检索数据
- resultMap:该属性引用另一个元素的id,完成嵌套结果集的映射

项目0503构造器映射

映射文件


DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	
<mapper namespace="org.itcheng.app.dao.NewsMapper">

	
	<insert id="saveNews">
		insert into news_inf values (null, #{title}, #{content})
	insert>
	
	
	<update id="updateNews">
		update news_inf set news_title = #{title}, news_content = #{content}
		where news_id=#{id}
	update>
	
	
	<delete id="deleteNews">
		delete from news_inf where news_id = #{xyz} 
	delete>
	
	
	<select id="findNews" resultMap="newsMap">
		select * from news_inf where news_id > #{id}		
	select>
	
	
	<resultMap type="news" id="newsMap">
		<constructor>
			
			<idArg column="news_id" javaType="int" />
			<arg column="news_title" javaType="string"/>
			
		constructor>
		<result column="news_content" property="content"/>
	resultMap>
	
mapper>

@ConstructorArgs注解

@ConstructorArgs注解对应于 元素
该注解的value属性可指定多个@Arg注解
@Arg相当于 的综合体,当它的id属性为true,代表元素。

项目0504构造器映射_注解

package org.itcheng.app.dao;

import java.util.List;

import org.apache.ibatis.annotations.Arg;
import org.apache.ibatis.annotations.ConstructorArgs;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.itcheng.app.domain.News;

// Mapper组件相当于DAO组件
public interface NewsMapper
{
	@Insert("insert into news_inf values (null, #{title}, #{content})")
	int saveNews(News news);
	
	@Update("update news_inf set news_title = #{title}, news_content = #{content}\r\n" + 
		"where news_id=#{id}")
	int updateNews(News news);
	
	@Delete("delete from news_inf where news_id = #{xyz}")
	void deleteNews(Integer id);
	
	@Select("select * from news_inf where news_id > #{id}")
	@ConstructorArgs({
		@Arg(column = "news_id", javaType = Integer.class, id = true),
		@Arg(column = "news_title", javaType = String.class)
	})
	@Results({
		@Result(column = "news_content", property="content")
	})
	List<News> findNews(Integer id);
}

你可能感兴趣的:(mybatis,sql,数据库,eclipse,java,mysql)