mybatis映射文件配置

二. 映射文件xml配置

1. dtd文件约束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">

2. mapper

<mapper namespace="com.qnkj.dao.IStudentDao"></mapper>

namespace:映射该命名空间中的方法

3. select

<select id="getAll" resultType="com.jxc.pojo.student">
	select * from student
</select>

常用的几个属性

  • id 在命名空间中唯一的标识符,可以被用来引用这条语句。

  • parameterType 将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler) 推断出具体传入语句的参数,默认值为未设置(unset)。

  • resultType 从这条语句中返回的期望类型的类的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。

  • resultMap 外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂映射的情形都能迎刃而解。可以使用 resultMap 或 resultType,但不能同时使用。

3. insert , update , delete

<insert id="addStudent">
   	insert student(id,name,age,gender) values(#{id},#{name},#{age},#{gender})
</insert>

<update id="updateStudent">
   	update student set name = #{name},age = #{name},gender = #{name},
</update>

<delete id="delStudent">
   	delete from student where id=#{id}
</delete>

4. 结果映射

你已经见过简单映射语句的示例了,但并没有显式指定 resultMap。比如:

<select id="getOneStudent" resultType="map">
     select id, name, age, gender
     from student
     where id = #{id}
</select>

上述语句只是简单地将所有的列映射到 HashMap 的键上,这由 resultType 属性指定。虽然在大部分情况下都够用,但是 HashMap 不是一个很好的领域模型。你的程序更可能会使用 JavaBean 或 POJO(Plain Old Java Objects,普通老式 Java 对象)作为领域模型。MyBatis 对两者都提供了支持。看看下面这个 POJO:

package com.jxc.pojo;

import java.io.Serializable;

public class Student implements Serializable {

    private Integer id;
    private String name;
    private Integer age;
    private String gender;
	
    public Integer getId() { return id; }

    public void setId(Integer id) { this.id = id;}

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public Integer getAge() { return age; }

    public void setAge(Integer age) { this.age = age; }

    public String getGender() { return gender; }

    public void setGender(String gender) { this.gender = gender; }

    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

基于 JavaBean 的规范,上面这个类有 4 个属性:id,name,age,gender。这些属性会对应到 select 语句中的列名。这样的一个 JavaBean 可以被映射到 ResultSet,就像映射到 HashMap 一样简单。

<select id="getOneStudent" resultType="com.jxc.pojo.Student">
	  select id, name, age, gender
	  from student
	  where id = #{id}
</select>

而我们在核心配置文件中配置了类型别名

<!--<typeAliases>
        <typeAlias type="com.jxc.pojo.Student" alias="student"></typeAlias>
</typeAliases> -->

<!-- 可以直接写别名-->
<select id="getOneStudent" resultType="student">
	  select id, name, age, gender
	  from student
	  where id = #{id}
</select>

问:怎么解决数据库列名和实体类属性不一致的情况?

  1. 用sql语句别名来解决
<select id="getAll" resultType="student">
	select 
		stu_id as id,
		stu_name as name,
		stu_age as age,
		stu_gender as gender
	from student
</select>
  1. 用resultMap解决
<resultMap id="studentMap" type="Student">
	<id property="id" column="stu_id"/>
	<result property="name" column="stu_name"/>
	<result property="age" column="stu_age"/>
	<result property="gender" column="stu_gender"/>
</resultMap>
<!-- 而在引用它的语句中使用 resultMap 属性就行了(注意我们去掉了 resultType 属性)。比如: -->
<select id="getAll" resultMap="studentMap">
	 select id, name, age, gender from student
</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值