mybatis(5)参数处理+语句查询

这篇具有很好参考价值的文章主要介绍了mybatis(5)参数处理+语句查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、简单单个参数

简单类型包括:
● byte short int long float double char
● Byte Short Integer Long Float Double Character
● String
● java.util.Date
● java.sql.Date

总而言之就是 mybaits可以自动匹配参数类型,之后通过setXXX来注入。
我们也可以显示标注类型,省去mybatis的类型匹配。
比如 char 类 我们可以通过parameterType 来告诉mybatis 参数类型是什么,其他基本数据类型都一样,不在举例。

 <select id="selectbysex" resultType="student" parameterType="java.lang.Character">
        select *from t_student where sex=#{sex}
    </select>

2、Map参数

注意的是 我们传的如果是map,则我们#{map的key值},不能是其他的。

    <select id="selectBYmap" resultType="student">
        select * from t_student where name=#{namekey} and age=#{agekey}
    </select>
   @Test
    public  void testMap(){
        SqlSession sqlSession = MybatisUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Map<String,Object> map=new HashMap<>();
        map.put("namekey","cky");
        map.put("agekey",18);
        mapper.selectBYmap(map).forEach(student -> System.out.println(student));
        sqlSession.close();
    }

3、实体类参数

注意:如果我们传的是实体类,则#{},{}里应该是实体类的属性名,不能是其他。

 <select id="selectByclass" resultType="student">
        select * from t_student where name=#{name} and age=#{age}
    </select>
   @Test
    public  void testClass(){
        SqlSession sqlSession = MybatisUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student=new Student();
        student.setAge(18);
        student.setId(10L);
        student.setBirth(new Date());
        student.setHeight(1.65);
        student.setSex('女');
        student.setName("c");

        mapper.selectByclass(student).forEach(stu -> System.out.println(stu));
        sqlSession.close();
    }

4、多参数

传入多参数时,其实mybatis底层是帮我们封装成了map集合。

使用arg

    List<Student> selectNameandSex2(String name, Character sex);
    <select id="selectNameandSex2" resultType="student">
        select * from t_student where name=#{arg0} and sex=#{arg1}
    </select>
   @Test
    public  void testarg(){
        SqlSession sqlSession = MybatisUtils.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        mapper.selectNameandSex2("cky",'女').forEach(student -> System.out.println(student));
        sqlSession.close();
    }

使用param

    <select id="selectNameandSex2" resultType="student">
        select * from t_student where name=#{param1} and sex=#{param2}
    </select>

两者联合使用

    <select id="selectNameandSex2" resultType="student">
        select * from t_student where name=#{param1} and sex=#{arg1}
    </select>

这里例子 就等同于帮我们封装了一个map集合
map(“arg0”,“cky”);map(“arg1”,18);map(“param1”,“cky”);map(“param2”,18);
args从0开始,param参数从1开始。
两个都在map中。

5、@Param注解

如果我们想要使用自己标注的名字,就要使用@Param注解。

   List<Student> selectNameandSex(@Param("name1") String name,@Param("sex1") Character sex);
   <select id="selectNameandSex" resultType="student">
        select * from t_student where name=#{name1} and sex=#{sex1}
    </select>

使用了param注解,底层也是帮我们封装成了map集合,但是是将我们自己定义的名字封装为key,且这里argx不能再用,但是paramx仍可以使用。
就相当于帮我们封装成
map(“param1”,“cky”);map(“param2”,18);map(“name1”,“cky”);map(“sex1”,18);

6、语句查询

6.1 返回一个实体类对象

根据id查找时,我们查找的对象正好有对应的实体类,则我们可以直接返回一个实体类对象

 <select id="selectByid" resultType="car">
        select * from t_car where id=#{id}
    </select>
    @Test
    public void testid1(){
        SqlSession sqlSession = MybatisUtils.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Car car = mapper.selectByid(2);
        System.out.println(car);
        sqlSession.close();
    }

mybatis(5)参数处理+语句查询,java,mybatis,mybatis,java,开发语言

6.2 返回多个实体类对象 List<>

 <select id="selectAllCar" resultType="Car">
        select id,car_num,brand,guide_price,produce_time,car_type from t_car ;
    </select>
  @Test
    public void tesr(){
        SqlSession sqlSession = MybatisUtils.openSession();
        //getMapper()  参数传入我们要代理的接口类 之后底层 会调用javassist 自动帮助我们生成 实现类 并将实现类返回 我们可以直接调用接口类的方法

        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Car> cars = mapper.selectAllCar();
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    }

mybatis(5)参数处理+语句查询,java,mybatis,mybatis,java,开发语言

6.3 返回一个Map对象

