首页 > 其他分享 >动态查询修改增加,动态查询集合和数组

动态查询修改增加,动态查询集合和数组

时间:2023-07-20 19:55:49浏览次数:27  
标签:name add 查询 sqlSession User 数组 动态 public user

private List<Core>cores;
private List<Container>containers

以集合的形式将其他类进行封装。

当多个表互相关联时,可以用这个方式将其他表的实例以集合的形式封装

通过for循环获取集合中的数据

通过这几张表中某一个数据进行查询

mappers:public List<Phone>findid(Integer id)

PhoneMatter.xml

<mapper namespace="cn.kgc.mapper.PhoneMapper">
<select id="findall" resultMap="corelist">
select p.*,c.cname,c.proid ,p2.pname,c2.cname
from t_phone p,t_core c,t_container c2,t_producer p2
where p.id=c.pid
and p.id=c2.pid
and c.proid=p2.pid
and c.coreid=#{id}
</select>
<resultMap id="corelist" type="cn.kgc.entity.Phone">

当有resultMap内有association和collection时需要将表格中的所有数据按照下面的格式写入其中

collection用于集合类型

association用于对象类型

<id property="id" column="id"></id>
<result column="name" property="name"></result>
<result column="type" property="type"></result>
<collection property="cores" ofType="cn.kgc.entity.Core" resultMap="A">

 property="cores"需要和我实体类中的集合名对应

private List<Core>cores;

<id property="coreid" column="coreid"></id>
<result column="cname" property="cname"></result>
<result column="pid" property="pid"></result>
<result property="proid" column="proid"></result>
</collection>
<collection property="containers" ofType="cn.kgc.entity.Container">
<id column="conid" property="conid"></id>
<result column="cname" property="cname"></result>
<result column="pid" property="pid"></result>
</collection>
</resultMap>

两个副表写完后</resultMap>结束

与副表关联的重新写resultMap 。

嵌套:副表嵌套入主表中

将副表的副表嵌套入副表时用重新写resultmap不能直接嵌套在主表的resultmap中

<resultMap id="A" type="cn.kgc.entity.Core">
<id property="coreid" column="coreid"></id>
<result column="cname" property="cname"></result>
<result column="pid" property="pid"></result>
<result property="proid" column="proid"></result>
<collection property="producers" ofType="cn.kgc.entity.Producer">
<id property="pid" column="pid"></id>
<result column="pname" property="pname"></result>
</collection>
</resultMap>
</mapper>

动态增加:(就是将sql语句进行封装)

mapper接口:public Interger add(User user)(添加的是一个对象或是对象中的某些属性)

<mapper namespace="cn.kgc.mapper.UserMapper">

<insert id="add" parameterType="cn.kgc.entity.User">

insert into 表名

<trim suffixOverrides=",">(去除最后一个逗号)

<if test="name!=null and name!=' ' ">

name,

</if>

<if test="pwd!=null and pwd!=' ' ">

pwd,

</if>

</trim>

values

(

<trim suffixOverrides=",">

<if test="name!=null and "name!=' ' ">

#{name}

</if>

<if test="pwd!=null and pwd!=' '">

#{pwd}

</if>

</trim>

)

</insert>

</mapper>

public void add(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
User user = new User();
user.setName("555");
sqlSession.getMapper(UserMapper.class).add(user);
sqlSession.commit();
}

通过setname给name传一个值。在把值传到add的方法中,

我给几个属性传值,就能添加几个属性

数据库此时就添加成功了;

动态查询:

mapper :public List<User> findall(User user)

UserMapper.xml:
<select id= "findall" resultType = "cn.kgc.entity.User">

select * from 表名 where1=1

<if test= "name!=null and name!=' ' ">

and name = #{name}

</if>

<if test ="pwd!=null and pwd!=' ' ">

and pwd=#{pwd}

</if>

</select>

public void findall(){

SqlSession sqlSession = MybatisUtil.getSqlSession();
User user =new User ();
user.setName("")
List<User5> list = sqlSession.getMapper(UserMapper.class).findall(user);
传属性,调用方法,利用for循环输出

}

动态修改:

mapper: public Interger update(User user)

UserMapper.xml:

<update id="update" parametertype="cn.kgc.entity.User">

update 表名

正常的update语法是:update 表名 set name=" ",pwd=" " where id =   ;

<trim prefix="set"  suffixOverrides="," suffix="where id=#{id}">

<if test ="name != null and name !=' ' ">

name=#{name}

</if>

结合trim,这里的意思是name=“ ”前面加上set 最后面加上where id=  ;忽略最后一个逗号

<if test =" pwd!=null and pwd !=' ' ">

pwd =#{pwd}

</if>

</trim>

</update>

