【Mybatis学习】Mybatis映射器

映射器

1.映射器主要元素

映射器配置
元素描述备注
select用于查询可定义参数、返回结果集等
insert插入语句执行后返回一个整数,代表插入的条数
update更新执行后返回一个整数,代表更新的条数
delete删除执行后返回一个整数,代表删除的条数
parameterMap定义参数映射即将删除,暂不讨论
sql定义一部分sql,可以重复引用,一般用于select返回结果比如定义一份表的列名,在其它sql中使用
resultMap定义从数据库中查询出来的各种信息 
cache给定命名空间的缓存配置 
cache-ref其它命名空间缓存配置的引用 

2.select

select常用配置
元素说明备注
id                              与Mapper接口中对应的方法一致,且与Mapper的命名空间组合起来是唯一的。命名空间+id必须保证唯一,否则报错
parameterType参数类型,可以是类全名、类别名即类对象,各种数据类型String、int、float等。JavaBean、Map、List均可。
parameterMap即将删除,暂不讨论 
resultType自动匹配时,可以定义类全名,结果集将与JavaBean映射,返回实体对象。
也可返回int、double、float,即查询出数据库中特定的字段信息。
注意:不能与resultMap同时使用。
比如根据主键id查找某条实体对象、查询所有数据信息的数量int等。
resultMap映射集一般把某一实体的对象属性与表中列一一对应起来,可以重复引用。
useCache启动二级缓存开关,是否把此次结果缓存取布尔值true/false,默认true。
   

2.1简单查询

	BookMapper mapper = session.getMapper(BookMapper.class);
	int all = mapper.countAllByAuthor("qqq");
	System.out.println(all);
	public int countAllByAuthor(String author);//根据作者名模糊统计数量

参数为String类型,返回结果为int类型。
	<select id="countAllByAuthor" resultType="int" parameterType="String">
		select COUNT(*) as total
		from book
		where author like concat('%',#{author},'%')
	</select>

2.2 自动映射

上篇文章中介绍到autoMappingBehavior参数,当不为NONE时将提供自动映射功能,只要返回的SQL列名和JavaBean属性一致就能自动对应匹配。
定义查询语句:
	<select id="getById" resultType="cn.wsz.mybatis.domain.Book" parameterType="Long">
		select id, name, author, price, des, date
		from book
		where id = #{id}
	</select>
定义mapper方法
	public Book getById(Long id);
获取方法:
	BookMapper mapper = session.getMapper(BookMapper.class);
	Book book = mapper.getById(10L);
	System.out.println(book.toString());
获取结果:
	Book [id=10, name=87, author=87, price=5.0, des=87, date=null]

2.3 sql

利用自动映射,可以简化查询结果集。比如以下定义实体类的属性列,也可以在其他地方重复引用。 注意:对应属性是否一致。如果POJO采用驼峰命名,数据库列每一个单词都用下划线分隔,可以设置mapUnderscoreToCamelCase为true,便能自动映射
mybatis配置文件增加:
 	 <settings>
   	 	<setting name="mapUnderscoreToCamelCase" value="true"/>
  	  </settings>


定义sql:
	<sql id="Base_Column">
		id,name,author,real_name,price,des,date
	</sql>

POJO属性:
	@Setter
	@Getter
	private long id;
	
	@Setter
	@Getter
	private String name;
	
	@Setter
	@Getter
	private String author;

	@Setter
	@Getter
	private String realName;

	@Setter
	@Getter
	private float price;
	
	@Setter
	@Getter
	private String des;
	
	@Setter
	@Getter
	private Date date;

在查询语句中引用sql:
	<select id="findOne" resultType="cn.wsz.mybatis.domain.Book" parameterType="Long">
		select <include refid="Base_Column"/>
		from book
		where id = #{id}
	</select>
mapper接口方法:
	public Book findOne(Long id);
查询方法:
	BookMapper mapper = session.getMapper(BookMapper.class);
	Book book = mapper.findOne(14L);
	System.out.println(book.toString());
查询结果:
	Book{id=14, name='88', author='88', realName='14', price=5.0, des='88', date=Tue Nov 07 21:24:23 CST 2017}

2.4 resultMap

	<resultMap type="cn.wsz.mybatis.domain.Book" id="BaseResultMap"> //唯一标识id
		<id     property ="id"        column="id"/>		//主键
		<result property="name"       column="name"/>		//其他
		<result property="author"     column="author"/>		
		<result property="realName"   column="real_name"/>
<result property="price" column="price"/><result property="des" column="des"/><result property="date" column="date"/></resultMap>

2.5传递多个参数

map传递参数
	<select id="findByMap" parameterType="map" resultMap="BaseResultMap">
		select <include refid="Base_Column"/>
		from book
		where author like concat('%',#{author},'%') or name like concat('%',#{name},'%')
	</select>


	public List<Book> findByMap(Map<String,Object> map);
	BookMapper mapper = session.getMapper(BookMapper.class);
	Map<String,Object> map = new HashMap<String,Object>();
	map.put("author","q");
	map.put("name","a");
	List<Book> list = mapper.findByMap(map);
	System.out.println(list.size());
使用注解传递参数
	<select id="findByAno" resultMap="BaseResultMap">
		select <include refid="Base_Column"/>
		from book
		where author like concat('%',#{author},'%') or name like concat('%',#{name},'%')
	</select>

	public List<Book> findByAno(@Param("author")String author,@Param("name")String name);

	BookMapper mapper = session.getMapper(BookMapper.class);
	List<Book> list = mapper.findByAno("q","a");
	System.out.println(list.size());
使用JavaBean传递参数
	<select id="findByJavaBean" resultMap="BaseResultMap" parameterType="cn.wsz.mybatis.domain.Book">
		select <include refid="Base_Column"/>
		from book
		where author like concat('%',#{author},'%') or name like concat('%',#{name},'%')
	</select>

	public List<Book> findByJavaBean(Book book);

	BookMapper mapper = session.getMapper(BookMapper.class);
	Book book = new Book();
	book.setAuthor("q");
	book.setName("a");
	List<Book> list = mapper.findByJavaBean(book);
	System.out.println(list.size());

3.insert

提供主键回填,可以获取新增主键id

 	 <insert id="insertBook" useGeneratedKeys="true" keyProperty="id" parameterType="cn.wsz.mybatis.domain.Book"> 
 	  	 insert into book(id,name,author,price,des,date)
 	  	 values(#{id},#{name},#{author},#{price},#{des},#{date})
 	 </insert>
 	 <insert id="batchInsert"> 
 	  	insert into book(id,name,author,price,des,date)
 	 	values 
 	 		<foreach item="item" index="key" collection="list"  open="" separator="," close="">
 	 			(#{item.id},#{item.name},#{item.author},#{item.price},#{item.des},#{item.date})
                       </foreach> 
 	 </insert>

4.update



 	 <update id="updateBook" parameterMap="book">
 	 	update book 
 	 	set name = #{name},author = #{author},price = #{price},des = #{des}
 	 	where id = #{id}
 	 </update>

5.delete

 	 <delete id="deleteById" parameterType="java.lang.Long">
 	 	delete
 	 	from book
 	 	where id = #{id}
 	 </delete>
 	 
 	 <delete id="batchDelete">
 	 	delete
 	 	from book
 	 	where id in
 	 		<foreach collection="list" item="id" index="key" open="(" separator="," close=")">
 	 			#{id}
 	 		</foreach>
 	 </delete>

insert、update、delete方法请查阅前面的文章,此处不再赘述。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值