mybatis 之三:映射文件

前言

基本上我们对数据库的操作都在映射文件中编写,通过mapper代理方式简化配置,同时依据不同的参数和返回类型完成相关需求

一:parameterType输入参数

简单类型:

1
2
3
4
<select id="findUserById" parameterType="int"
resultType="com.zwl.pojo.User">
SELECT * FROM user WHERE id =#{id}
</select>

参数是基本类型,在之前已演示

Pojo类型

1
2
3
4
5
6
<insert id="insertuser" parameterType="com.zwl.pojo.User">
<selectKey keyProperty="id" resultType="int" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user values(#{id},#{name},#{age})
</insert>

即参数类型是一个对象,如之前的添加操作

包装pojo类型
即在类中包含另一个对象,如

1
2
3
4
public class Uservo {
private User user;
此处省略set。。get方法
}

配置文件中

1
2
3
4
<select id="findUserById" parameterType="com.zwl.pojo.Uservo"
resultType="com.zwl.pojo.User">
SELECT * FROM user WHERE id =#{user.id}
</select>

参数是包装类,注意参数是包装类的属性

Map
同传递pojo对象一样,map的key相当于pojo的属性

1
2
3
4
<select id="findUserById" parameterType="hashmap"
resultType="com.zwl.pojo.User">
SELECT * FROM user WHERE id =#{id} and name=#{name}
</select>

显然,参数是hashmap,其中#{id}与#{name}都是hashmap的key

接口文件

1
2
3
public interface UserMapper {
public User findUserById(HashMap<String, Object> id) throws Exception;
}

测试类:

1
2
3
4
5
6
7
8
9
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> hm=new HashMap<>();
hm.put("id", 1);
hm.put("name","helloworld");
User u=mapper.findUserById(hm);
System.out.println(u.getAge());
sqlSession.close();

输出映射

Resulttype:
使用要求:
使用resultType进行结果映射时,需要查询出的列名和映射的对象的属性名一致,才能映射成功。
如果查询的列名和对象的属性名全部不一致,那么映射的对象为空。
如果查询的列名和对象的属性名有一个一致,那么映射的对象不为空,但是只有映射正确那一个属性才有值。

简单类型:resultType=”int”
Pojo对象:resultType=”com.zwl.pojo.User”

如之前的案例
Resultmap
使用resultMap进行结果映射时,不需要查询的列名和映射的属性名必须一致。但是需要声明一个resultMap,来对列名和属性名进行映射

1
2
3
4
5
<resultMap type="com.zwl.pojo.User" id="Userresult">
<id column="id_" property="id"/>
<result column="name_" property="name"/>
<result column="age_" property="age"/>
</resultMap>

其中id为查询结果中唯一列映射,result标签为映射结果中的普通列

1
2
3
4
<select id="findUserById" parameterType="int"
resultMap="Userresult" >
SELECT id id_,name name_,age age_ FROM user WHERE id =#{id}
</select>

其中resultmap必须与声明中的id保持一致,这样才能引用

接口:

1
2
3
public interface UserMapper {
public User findUserById(int id) throws Exception;
}

测试代码:

1
2
3
User u=mapper.findUserById(1);
System.out.println(u.getAge());
sqlSession.close();

mybatis与hibernate的区别及各自应用场景
Mybatis技术特点:
1、 通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、 学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、 由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、 不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。

Hibernate技术特点:
1、 标准的orm框架,程序员不需要编写SQL语句。
2、 具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。
3、 学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。
4、 程序员不能自主的去进行SQL性能优化。

热评文章