Mapper.xml映射文件详解

在我们使用Mybatis框架时,可以知道Mybatis有两个配置文件,一个是主要用来配置数据源(DataSource),事务管理(TranscationManager),事务通知(tx:advice./等,
另外还有一个就是Mapper.xml,其实就是用来配置SQL语句,这也说明了Mybatis是半自动化的ORM框架,不像Hibernate全自动化框架,不需要配置SQL语句。
来看看Mybatis的Mapper.xml配置:
1基本的数据类型:
通过id查询User表中的信息

//parameterType是参数类型(id)  resultType是返回结果的参数类型
<select id="findUserById" parameterType="int" resultType="user">
select * from user where id=#{id}
</select>

使用#可以有效的防止SQL注入,若对于该符号不是很清楚建议看下面这篇文章,Mybatis中${}和#{}的区别
使用这种简单类型的数据,在我们进行查询的时候,可以在查询语句中直接输入对应的值,
2String类型
接下来看看下面这种比较特殊的情况:通过名字进行模糊查询时

${}
<select id="selectUserByName" parameterType="string" resultType="user">
select * from user where username like "%${value}%"
</select>
进行查询:
List<User> list=userMapper.selectUserByName("小明");
#{}
<select id="selectUserByName" parameterType="string" resultType="user">
select * from user where username like "%#{value}%"
</select>
进行查询:
List<User> list=userMapper.selectUserByName("%小明%");
这个时候,需要加入%号,而${}就不需要,
同时还有一点,在使用Group by 语句时,只能用${},不能用#{}

3多个参数时

<select id="getByNameAge" resultType="user">
select * from user where name=#{0}  and age=#{1}
</select>

4进行级联查询
这里进行级联查询的时候,需要在实体类配置两个表之间的关系,一对多或多对一关系配置:
如下,两个实体类:
学生表和成绩表一对多

public  class student{
private int id;
private String name;
private String address;
//引入成绩表,又因为学生和成绩为一对多,所以在学生类中需要配置成绩的集合
private List<Source> source;
。。。。。。

Source表:

public  class student{
private int id;
private int grade;
//引入学生表,因为成绩表和学生表是多对一关系,所以只需要引入对应的学生类即可
private Student student;
。。。。。。。

接着去配置文件中完成映射
首先来配置Student这个类,
1配置student与数据库表的映射关系<resultMap>hibernate是通过<hibernamt-mapping>
2配置该级联查询的List集合,
通过Collection标签将结果映射到对应的属性中
3配置sql语句

ofType:指定映射到LIst集合属性中pojo的类型
property:将关联查询的多条数据映射到Source类属性中

<resultMap type="student" id="studentMap">
<id property="id"  column="id“/>
<result property="name" column="name"/>
<result property="address" column="address"/>
<!--一个学生可以有多个成绩所以使用collection
映射Source属性字段.ofType映射实体类,,-->
<collection property="source" ofType="source">
<id property="id" column="id"/>
<result property="grade" column="grade”/>
</collection>
</resultMap>
<!--配置对应的查询语句,resultMap对应上面配置的resultMap-->
<select id=getById" parameterType="int" resultMap="studentMap">
select * from  student as s,source sc where s.id=sc.id and s.id=#{};
</select>

配置Source表:
1配置该Source表与数据库表source的映射关系
2配置该级联映射
3配置sql数据查询语句

<resultMap type="source" id="sourceMap">
<id property="id" column="id"/>
<result property="source" column="source"/>
<!--配置与学生一对一的关系,.使用association,j将结果进行级联映射的配置,>
<association property="student"  javaType="student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="address" column="address"/>
</association>
<./resultMap>
<!--配置对应的sql查询语句-->
<select id=getById" parameterType="int" resultMap="soureceMap">
select * from  student as s,source sc where s.id=sc.id and sc.id=#{};
</select>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值