文章目录

  • Mybatis_resultType&&resultMap属性
  • Mybatis多条件查询方式一
  • Mybatis多条件查询方式二
  • Mybatis多条件查询方式三
  • Mybatis模糊查询方式一
  • Mybatis模糊查询方式二
  • ${} 与 #{}区别
  • Mybatis映射文件_添加用户:获取返回主键:方式一
  • Mybatis映射文件_添加用户:获取返回主键:方式二

Mybatis_resultType&&resultMap属性

  1. resultType属性:如果实体的属性名与表中字段名一致,将查询结果自动封装到实体类中

  2. resultMap属性:如果实体的属性名与表中字段名不一致,可以使用ResutlMap实现手动封装到实体类中

  3. 编写UserMapper接口

    /*** 查询User表中所有用户的方法* */
    public List<User> findAllResultMap();
    
  4. 编写UserMapper.xml

    
    <!--id : 标签的唯一标识-->
    <!--type: 封装后实体类型-->
    <resultMap id="userResultMap" type="com.code.entity.User"><!--手动配置映射关系--><!--id: 用来配置主键--><id property="id" column="id"></id><!-- result: 表中普通字段的封装--><result property="username" column="username"></result><result property="birthday" column="birthday"></result><result property="sex" column="sex"></result><result property="address" column="address"></result>
    </resultMap><!--查询所有用户-->
    <!--resultMap:手动配置实体属性与表中字段的映射关系,完成手动封装-->
    <select id="findAllResultMap" resultMap="userResultMap">select * from user
    </select>
    
  5. 编写测试代码

    /*** ResutlMap 手动封装属性测试方法* @throws IOException*/
    @Test
    public void findAllResultMap() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> allResultMap = mapper.findAllResultMap();for (User user : allResultMap) {System.out.println(user);}sqlSession.close();}
    

Mybatis多条件查询方式一

根据id和username查询user表

方式一:使用 #{arg0}-#{argn} 或者 #{param1}-#{paramn} 获取参数

  1. 编写 userMapper接口

    /*** 多条件连接查询方式一* */
    public List<User> findByIdAndUsername1(int id, String username);
    
  2. 编写 UserMapper.xml

    <!--多条件查询:方式一-->
    <select id="findByIdAndUsername1" resultMap="userResultMap" ><!-- select * from user where id = #{arg0} and username = #{arg1}-->select * from user where id = #{param1} and username = #{param2}
    </select>
    
  3. 编写测试代码

    /*** 多条件查询方式一*/
    @Test
    public void findByIdAndUsername1() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.findByIdAndUsername1(1, "子慕");for (User user : users) {System.out.println(user);}sqlSession.close();
    }
    

Mybatis多条件查询方式二

根据id和username查询user表
方式二:使用注解,引入 @Param() 注解获取参数

  1. 编写UserMapper接口

    /*** 多条件查询方式二* @param id* @param username* @return*/
    public List<User> findByIdAndUsername2(@Param("id") int id, @Param("username") String username);
    
  2. 编写UserMapper.xml

    <!--多条件查询:方式二-->
    <select id="findByIdAndUsername2" resultMap="userResultMap" >select * from user where id = #{id} and username = #{username}
    </select>
    
  3. 编写测试代码

    /*** 多条件查询:方式二* @throws IOException*/
    @Test
    public void findByIdAndUsername2() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.findByIdAndUsername2(1, "子慕");for (User user : users) {System.out.println(user);}sqlSession.close();
    }
    

Mybatis多条件查询方式三

根据id和username查询user表
方式三:使用JavaBean对象传递参数

  1. 编写 UserMapper接口

    /*** 条件查询方式三* @param user* @return*/
    public List<User> findByIdAndUsername3(User user);
    
  2. 编写 UserMapper.xml

    <!--多条件查询:方式三-->
    <select id="findByIdAndUsername3" resultMap="userResultMap" parameterType="com.code.entity.User">select * from user where id = #{id} and username = #{username}
    </select>
    
  3. 编写测试代码

    /*** 多条件查询:方式三* @throws IOException*/
    @Test
    public void test5() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);User user1 = new User();user1.setId(1);user1.setUsername("子慕");List<User> users = mapper.findByIdAndUsername3(user1);for (User user : users) {System.out.println(user);}sqlSession.close();
    }
    

