文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MyBatis中映射文件的使用案例代码

2023-02-06 12:00

关注

Mapper 就是“映射”的意思,Mapper 文件时 Mybatis 中的 SQL 语句的配置文件,其会在运行时加载 SQL 语句并映射相应参数。在 Mybatis 的全局配置文件中,其中最后一项就是 mapper 文件的资源路径的配置,因为创建 SqlSessionFactory 时会加载全局配置文件,这说明 Mapper 映射文件会在创建伊始就会被加载了。本文重点讲解MyBatis映射文件的使用。

MyBatis中映射文件的使用

1、配置核心文件

①引入映射文件

​ 首先我们得在核心配置文件中配置mappers,引入映射文件所在的包

<mappers>
      <package name="com.ch.mybatis.mapper"></package>
</mappers>

这里必须满足两个条件

在这里插入图片描述

②配置typeAliases

typeAliases:设置类型别名,即为某个具体的类型设置一个别名。在MyBatis的范围中,就可以使用别名表示一个具体的类型。

在核心配置文件中设置typeAliases,在映射文件中则可以直接使用别名。

<!--
		标签的先后顺序
        properties?,settings?,typeAliases?,typeHandlers?,
        objectFactory?,objectWrapperFactory?,reflectorFactory?,
        plugins?,environments?,databaseIdProvider?,mappers?
    -->
<typeAliases>
        <package name="com.ch.mybatis.pojo"></package>
</typeAliases>

③配置映射文件

namespace接口的全类名和映射文件namespace一致。

<mapper namespace="com.ch.mybatis.mapper.userMapper">
    
</mapper>

2、MyBatis的增删改查

创建数据表

复制进MySQL数据库中运行即可

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `gender` char(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

工具类

​ 创建一个工具类,每次测试就不用去重新写,直接调用获取返回值即可

    public static SqlSession getSqlSession() {

        SqlSession sqlSession = null;
        try {
            //获取核心配置文件
            InputStream is = Resources.getResourceAsStream("MyBatis-config.xml");

            //获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

            //根据核心配置文件对应的输入流获取SqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);

            //获取SqlSession对象 自动提交
            sqlSession = sqlSessionFactory.openSession(true);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }

添加

首先得在Mapper接口中创建方法

int insertUser();

在映射文件中使用insert标签,标签中的id要与接口中的方法名保持一致。等调用接口中的方法,它会根据mapper接口的全类名找到映射文件,然后会根据我们调用的方法的方法名,来找到当前的sql语句,然后获取当前的sql来执行。

可以将接口的方法写在标签的上方,方便查看。

    <!-- int insertUser(); -->
    <insert id="insertUser">
        insert into t_user
        values (null, 'admin', '123456', 23, '男', '12345@qq.com')
    </insert>

测试代码

    public void testinsert(){

        SqlSession sqlSession = sqlSessionUtil.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int i = mapper.insertUser();

        sqlSession.close();

    }

修改

<!--  void updateUser();  -->
<update id="updateUser">
    update t_user set username='root',password='123'where id = 1
</update>

删除

    <!-- void deleteUser(); -->
    <delete id="deleteUser">
        delete from t_user where id = 1
    </delete>

查询

查询比较特殊除了得设置id还必须得设置另外一个参数resultType或resultMap

resultType:设置结果类型,即查询的数据要转换为的java的类型
resultMap:自定义映射,处理多对一或一对多的映射关系

resultType中应该写实体类的全类名,但是在核心文件中配置了typeAliases,所以这里可以直接写实体类的名字不区分大小写

 <!-- User selectUser();-->
<select id="selectUser" resultType="user">
    select id, username, password, age, gender, email from t_user where id = 1
</select>

3、MyBatis获取参数值的两种方式

MyBatis获取参数值的两种方式:${}#{}

${}的本质就是字符串拼接,#{}的本质就是占位符赋值

${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;
但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时, 可以自动添加单引号

单个字面量类型的参数

<!-- User getUserByUsername(String username); -->
<select id="getUserByUsername" resultType="user">
<!-- select * from t_user where username = #{username}-->
    select * from t_user where username = '${username}'
</select>

mapper接口方法的参数为单个的字面量类型此时可以通过#{}${}以任意的内容获取参数值,一定要注意${}的单引号问题

多个字面量类型的参数

<!-- User chekLogin(String username , String password); -->
<select id="chekLogin" resultType="user">
 <!-- select * from t_user where username = #{arg0} and password = #{arg1}-->
    select * from t_user where username = '${param1}' and password = '${param2}'
</select>

mybatis会自动把当前参数放在一个Map集合中

放在Map集合中会以两种方式存储数据

①arg0,arg1…为键,以参数为值

②param1,param2…为键,以参数为值

map集合类型的参数

<!-- User chekLoginByMap(Map<String,Object> map);-->
<select id="chekLoginByMap" resultType="user">
    select * from t_user where username = #{username} and password = #{password}
</select>

mapper接口方法的参数为map集合类型的参数

只需要通过#{}和${}范围map集合的键,

就可以获取相对于的值,一定要注意${}的单引号问题

测试代码

    public void testChekLoginByMap() {
        SqlSession sqlSession = sqlSessionUtil.getSqlSession();

        userMapper mapper = sqlSession.getMapper(userMapper.class);

        Map map = new HashMap<String, Object>();

        map.put("username", "admin");
        map.put("password", "123456");

        User admin = mapper.chekLoginByMap(map);
        System.out.println(admin);
    }

实体类类型的参数

<!-- void selectUser(User User); -->
<insert id="selectUser">
    insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
</insert>

mapper接口方法的参数为实体类类型的参数

只需要通过#{}和${}访问实体类中的属性名,

就可以获取相对于的属性值,一定要注意${}的单引号问题

使用@Param标识参数

<!-- User chekLoginByUser(@Param("username") String username ,@Param("password") String password); -->
<select id="chekLoginByUser" resultType="user">
    select * from t_user where username = #{username} and password = #{password}
</select>

可以在mapper接口将这些参数上设置@param注解

此时MyBatis会将这些参数放在map中,以@Param注解的value属性值为键,以参数为值;

到此这篇关于MyBatis中映射文件的使用的文章就介绍到这了,更多相关MyBatis映射文件的使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