如果我们返回的对象在我们的项目中没有对应的实体类的话,我们可以使用map

    Map<String,Object> selectByID(int id);
    <select id="selectByID" resultType="map">
        select * from t_car where id=#{id}
    </select>
  @Test
    public void test1(){
        SqlSession sqlSession = MybatisUtils.openSession();
        //getMapper()  参数传入我们要代理的接口类 之后底层 会调用javassist 自动帮助我们生成 实现类 并将实现类返回 我们可以直接调用接口类的方法

        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Map<String, Object> map = mapper.selectByID(2);
        System.out.println(map);
        sqlSession.close();
    }

使用map接收时,其key就是数据库的列名,并不是我们类的列名
mybatis(5)参数处理+语句查询,java,mybatis,mybatis,java,开发语言

6.4 返回多个Map对象 List

mybatis(5)参数处理+语句查询,java,mybatis,mybatis,java,开发语言

    List<Map<String,Object>> selectAllCar();
 <select id="selectAllCar" resultType="map">
        select * from t_car ;
    </select>
    @Test
    public void tesr(){
        SqlSession sqlSession = MybatisUtils.openSession();
        //getMapper()  参数传入我们要代理的接口类 之后底层 会调用javassist 自动帮助我们生成 实现类 并将实现类返回 我们可以直接调用接口类的方法

        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Map<String, Object>> maps = mapper.selectAllCar();
        maps.forEach(car -> System.out.println(car));
        sqlSession.close();
    }

mybatis(5)参数处理+语句查询,java,mybatis,mybatis,java,开发语言

6.5 返回一个大Map

如果我们使用List的话,我们如果想找一个id=x的map就需要遍历找匹配值,我们可以定义一个大的Map,其key是每一个返回结果的id值,其value是每一个查询结果。
mybatis(5)参数处理+语句查询,java,mybatis,mybatis,java,开发语言

    @MapKey("id")
    Map<Integer,Map<String,Object>> selectmyMap();
    <select id="selectmyMap" resultType="map">
        select * from t_car
    </select>
 @Test
    public void test2(){
        SqlSession sqlSession = MybatisUtils.openSession();
        //getMapper()  参数传入我们要代理的接口类 之后底层 会调用javassist 自动帮助我们生成 实现类 并将实现类返回 我们可以直接调用接口类的方法

        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Map<Integer, Map<String, Object>> integerMapMap = mapper.selectmyMap();
        System.out.println(integerMapMap);
        sqlSession.close();
    }

结果是一个大的map
{2={car_num=1000, id=2, guide_price=1000000.00, produce_time=2000-11-11, brand=宝马100, car_type=燃油车},
3={car_num=102, id=3, guide_price=40.30, produce_time=2014-10-05, brand=丰田mirai, car_type=氢能源},
4={car_num=102, id=4, guide_price=40.30, produce_time=2014-10-05, brand=丰田mirai, car_type=氢能源},
7={car_num=1002, id=7, guide_price=100.00, produce_time=2023-03-28, brand=五菱11, car_type=电车},
8={car_num=1000, id=8, guide_price=100.00, produce_time=2024-04-09, brand=1, car_type=dianche},
9={car_num=1000, id=9, guide_price=100.00, produce_time=2024-04-09, brand=1, car_type=dianche}}

6.6 结果映射

查询结果的列名和java对象的属性名对应不上怎么办?
● 第一种方式:as 给列起别名
● 第二种方式:使用resultMap进行结果映射
● 第三种方式:是否开启驼峰命名自动映射(配置settings)

不知道为什么 ,我没有起过别名,也没有进行自动映射,但是如果我用一个实体类接收,他自动帮我转成了实体类的属性名。

6.6.1 使用resultMap

<!--
        resultMap:
            id:这个结果映射的标识,作为select标签的resultMap属性的值。
            type:结果集要映射的类。可以使用别名。
-->
<resultMap id="carResultMap" type="car">
  <!--对象的唯一标识,官方解释是:为了提高mybatis的性能。建议写上。-->
  <id property="id" column="id"/>
  <result property="carNum" column="car_num"/>
  <!--当属性名和数据库列名一致时,可以省略。但建议都写上。-->
  <!--javaType用来指定属性类型。jdbcType用来指定列类型。一般可以省略。-->
  <result property="brand" column="brand" javaType="string" jdbcType="VARCHAR"/>
  <result property="guidePrice" column="guide_price"/>
  <result property="produceTime" column="produce_time"/>
  <result property="carType" column="car_type"/>
</resultMap>

<!--resultMap属性的值必须和resultMap标签中id属性值一致。-->
<select id="selectAllByResultMap" resultMap="carResultMap">
  select * from t_car
</select>

6.6.2 驼峰式映射

