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

Posted on 2023-07-20 19:45  liuxin6de1b  阅读(37)  评论(0)    收藏  举报

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循环;循环输入这两个对象;把这两个对象一次性添加到数据库中;

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3