Mybatis模糊查询方式一

根据username模糊查询user表

  1. 编写UserMapper接口

    /*** 模糊查询方式一* @param username* @return*/
    public List<User> findByUsername(String username);
    
  2. 编写UserMapper.xml映射

    <!--模糊查询:方式一-->
    <select id="findByUsername" resultMap="userResultMap" parameterType="string"><!-- #{}在mybatis中是占位符,引用参数值的时候会自动添加单引号 -->select * from user where username like #{username}
    </select>
    
  3. 测试代码

    /*** 模糊查询方式一* @throws IOException*/
    @Test
    public void test6() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.findByUsername("%子%");for (User user : users) {System.out.println(user);}sqlSession.commit();sqlSession.close();
    }
    

Mybatis模糊查询方式二

根据username模糊查询user表

  1. 编写UserMapper接口

    /*** 模糊查询方式二* @param username* @return*/
    public List<User> findByUsername2(String username);
    
  2. 编写 UserMapper.xml 映射

    <!--模糊查询:方式二-->
    <select id="findByUsername2" resultMap="userResultMap" parameterType="string"><!--parameterType是基本数据类型或者String的时候,${}里面的值只能写value${}: sql原样拼接-->select * from user where username like '${value}'
    </select>
    
  3. 编写测试代码

    /*** 模糊查询 方式二* @throws IOException*/
    @Test
    public void test7() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.findByUsername2("%子慕%");for (User user : users) {System.out.println(user);}sqlSession.close();
    }
    

${} 与 #{}区别

  1. #{} :表示一个占位符号:

    1. 通过 #{} 可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。
    2. #{} 可以接收简单类型值或pojo属性值。如果parameterType传输单个简单类型值, #{} 括号中名称随便写。
  2. ${} :表示拼接sql串:
    1. 通过 ${} 可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,会出现sql注入问题。
    2. ${} 可以接收简单类型值或pojo属性值
    3. 如果parameterType传输单个简单类型值, ${} 括号中只能是value。

Mybatis映射文件_添加用户:获取返回主键:方式一

返回主键:向数据库插入一条记录后,希望能立即拿到这条记录在数据库中的主键值。

  1. 编写userMapper.

    /*** 添加用户:获取返回主键:方式一* @param user*/
    public void saveUser(User user);
    
  2. 编写userMapper.xml配置文件

    <!--添加用户:获取返回主键:方式一-->
    <!--useGeneratedKeys: 声明返回主键keyProperty:把返回主键的值,封装到实体中的那个属性上
    -->
    <insert id="saveUser" parameterType="user" useGeneratedKeys="true" keyProperty="id">insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>
    
  3. useGeneratedKeys=“true” 声明返回主键,只适用于主键自增的数据库,mysql和sqlserver支持,oracle不行。

  4. 编写测试代码

    /*** 添加用户返回主键:方式一* @throws IOException*/
    @Test
    public void test8() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("某冰冰");user.setBirthday(new Date());user.setAddress("北京昌平");user.setSex("女");System.out.println(user);mapper.saveUser(user);System.out.println(user);sqlSession.commit();sqlSession.close();}
    

Mybatis映射文件_添加用户:获取返回主键:方式二

  1. 编写 userMapper

    /*** 添加用户:获取返回主键:方式二* @param user*/
    public void saveUser2(User user);
    
  2. 编写 userMapper.xml

    <!--添加用户:获取返回主键:方式二-->
    <insert id="saveUser2" parameterType="user" ><!--selectKey : 适用范围更广,支持所有类型的数据库order="AFTER"  : 设置在sql语句执行前(后),执行此语句keyColumn="id" : 指定主键对应列名keyProperty="id":把返回主键的值,封装到实体中的那个属性上resultType="int":指定主键类型--><selectKey order="AFTER" keyColumn="id" keyProperty="id" resultType="int">SELECT LAST_INSERT_ID();</selectKey>insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>
    
  3. 编写测试代码

    /*** 添加用户:返回主键方式二*/
    @Test
    public void test9() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("汤唯");user.setBirthday(new Date());user.setAddress("北京昌平");user.setSex("女");System.out.println(user);mapper.saveUser2(user);System.out.println(user);sqlSession.commit();sqlSession.close();}
    

