首页 > 其他分享 >Parameters参数、增删改标签、事务、typeAliases

Parameters参数、增删改标签、事务、typeAliases

时间:2024-10-30 14:15:44浏览次数:3  
标签:商品信息 Parameters int typeAliases Goods -- goods 增删 id

1.获取传入的参数值

1. #{} 形式传参,Mybatis会将SQL语句中的#{}转换为问号占位符?   

<!--根据商品编号,查询商品信息 -->

  <select id="selectById" parameterType="int" resultType="com.bdqn.pojo.Goods">

    select * from goods where id=#{id}

  </select>

2. ${} 形式传参,底层Mybatis做的是字符串拼接操作

//调用方法,既可以触发对应的SQL语句

  Goods goods=goodsMapper.selectById(10020);

<!--根据商品编号,查询商品信息-->

  <select id="selectById" parameterType="int" resultType="com.bdqn.pojo.Goods">

    select * from goods where id=${id}

  </select>

结论:实际开发中,能用#{}实现的,肯定不用${}。

特殊情况:动态的不是值,是列名或者关键字,需要使用${}拼接。如排序列名

List<Goods> list=goodsMapper.selectAll("price");

<!-- 查询所有的商品信息,按照指定列名排序 -->
<select id="selectAll" parameterType="String" resultType="com.bdqn.pojo.Goods">

    select * from goods order by ${sortColumn}

  </select>

2.传入的参数类型,以及获取参数值

  1. 通过SQL语句标签中的parameterType属性指定传入参数类型

  2. 一个简单类型参数

     在#{}中可以随意命名,通常还是使用和接口方法参数同名。

int row=goodsMapper.deleteById(10010);
 
/**删除商品信息*/

  public int  deleteById(int id);
 
<!--删除商品信息-->

  <delete id="deleteById" parameterType="int" >

    delete from goods where id=#{id}

  </delete>

  3. 多个零散的简单类型参数

如果没有特殊处理,那么Mybatis无法识别自定义名称。

使用@Param(“key”)注解,底层封装map,给传入的值指定key,通过#{key}获取值。

List<Goods> list=goodsMapper.selectPage(0,2);

/**获取当前页的商品信息*/

  public List<Goods> selectPage(@Param("start") int start,@Param("pageSize") int pageSize);

<!--获取当前页的商品信息-->

  <select id="selectPage" resultType="com.bdqn.pojo.Goods">

    select * from goods limit #{start} ,#{pageSize}

  </select>

4. 实体类型参数

#{属性名}: 写对象的属性名

Mybatis会根据#{属性名}中传入的数据,加工成getXxx()方法,通过反射在实体类对象中调用这个方法,从而获取到对应的数据。填充到#{}解析后的问号占位符这个位置。

Goods goods=new Goods(10080,"香蕉",5.8,"香蕉.jpg",9);

  int row=goodsMapper.addGoods(goods);

/**添加商品信息*/

  public int  addGoods(Goods goods);
 
