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