Mybatis复杂映射映射文件相关推荐

  1. mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  2. MyBatis 入门到精通(二) SQL语句映射XML文件

    MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在.对于它的强大功能,SQL 映射文件的配置却非常简单. 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射 ...

  3. myBatis的xml映射文件中传入list集合与数组做条件

    mybatis的xml映射文件中传入list集合与数组做条件 1.传list集合参数 1.1sql映射: <select id="queryDeptListByBankLevelAnd ...

  4. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  5. mysql映射mapper_这下够清楚了吧!详解Mybatis的Mapper映射文件

    前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上 ...

  6. mybats实操-前期入门写法分析,SqlSessionFactory 获取SqlSession, 系统核心配置文件 mybatis-config.xml,SQL映射XML文件,MyBatis缓存

    标题 偏向这一块的配置 打个预防针 尽量别用中文路径 尤其配置文件 1.导入数据库(smbms_db.sql) 下载maven并且配置环境变量 去IDEA配置好maven 以后maven项目直接用 m ...

  7. MyBatis学习之映射器Mapper(接口映射器+xml映射文件)

    Table of Contents 01 MyBatis映射器: 1.1 接口映射器+xml映射器 1.2 接口映射器+注解 02 接口映射器+xml映射器  方式 2.1 mybatis配置文件 引 ...

  8. MyBatis Review——输入输出映射

    一,输入映射 mybatis的输入映射通过parameterType指定,可以为简单类型,包装类型,hashmap类型. 1,简单类型 <select id="findUserByNa ...

  9. MyBatis的关联映射之 一对一(嵌套查询/嵌套结果)

    关联映射概述 在实际的开发中,对数据库的操作常常会涉及多张表,这在面向对象中就涉及了对象与对象之间的关联关系 针对多表之间的操作, MyBatis 提供了关联映射,通过关联映射就可以很好地处理对象与对 ...

  10. 第4章 MyBatis的关联映射和缓存机制

    目录/Contents 第4章 MyBatis的关联映射和缓存机制 学习目标 了解数据表之间的三种关联关系 了解对象之间的三种关系 熟悉关联关系中的嵌套查询和嵌套结果 掌握一对一关联映射 掌握一对多关 ...

最新文章

  1. 如何查看Linq to SQL运行时,实际执行的Sql语句
  2. 单独部署activemq-web-console (转载)
  3. 被清华免试录取的围棋天才,横扫60位围棋大师的最强AI,竟然都输给了高中生!?...
  4. KafkaConsumer.poll : Timeout must not be negative
  5. 接受吧,这世界充满潜规则
  6. 网络篇 使用Visio来画网络拓扑图01
  7. 用计算机关闭无线网络连接,我的DELL笔记本电脑无线网络已关闭,怎么进行再连接?...
  8. 关于地图矢量下载器的使用感受
  9. 开平方的快速算法(C程序)
  10. ubuntu安装英伟达显卡GT 540M驱动
  11. 现场总线技术笔记——3、通用串行端口的数据通信(RS232、RS485)
  12. 【元宇宙系列】元宇宙的创世居民——M 世代(Mateverse)
  13. 麻省理工学院公开课:计算机科学及编程导论
  14. PHP - 使用file_get_contents下载远程文件到本地
  15. NepCTF2021一些web题目的总结与复现
  16. 利用Python将一个Excel拆分为多个Excel
  17. telegram 常见问题
  18. [USACO18JAN] Lifeguards S (线段树:扫描线面积)
  19. Python学习——Python海龟制图中的文字
  20. 选择排序小程序(c语言)

热门文章

  1. iOS系统各版本占比/占有率
  2. 开源php官方团队解散,php语言大厦将倾?
  3. 苹果手机白屏_安卓用久了卡顿 苹果用久了闪退 究竟是因为啥?
  4. mysql非结构化查询_Mysql(2.3) 简单查询(SELECT)、子查询
  5. PCL点云使用贪婪三角化进行曲面重构
  6. k8s-linux上安装
  7. python 异常重试模块retry
  8. 50种编程语言打印hello world
  9. 蓝桥杯-基础练习-特殊回文数
  10. 学习Java未来就业前景和方向如何?