【Mybatis学习】Mybatis映射器

来源:互联网 发布:殷嘉恩 let it go 编辑:程序博客网 时间:2024/05/29 08:59

映射器

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 totalfrom bookwhere 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, datefrom bookwhere 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@Getterprivate long id;@Setter@Getterprivate String name;@Setter@Getterprivate String author;@Setter@Getterprivate String realName;@Setter@Getterprivate float price;@Setter@Getterprivate String des;@Setter@Getterprivate Date date;

在查询语句中引用sql:
<select id="findOne" resultType="cn.wsz.mybatis.domain.Book" parameterType="Long">select <include refid="Base_Column"/>from bookwhere 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 bookwhere 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 bookwhere 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 bookwhere 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方法请查阅前面的文章,此处不再赘述。




原创粉丝点击