6、Mapper.xml介绍
Mapper映射文件时在实际开发过程使用最多的,也是我们学习的重点,Mapper文件中包含的元素有:
•cache – 配置给定命名空间的缓存。
•cache-ref – 从其他命名空间引用缓存配置。
•resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加 载你的对象。
•sql – 可以重用的 SQL 块,也可以被其他语句引用。
•insert – 映射插入语句
•update – 映射更新语句
•delete – 映射删除语句
•select – 映射查询语句
6.1、select元素
select :编写查询 sql 语句
id 属性:当前名称空间下的 statement 的唯一标识。必须要求 id 和 mapper 接口中的方法的名字一致。
resultType:将结果集映射为 java 的对象类型。必须(和 resultMap 二选一)
parameterType:传入参数类型。一般可以省略
6.2、insert元素
insert :里面书写 insert 语句的。 几个属性说明:
id 属性:必须的,当前名称空间下的 statement 的唯一标识(必须属性);
parameterType:传入的参数类型,可以省略。
标签内部:具体的 sql 语句。insert 语句
使用#{} 去替换一个变量。
如果需要数据库影响的行数,可以直接在接口上定义返回值 integer 即可 。
获取自增的 id 的值
mapper.xml的配置
<!--
获取数据库自增长的主键值
keyColumn:主键列的名字
keyPropertity:主键的实体对应的属性名称
useGeneratedKeys: 使用生成主键策略
-->
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyColumn="userid" keyProperty="userid">
insert into tb_user (userid,user_name,pwd,age,sex,birthday)
values(seq_user.nextval,#{userName},#{pwd},#{age},#{sex},#{birthday})
</insert>
java代码
@Test
public void testInsertUser() {
Date birthday = new Date();
User user = new User( "world", "123456", 15, "男", birthday);
int result=-1;
try {
result =userMapper.insertUser(user);
sqlsession.commit();
System.out.println(user.getUserid());
} catch (Exception e) {
e.printStackTrace();
sqlsession.rollback();
}
System.out.println(result);
}
6.3、update
update 的几个属性说明:
id 属性:当前名称空间下的 statement 的唯一标识(必须属性);
parameterType:传入的参数类型,可以省略。
标签内部:具体的 sql 语句。
使用#{} 去替换一个变量。
6.4、delete元素
delete 的几个属性说明:
id 属性:当前名称空间下的 statement 的唯一标识(必须属性);
parameterType:传入的参数类型,可以省略。
标签内部:具体的 sql 语句。
使用#{} 去替换一个变量。
6.5、resultMap元素
ResultMap是MyBatis中最重要最强大的元素,使用ResultMap可以解决两大问题
1.POJO属性名和表结构字段名不一致的问题(当驼峰搞定不了的时候)
2.完成高级查询,比如说:一对一,一对多,多对多
表字段名不一致的解决方案总结:
1.如果是标准的驼峰命名规则可以在MyBatis配置文件中设置驼峰开启
2.使用ResultMap解决
案例:使用resultMap解决之前的属性名和字段名不一致的问题
mapper.xml的定义
<resultMap type="User" id="UserMap" autoMapping="true">
<!--
id:主键
column:列名称
property::属性名
-->
<id column="userid" property="userid"/>
<!--
result:其它列使用result来进行定义
-->
<result column="user_name" property="userName"/>
</resultMap>
<select id = "queryListByTable" resultMap="UserMap">
select * from ${tableName}
</select>