是否开启驼峰命名自动映射
使用这种方式的前提是:属性名遵循Java的命名规范,数据库表的列名遵循SQL的命名规范。
Java命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式。
SQL命名规范:全部小写,单词之间采用下划线分割。
比如以下的对应关系:
mybatis(5)参数处理+语句查询,java,mybatis,mybatis,java,开发语言
如何启用该功能,在mybatis-config.xml文件中进行配置:文章来源地址https://www.toymoban.com/news/detail-854988.html

<!--放在properties标签后面-->
<settings>
  <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

到了这里,关于mybatis(5)参数处理+语句查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis-plus 配置自定义sql(.xml文件)查询语句的步骤

    这是使用Mybatis-plus 的自动生成实体类代码生成.xml文件, 所以他会在java目录下,不在resources目录下 如果在java目录下的xml文件,需要分别配置application.yml和pom.xml文件 type-aliases-package:java目录下边的第一级包名 mapper-locations: classpath:映射器的地址: 类路径:也就是.xml所在的包名

    2024年02月16日
    浏览(42)
  • MyBatis动态语句且如何实现模糊查询及resultType与resultMap的区别---详细介绍

    前面我们学习了如何使用Mybatis实现简单的增删改查。今天我们来学习如何使用动态语句来根据不同的条件生成不同的SQL语句。这在实际开发中非常有用,因为通常查询条件是多样化的,需要根据实际情况来拼接SQL语句,那什么是MyBatis动态语句呢,看下面详细简介 MyBatis动态语

    2024年02月11日
    浏览(30)
  • Flask SQLAlchemy怎么查看参数化查询的实际SQL语句

    Flask SQLAlchemy操作数据库时,不管是直接用sql语句还是用orm,有的时候为了调试,都需要知道参数化查询的sql语句生成的实际sql语句是什么。 比如: 经过层层调试,发现实际语句在 pymysql/cursors.py 中的 Cursor.mogrify 方法中生成(其他mysql驱动如mysqlclient,情况也类似),在 retu

    2024年01月16日
    浏览(37)
  • mybatis-plus技巧--动态表名-多语句-拼接sql--关于mybatis的mysql分页查询总数的优化思考

    传入tableName参数就可以了,不过只能用$不能用# 因为#会发生预编译,然后会在表名上加引号’\\\'。 新建一个表名拦截类实现TableNameHandler mybatisPlus添加插件 实例: 每天按统计 如果表名为count则加上今天的时间 每次设置 直接设置名字,然后就会改变的。 需要在配置文件中的

    2024年01月16日
    浏览(36)
  • mybatis的参数处理详解

    parameterType配置参数 1、参数的使用说明 使用标签的 parameterType 属性来设定。该属性的取值可以是基本类型,引用类型(例如:String 类型),还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装类,使用实体类的包装类作为参数传递。 2、参数配置的注意事项 基本类

    2023年04月23日
    浏览(28)
  • Mybatis:一对一查询映射处理

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! MyBatis是一种流行的Java持久化框架,它提供了灵活而强大的查询映射功能。在一些复杂的数据模型中

    2024年02月14日
    浏览(30)
  • [SSM]MyBatis常用技巧和参数处理

    目录 八、MyBatis小技巧 8.1#{}和${} 8.2别名机制:typeAliases 8.3mappers ​编辑 8.4IDEA配置文件模板 8.5插入数据时获取自动生成的主键 九、MyBatis参数处理 9.1单个简单参数类型 9.2Map参数 9.3实体类参数 9.4多参数 9.5@Param注解(命名参数) 9.6@Param源码分析 8.1#{}和${} #{}和${}的区别 #{}:底层

    2024年02月12日
    浏览(29)
  • SQL语句详解四-DQL(数据查询语言-多表查询二)

    接下来需要用到的表 查询语法 注意:多表查询要 消除无用的数据 内连接查询 隐式内连接 使用 where 条件消除无用数据 标准格式 示例代码 查询所有员工信息和对应的部门信息 查询员工表的名称、性别,部门表的名称 显示内连接 语法 示例代码 查询所有员工信息和对应的部

    2024年01月19日
    浏览(37)
  • ES7.x的查询语句及java查询语句

    Elasticsearch 7.x 是一个基于 Lucene 的分布式搜索引擎,它提供了一个分布式全文搜索引擎,可以快速、准确地搜索、分析和存储海量数据。Elasticsearch 7.x 的主要特点包括: 分布式架构:Elasticsearch 7.x 是一个分布式系统,它可以运行在多个节点上,每个节点都是相互独立的,并且

    2024年02月08日
    浏览(34)
  • SQL语句详解四-DQL(数据查询语言-约束)

    概述:对表中的数据进行限定,保证数据的正确性,有效性和完整性。 约束分类 约束 约束意思 primary key 主键约束 not null 非空约束 unique 唯一约束 foreign key 外键约束 例子:sname varchar(40) not null, – 代表 sname 这个字段不能为 NULL 非空约束 概述:NOT NULL ,某一列的值不能

    2024年01月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包