<!--添加商品信息-->

  <insert id="addGoods" parameterType="com.bdqn.pojo.Goods" >

    insert into goods values(#{id},#{name},#{price},#{imgs},#{num})

  </insert>

5.Map类型的参数

   有很多零散的参数需要传递,但是没有对应的实体类类型可以使用。使用@Param注解一个一个传入又太麻烦了。所以都封装到Map中。

     获取map集合的参数值:#{}中写Map中的key

测试代码:
Map<String, Object> map=new HashMap<>();

  map.put("start",0);

  map.put("pageSize",2);

  List<Goods> list=goodsMapper.selectPage2(map);

Mapper接口:

/**获取当前页的商品信息*/
public List<Goods> selectPage2(Map<String,Object> params);

Mapper.xml配置

<!--获取当前页的商品信息-->

  <select id="selectPage2" parameterType="map" resultType="Goods">

    select * from goods limit #{start} ,#{pageSize}

  </select>
3.Mybatis增加、删除、修改 和事务

1.mybatis的<insert><delete><update>增删改标签默认返回值类型是int,      所以没有resultType属性。

2. mybatis默认关闭事务提交功能。autocommit=false

         2.1 手动提交事务

          session.commit();

        2.2 设置session对象autocommit=true

          SqlSession session=factory.openSession(true);

  3. 删除 <delete>

int row=goodsMapper.deleteById(10010);
 
/**删除商品信息*/

  public int  deleteById(int id);
 

<!--删除商品信息-->
<delete id="deleteById" parameterType="int" >
    delete from goods where id=#{id}
</delete>

  4. 修改 <update>

Goods goods=new Goods(10080,"香蕉",6.8,"香蕉.jpg",5);

  int row=goodsMapper.updateGoods(goods);

/** 修改商品信息*/

  public int  updateGoods(Goods goods);

<!--修改商品信息-->

  <update id="updateGoods" parameterType="com.bdqn.pojo.Goods">

    update goods set name=#{name},price=#{price},imgs=#{imgs},num=#{num} where id=#{id}

  </update>

5. 添加 <insert>

     1. 添加数据

Goods goods=new Goods(10080,"香蕉",5.8,"香蕉.jpg",9);

  int row=goodsMapper.addGoods(goods);

/**添加商品信息*/

  public int  addGoods(Goods goods);

<!--添加商品信息-->
<insert id="addGoods" parameterType="com.bdqn.pojo.Goods" >
    insert into goods values(#{id},#{name},#{price},#{imgs},#{num})
</insert>

2. 添加数据,返回自动增长的主键列的值

   1. 数据准备

#用户表

CREATE TABLE USER(

    user_id  INT AUTO_INCREMENT PRIMARY KEY,

    user_name VARCHAR(20) NOT NULL,

    password VARCHAR(20) NOT NULL

) ENGINE=INNODB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO USER VALUES(NULL,'admin','admin');

INSERT INTO USER VALUES(NULL,'zs','123');

SELECT * FROM USER;

   2. 实现代码

User user=new User(0,"ls","8888");

  int row=userMapper.addUser(user);

  //输出添加成功后主键列的值

  System.out.println("自动增长的用户编号:"+user.getUserid());

public int addUser(User user);

<!--添加用户信息,并返回自动增长的用户编号-->

<!-- useGeneratedKeys属性字面意思就是使用生成的主键” -->

<!-- keyProperty属性可以指定主键在实体类对象中对应的属性名,Mybatis会将拿到的主键值存入这个属性-->

  <insert id="addUser" parameterType="com.bdqn.pojo.User"

      useGeneratedKeys="true" keyProperty="userid">

   insert  into  user values(null,#{username},#{password})

  </insert>

4.typeAliases  给类全限定名取别名

    作用:xxxmapper.xml会大量使用实体类的全限定名,

可以使用typeAliases取别名,从而简化编写

在mybatis.xml全局配置文件加入如下配置:

  1. 给指定类全限定名取别名
<typeAliases>

    <typeAlias type="com.bdqn.pojo.Goods" alias="goods"></typeAlias>

</typeAliases>

     2.给包下所有类取别名 (别名默认为类名首字母小写,不区分大小写)

<typeAliases>

<package name="com.bdqn.pojo"/>
</typeAliases>

     3.注解取别名

@Alias("goods")

  public class Goods {

}

    4.下面是Mybatis为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。

标签:商品信息,Parameters,int,typeAliases,Goods,--,goods,增删,id
From: https://blog.csdn.net/2301_80220193/article/details/143364231

相关文章

  • 集合操作大揭秘!遍历、增删改查一次搞懂
    在Java的集合世界里,想对集合里的数据进行操作其实很简单,只要学会了遍历、增删改查(增加、删除、修改、查询),就能轻松驾驭List、Set、Map等集合。今天我们就来用大白话把这些操作讲清楚,一次搞懂!1.遍历:逐个访问集合中的每个元素遍历就像数清楚你兜里有几颗糖,每颗糖都要摸一......
  • 2024/10/26 使用Mybatic --》关于Mybatis 进行增删改查 ---2 添加、修改与删除
    添加:点击查看代码--添加--Mybatis事务:--openSession():默认开启事务,进行增删改操作后需要使用sqlSession.commit();手动提交事务--openSession(true):可以设置为自动提交事务(关闭事务)----添加-主键返回--在数据添加成功后,需要获取插入数据库数据的主键的值-......
  • 人工智能理论基础之Numpy(迭代数组、数组操作、数组元素的增删改查、统计函数)
    文章目录前言一、迭代数组1、order参数2.flags参数3.op_flags参数10.数组操作10.1数组变维![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6bf02c9132084106997478c5fceaf495.png)10.1.1flat10.1.2flatten()10.1.3ravel()10.2数组转置10.3修改数组维度......
  • EF Core进行增删改查
    1.使用nuge添加引用(程序资源管理器)2.program.csusingFluentAssertions.Common;usingMicrosoft.EntityFrameworkCore;usingMicrosoft.Extensions.Configuration;usingNetModelCore02.Models;varbuilder=WebApplication.CreateBuilder(args);//Addservicesto......
  • 表中数据的增删改查
    创建一个表后如何增删改表中数据呢?以下面这个表为例: 添加数据insertinto[表名](表中的列名,要初始化哪些列就写哪几列)values(前面列对应的的数据)如果只对name初始化:查看数据select[要查看的列名]from[表名]//如果要查看表中所有列,可以直接使用*修改数据u......
  • Linux文件实时自动同步方案(基于inotify) 支持自定义目录、 不限主机数量、支持增删改
    实现细节可以直接跳到第3节3.实现细节关键词:自动同步Linux自动同步 Linux实时同步master同步slave master与slave文件实时同步 目录1.引言背景介绍方案概述方案特点2.技术选型inotifyrsyncShell脚本3.实现细节3.1前置配置1.权限设置2.安装inotify......
  • rust操作mysql增删改查
    toml[dependencies]mysql="25.0.0"[[bin]]name="mysql"path="src/mysql.rs"mysql.rsusemysql::*;usemysql::prelude::*;fnmain(){leturl="mysql://root:root@localhost:3306/fiber";letpool=Po......
  • SpringBoot实现简单的增删改查(CURD)
    原文链接:SpringBoot实现简单的增删改查(CURD)–每天进步一点点(longkui.site) 前面一篇文章介绍了SpringBoot项目的创建: SpringBoot(1)—创建并运行项目这篇文章简单介绍一下SpringBoot项目的增删改查。所需工具:IDEA、java1.8、mysql0.创建项目我们通过IDEA创建项目。......
  • 苍穹外卖——报错:Parameter 'xxx' not found. Available parameters are [arg0, colle
    背景:在执行过程中,报错:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Requestprocessingfailed;nestedexceptionisorg.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.binding.Binding......
  • go gorm 通用微服务反射实现通用增删改查功能
    packagepagedbimport("errors""fmt""git.ichub.com/general/webcli120/goconfig/base/basedto""git.ichub.com/general/webcli120/goconfig/base/baseutils""git.ichub.com/general/webcli120/goc......