MyBatis映射文件的使用

0.前言

使用MyBatis会节省很多代码,只需要写一个接口,并且在映射文件中写sql语句,就能很快速的完成需求。先来看一个简单的增删改查。
接口:

public interface AdminMapper {
    void insert(Admin admin);
    void delete(Integer id);
    void update(Admin admin);
    Admin getAdmin(Integer id);
}

程序:

public class TestMain {
    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream resourceAsStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(resourceAsStream);
    }
    @Test
    public void Test_1() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            AdminMapper mapper = openSession.getMapper(AdminMapper.class);
            //增加一个admin
            Admin admin = new Admin(null,"xiaoming","123456");
            mapper.insert(admin);
            //获取一个admin
            Admin admin1 = mapper.getAdmin(1);
            System.out.println(admin.toString());
            //删除
            mapper.delete(6);
            //更新
            Admin admin2 = new Admin(1,"jjjj","123456");
            mapper.update(admin2);
            openSession.commit();
        } finally {
            openSession.close();
        }
    }
}

映射配置文件:

<?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">
<mapper namespace="com.liulu.mybatis.dao.AdminMapper">
    <select id="getAdmin" resultType="com.liulu.mybatis.domain.Admin">
    select * from admin where id = #{id}
  </select>
    <insert id="insert" >
        insert into admin(username,password)
        value (#{username},#{password})
    </insert>
    <delete id="delete">
        delete from admin
        where id = #{id}
    </delete>
    <update id="update">
        update admin
        set username = #{username},
            password = #{password}
        where id = #{id}
    </update>
</mapper>

本文主要讲映射文件的使用,也算是一个复习的笔记,在官方文档中也有介绍:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

1.insert获取主键的值

在jdbc中获取主键的值可以使用statement.getGenreatedKeys()方法来获取,在MyBatis中对映射文件进行相应的配置就可以自动的封装在javaBean中了。useGeneratedKeys=“true”:表示使用自增主键属性, keyProperty=“id”:将自增的主键赋值给id

<insert id="insert" useGeneratedKeys="true" keyProperty="id">
        insert into admin(username,password)
        value (#{username},#{password})
</insert>

执行这段代码将会得到自增的主键。

AdminMapper mapper = openSession.getMapper(AdminMapper.class);
//增加一个admin
Admin admin = new Admin(null,"alu4r","123456");
mapper.insert(admin);
System.out.println(admin.getId());

2.参数的处理

当接口中定义了多个方法时,将不能使用#{…}的方式:

<select id="getAdmin" resultType="com.liulu.mybatis.domain.Admin">
 	select * from admin where id = #{id} and username = #{username}
</select>

这样使用将会出现异常:
在这里插入图片描述
提示找不到参数id,在xml中只能写成paramx的形式。比如
在这里插入图片描述
需要这样使用才不会出错。

2.1 使用注解@Param(“…”)

**如果需要写成#{id}、#{usernaem}**的方式就需要在接口声明方法的时候这样做:

Admin getAdmin(@Param("id") Integer id,@Param("username") String username);

2.2 使用java Bean

新建一个类,数据成员写相应的属性

public class ParamBean {
    Integer id;
    String username;
    public ParamBean(Integer id, String username) {
        this.id = id;
        this.username = username;
    }
}
_____________________________________________________
@Test
public void Test_1() throws IOException {
    String resource = "mybatis-config.xml";
    InputStream resourceAsStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession openSession = sqlSessionFactory.openSession();
    try {
        AdminMapper mapper = openSession.getMapper(AdminMapper.class);
        //增加一个admin
        Admin admin = mapper.getAdmin(new ParamBean(7,"alu4rP"));
        System.out.println(admin.toString());
        openSession.commit();
    } finally {
        openSession.close();
    }
}

这个java Bean被称作数据传输对象TO
此外当传入的参数是一个map的时候,在映射文件中写sql的时候可以使用 "#{map中的key} "就可以直接获取键对应的值。那么如果传的是一个List或者数组,那么我们需要通过#{list[0]}或者#{array[0]}来引用

3.#和$的区别

在这里插入图片描述
在这里插入图片描述
通过测试我们可以发现#是已占位符的方式来预编译sql语句的,而KaTeX parse error: Expected 'EOF', got '#' at position 7: 则不是,使用#̲可以防止sql注入。此外我们在…,比如有多个表2016_info、2017_info、2018_info,使用${year}_info来拼接表名,而且sql中不允许使用#的方式来为表名做占位符。

4.查询返回类型

当需要返回一个List的时候,resultType中设置list包装的类型,myBatis会自动把他转为list。
在这里插入图片描述

当返回Map<String,Admin>时,需要设置key由什么来充当:
在这里插入图片描述

5.reslutMap

他的作用就是定义映射规则、级联的更新。定义结果映射集的关系,也就是sql到javaBean的关系。通过官方文档有以下几个标签:
在这里插入图片描述
结果映射写在这里
在这里插入图片描述

6.结束语

主要把比较重要的列出来,具体使用的时候可以直接看文档。
不对之处!请多指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis映射文件是指Mapper文件,它是Mybatis中用于配置SQL语句的文件。在Mybatis的全局配置文件中,会配置Mapper文件的资源路径,创建SqlSessionFactory时会加载这些Mapper文件。Mapper文件中包含了SQL语句的映射以及相应的参数配置。\[1\] Mapper文件的标签包括cache、cache-ref、resultMap、parameterMap、sql、insert、update、delete和select等。其中,resultMap是最复杂也是最强大的元素,用于描述如何从数据库结果集中加载对象;parameterMap已经被废弃,不推荐使用;sql是可被其他语句引用的可重用语句块;insert、update、delete和select分别对应映射的插入、更新、删除和查询语句。\[2\] 在Mapper文件中,可以使用不同的方式传递参数。单个参数可以是基本类型或对象类型,Mybatis会直接使用这个参数。多个参数会被重新包装成一个Map传入,Map的key是param1、param2或者0、1等,值就是参数的值。也可以为参数使用@Param起一个名字,Mybatis会将这些参数封装进Map中,key就是我们自己指定的名字。当参数属于业务POJO时,可以直接传递POJO。还可以封装多个参数为Map进行传递,或者将Collection/Array封装成Map传入。\[3\] 总结来说,Mybatis映射文件是用于配置SQL语句的文件,其中包含了SQL语句的映射以及参数的配置。在Mapper文件中,可以使用不同的方式传递参数。 #### 引用[.reference_title] - *1* [Mybatis 映射文件](https://blog.csdn.net/dingd1234/article/details/123028627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Mybaits(映射文件)](https://blog.csdn.net/weixin_45739322/article/details/109193542)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值