public void update(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
User user = new User();
user.setName("888");
user.setId(2);
sqlSession.getMapper(UserMapper.class).update(user);
sqlSession.commit();
传值:传几个值就修改几个。修改id为2的数据将name改成888

批量添加:

mapper:public Integer add(List<User>listadd);这里就是添加多个对象,用list把多个对象放入集合中;

UserMapper.xml:

<mapper namespace="cn.kgc.mapper.UserMapper">
<insert id="add">
insert into 表名(name,pwd)
values
<foreach collection="list" item="listadd" separator=",">
(#{listadd.name},#{listadd.name})
</foreach>
</insert>
</mapper>

如果是集合类型就得用collection且等于“list”大写的List会报错,只能用这个

需要添加的值都存在listadd中listadd就是这个集合名

SqlSession sqlSession = MybatisUtil.getSqlSession();
List<User>list=new ArrayList<>();
User user=new User();
user.setName("111");
user.setPwd("222");

User user2=new User();

user2.setName("222")

user2.setPwd("222")

list.add(user);
list.add(user2);
sqlSession.getMapper(UserMapper.class).add(list);

我给这两个对象都赛了值,又把这两个对象塞进集合中,调用add的方法。利用sql语句中的forearch循环;循环输入这两个对象;把这两个对象一次性添加到数据库中;

 

标签:name,add,查询,sqlSession,User,数组,动态,public,user
From: https://www.cnblogs.com/liuxin6de1b/p/17569496.html

相关文章

  • 在屏幕上绘制四条动态线
    具体要求:触发状态:【左键保持按下,并移动鼠标】要求:将线条从屏幕四周将线拉出来,且同样要求能够进行隐藏,线与线之间有距离限制。结构框架:重写鼠标点击事件与,鼠标移动事件(鼠标移动事件中若用到event()->pos()这个会将一开始的鼠标位置传入,后面会持续刷新坐标)。通过鼠标移动事件触发......
  • 第十节 动态规划 - 2
    初赛内容:数学三角函数定义三角函数是数学中属于初等函数中的超越函数的函数。它们的本质是任何角的集合与一个比值的集合的变量之间的映射。通常的三角函数是在平面直角坐标系中定义的。其定义域为整个实数域。另一种定义是在直角三角形中,但并不完全。现代数学把它们描述成无......
  • android.mk链接动态库
    Android.mk链接动态库在开发Android应用程序时,通常需要使用到一些现有的C/C++动态库。Android.mk文件是AndroidNDK中的一个配置文件,用于编译和链接这些动态库到我们的应用程序中。本文将介绍如何使用Android.mk文件来链接动态库,并提供一个代码示例。什么是动态库动态......
  • 静态代理和动态代理
    springAop编程中常会使用代理操作。代理即为某⼀个对象创建⼀个代理对象,程序不直接⽤原本的对象,⽽是由创建的代理对象来控制对原对象,通过代理类这中间⼀层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间。而代理又分静......
  • java json转整形数组
    Java中Json转整型数组的方法在Java中,我们经常需要处理Json数据。Json是一种轻量级的数据交换格式,广泛应用于数据传输和配置文件中。在某些情况下,我们需要将Json中的数据转换为整型数组来进行进一步处理。本文将介绍如何在Java中将Json转换为整型数组,并提供相应的代码示例。使用Ja......
  • 2023.7.20 环形子数组的最大和
    求子数组最大和可以用dp解决,所以环形子数组也可以用dp解决。最简单的就是破环成链,将原数组再复制一遍然后接到尾端,然后对每个起点做一次求子数组最大和dp。但是由于n的范围较大,这样做的时间复杂度是\(n^2\),会超时。所以必须想办法优化。根据这张图,我们可以把子数组分为二种情......
  • java 缓存 SQL查询
    Java缓存SQL查询在开发过程中,频繁地执行SQL查询操作可能会导致性能问题。为了解决这个问题,我们可以使用缓存来存储已经执行过的查询结果,从而避免重复的数据库查询操作。本文将介绍如何在Java中使用缓存来提高SQL查询的性能,并提供代码示例来帮助读者理解。什么是缓存?缓......
  • java 反射 入参数组
    Java反射之入参数组在Java开发中,反射是一种强大的技术,它允许程序在运行时动态地检查类、对象、方法和字段的信息,以及在运行时调用对象的方法。通过反射,我们可以在运行时获取类的信息,并且可以通过类的名称动态地创建对象和调用方法。本文将重点介绍Java反射中的入参数组。什么是入......
  • javascript中json 对象 数组之间相互转化的示例
    在JavaScript中,你可以使用JSON.stringify()将JSON对象转换为JSON字符串,使用JSON.parse()将JSON字符串转换为JSON对象。而要将JSON对象转换为数组,可以使用Object.values()方法,而要将数组转换为JSON对象,可以使用Array.reduce()方法。下面是这些转换的示例代码:将JSON对象转换为JSON......
  • 关于Android 控件没有动态设置界面效果时,如何处理
    关于Android控件没有动态设置界面效果时,如何处理例子:android:scrollbarThumbVertical动态设置-->listView如果控件只有静态xml界面的设置,没有动态设置时,需要去查看安卓控件的源码,看该控件继承了那个父控件的方法,然后利用反射调用!不同的Android版本,源码可能不同!Android11.......