zoukankan      html  css  js  c++  java
  • Java进阶知识35 mybatis+Oracle 单向一对多关联 之CRUD操作【xml 版】

    本文知识点(目录):

          1、导读
              1.1、技术概述
              1.2、本文使用的jar包、项目结构图
          2、本文所有代码(xml版)
              2.1、数据库脚本(oracle.sql)
              2.2、mybatis.xml 核心配置文件
              2.3、MyBatisUtils 工具类(用于连接数据库)
              2.4、实体类(Team、Member )以及对应的xxxxxMapper.xml 配置文件
              2.5、DAO层(Team类对应的接口及接口实现类、Member类对应的接口及接口实现类 )
              2.6、测试类 (TestMemberDao)及测试结果



    1、导读              

    1.1、技术概述

        a.本文使用的是Oracle+mybatis框架,单向一对多关联,以Member为主;(数据表之间的关系:team是主表,member是从表)

        b.实现了CURD等操作:新增、修改、删除、批量删除、查询全部、多条件查询、根据id查询、查询某个团队下的所有成员。

        c.本文只测试/演示DAO层与数据库之间的连接以及数据的CRUD操作

        d.本项目的使用环境:MyEclipse10.7 + JDK1.8 + Oracle11g + mybatis3.1.1

    1.2、本文使用的jar包、项目结构图

        

    2、本文所有代码(xml版)  

    2.1、数据库脚本(oracle.sql)

     1 -- 一对多
     2 -- 1、创建表
     3 create table team(-- 团队表
     4     id number(5) primary key,
     5     name varchar2(20),
     6     description varchar2(50)
     7 );
     8 
     9 create table member(-- 成员表
    10     id number(5) primary key,
    11     name varchar2(20),
    12     sex smallint, -- 用number(1)也行,0代表男,1代表女
    13     team_id number(5),
    14     constraint member_team_fk foreign key(team_id) references team(id)
    15 );
    16 
    17 -- 2、创建序列
    18 create sequence team_seq
    19 minvalue 1    --最小值
    20 maxvalue 99999    -- 最大值
    21 increment by 1    --从1开始计数
    22 start with 1    --每次加1
    23 nocycle        --一直累加,不循环
    24 nocache;    --不建缓冲区。
    25 
    26 create sequence member_seq
    27 minvalue 1    
    28 maxvalue 99999    
    29 increment by 1 
    30 start with 1    
    31 nocycle        
    32 nocache;    
    33 
    34 -- 3、创建触发器
    35 create or replace trigger team_tg
    36   before insert on team for each row 
    37     begin
    38       select team_seq.Nextval into:new.id from dual;
    39   end;
    40 
    41 create or replace trigger member_tg
    42   before insert on member for each row 
    43     begin
    44       select member_seq.Nextval into:new.id from dual;
    45   end;
    46 
    47   

    2.2、mybatis.xml 核心配置文件

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     4 <configuration>
     5     <environments default="development">
     6         <environment id="development">
     7             <transactionManager type="JDBC" />
     8             <dataSource type="POOLED">
     9                 <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
    10                 <property name="url" value="jdbc:oracle:thin:@localhost:1521:shoreid" />
    11                 <property name="username" value="zhangsan" />
    12                 <property name="password" value="123456" />
    13             </dataSource>
    14         </environment>
    15     </environments>
    16 
    17     <mappers><!-- 5、通过SqlSession对象读取XXXXXMapper.xml映射文件中的对应操作id,从而获取sql语句; -->
    18         <mapper resource="com/shore/o2m/entity/MemberMapper.xml"/>
    19         <mapper resource="com/shore/o2m/entity/TeamMapper.xml"/>
    20     </mappers>
    21 </configuration>

    2.3、MyBatisUtils 工具类(用于连接数据库)

     1 package com.shore.common.utils;
     2 
     3 import java.io.Reader;
     4 
     5 import org.apache.ibatis.io.Resources;
     6 import org.apache.ibatis.session.SqlSession;
     7 import org.apache.ibatis.session.SqlSessionFactory;
     8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     9 
    10 /**
    11  * @author DSHORE/2020-3-12
    12  *
    13  */
    14 public class MyBatisUtils {
    15     private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    16     private static SqlSessionFactory sqlSessionFactory;
    17     
    18     static{
    19         try {
    20             //1、读取配置
    21             Reader reader = Resources.getResourceAsReader("mybatis.xml");
    22             //2、创建SqlSessionFactory
    23             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    24         } catch (Exception e) {
    25             e.fillInStackTrace();
    26             throw new RuntimeException(e);
    27         }
    28     }
    29     
    30     private MyBatisUtils() { }
    31     
    32     //3、获取SqlSession
    33     public static SqlSession getSqlSession(){
    34         SqlSession sqlSession = threadLocal.get();
    35         if (sqlSession == null) {//如果上面获取不到SQLSession,将通过下面的方式来获取
    36             sqlSession = sqlSessionFactory.openSession();
    37         }
    38         return sqlSession;
    39     }
    40     
    41     //7、关闭SqlSession
    42     public static void closeSqlSession() {
    43         SqlSession sqlSession = threadLocal.get();
    44         if (sqlSession != null) {
    45             sqlSession.close();
    46             threadLocal.remove();
    47         }
    48     }
    49 }

    2.4、实体类(Team、Member)以及对应的xxxxxMapper.xml 配置文件

    Team.java

     1 package com.shore.o2m.entity;
     2 
     3 import java.util.Set;
     4 
     5 /**
     6  * @author DSHORE/2020-3-17 
     7  * mybatis:单向一对多,以Member为主
     8  * team表与member表之间的关系:team是主表,member是从表
     9  */
    10 public class Team {// 一的一方
    11     private Integer id;
    12     private String name;
    13     private String description;
    14     private Set<Member> members;
    15 
    16     //省略Setters和Getters方法
    17 }

    TeamMapper.xml 配置文件

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     4 
     5 <mapper namespace="teamNameSpace">
     6     <resultMap id="teamResultMap" type="com.shore.o2m.entity.Team">
     7         <id property="id" column="id" /> <!-- property和 column不能省略 -->
     8         <result property="name" column="name" />
     9         <result property="description" column="description" />
    10         <!-- 单向一对多关联,以Member为主,一的一方 -->
    11         <collection property="members" resultMap="memberNameSpace.memberResultMap"></collection>
    12     </resultMap>
    13 
    14     <!--======================= 新增 ============================= -->
    15     <insert id="addTeam" parameterType="com.shore.o2m.entity.Team">
    16         <!-- 返回当前,刚刚插入的数据的id,用于member表的外键team_id -->
    17         <selectKey order="AFTER" keyProperty="id" resultType="int">
    18             <!-- 这里的id是自增长的(序列+触发器),具体请看oracle.sql中的数据表脚本 -->
    19             select max(id) as id from team
    20             <!-- select team_seq.Nextval as id from dual -->
    21         </selectKey>
    22         insert into team(name,description)
    23         values(#{name,jdbcType=VARCHAR},#{description,jdbcType=VARCHAR})
    24     </insert>
    25 
    26     <!--===================== 根据id查询 ========================== -->
    27     <select id="findById" parameterType="int" resultMap="teamResultMap">
    28         select * from team where id = #{id,jdbcType=NUMERIC}
    29     </select>
    30     
    31     <!--====================== 查询所有 =========================== -->
    32     <select id="selectAll" resultMap="teamResultMap">
    33         select * from team  
    34     </select>
    35 </mapper>

    Member.java

     1 package com.shore.o2m.entity;
     2 
     3 /**
     4  * @author DSHORE/2020-3-17 
     5  * mybatis:单向一对多,以Member为主
     6  * team表与member表之间的关系:team是主表,member是从表
     7  */
     8 public class Member {
     9     private Integer id;
    10     private String name;
    11     private Integer sex;
    12     private Team team;
    13 
    14     //省略Setters和Getters方法
    15 
    16     @Override
    17     public String toString() {
    18         return "Member [id=" + id + ", name=" + name + ", sex=" + sex
    19                 + ", team=" + team + "]";
    20     }
    21 }

    MemberMapper.xml 配置文件

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     4 
     5 <mapper namespace="memberNameSpace">
     6     <resultMap id="memberResultMap" type="com.shore.o2m.entity.Member">
     7         <id property="id" column="id"/> <!-- property和 column不能省略-->
     8         <result property="name" column="name"/>
     9         <result property="sex" column="sex"/>
    10         <!-- 单向一对多关联,以Member为主,多的一方 -->
    11         <association property="team" column="team_id" resultMap="teamNameSpace.teamResultMap"/>
    12     </resultMap>
    13     
    14     <!--======================= 新增 ============================= -->
    15     <insert id="addMember" parameterType="com.shore.o2m.entity.Member">
    16         insert into member(name,sex,team_id)
    17          values(#{name,jdbcType=VARCHAR},#{sex,jdbcType=NUMERIC},#{team.id,jdbcType=NUMERIC})
    18     </insert>
    19     
    20     <!--======================= 修改 ============================= -->
    21     <update id="updateMember" parameterType="com.shore.o2m.entity.Member">
    22         update member 
    23         set 
    24             <if test="name != null">
    25                 name=#{name,jdbcType=VARCHAR},
    26             </if>
    27             <if test="sex != null">
    28                 sex=#{sex,jdbcType=NUMERIC},
    29             </if>
    30             <if test="team.id != null">
    31                 team_id=#{team.id,jdbcType=NUMERIC} 
    32             </if>
    33         where id=#{id,jdbcType=NUMERIC}
    34     </update>
    35     
    36     <!--===================== 根据id查询 =========================== -->
    37     <select id="findById" parameterType="int" resultMap="memberResultMap">
    38         select m.*,t.* 
    39          from member m,team t
    40         where m.team_id = t.id and m.id = #{id}
    41     </select>
    42     
    43     <!--===================== 多条件查询=========================== -->
    44     <!-- resultMap和 parameterType的区别:
    45         如果用resultMap="memberResultMap";则,member表以及关联表team中的数据都查询出来。
    46         如果用parameterType="com.shore.o2m.entity.Member";则,查询结果只有member表的数据,team表为null。
    47     -->
    48     <select id="multiconditionalQuery" parameterType="map" resultMap="memberResultMap">
    49         select m.*,t.* from member m,team t
    50         <where>
    51             and m.team_id = t.id
    52             <if test="memberName != null">
    53                 and m.name = #{memberName}
    54             </if>
    55             <if test="teamName != null">
    56                 and t.name = #{teamName}
    57             </if>
    58         </where>
    59     </select>
    60     
    61     <!--================== 查询指定战队下,所有队员 ==================== -->
    62     <select id="selectAll" parameterType="String" resultMap="memberResultMap">
    63         select m.*,t.*
    64         from member m,team t
    65         where m.team_id = t.id and t.name = #{teamName}
    66     </select>
    67     
    68     <!--======================== 删除 ============================== -->
    69     <delete id="deleteByMemberId" parameterType="int">
    70         delete from member where id=#{id}
    71     </delete>
    72     
    73     <!--======================= 批量删除 ============================ -->
    74     <delete id="batchDeleteById">
    75         delete from member where id in 
    76         <foreach item="ids" collection="list" open="(" separator="," close=")">
    77             #{ids}
    78         </foreach>
    79     </delete>
    80 </mapper>

    2.5、DAO层(Team类对应的接口及接口实现类、Member类对应的接口及接口实现类 )

    ITeamDao.java(接口类)

     1 package com.shore.o2m.dao;
     2 
     3 import java.util.List;
     4 
     5 import com.shore.o2m.entity.Team;
     6 
     7 /**
     8  * @author DSHORE/2020-3-17
     9  *
    10  */
    11 public interface ITeamDao {
    12     public int addTeam(Team team);//新增
    13     
    14     public Team findByTeamId(int id);//根据id查询
    15     
    16     public List<Team> listAll();//查询所有团队/战队
    17 }

    TeamDao.java (接口类ITeamDao的实现类)

     1 package com.shore.o2m.dao.impl;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import org.apache.ibatis.session.SqlSession;
     7 
     8 import com.shore.common.utils.MyBatisUtils;
     9 import com.shore.o2m.dao.ITeamDao;
    10 import com.shore.o2m.entity.Team;
    11 
    12 /**
    13  * @author DSHORE/2020-3-17
    14  *
    15  */
    16 public class TeamDao implements ITeamDao {
    17     SqlSession sqlSession = null;
    18 
    19     @Override //新增
    20     public int addTeam(Team team) {
    21         sqlSession = MyBatisUtils.getSqlSession();
    22         try {
    23             return sqlSession.insert("teamNameSpace.addTeam", team);
    24         } catch (Exception e) {
    25             sqlSession.rollback();//如果出现异常,则,事务回滚
    26             System.out.println(e.getMessage());//打印异常信息
    27         } finally {
    28             sqlSession.commit();//提交事务
    29             MyBatisUtils.closeSqlSession();//关闭SqlSession
    30         }
    31         return 0;
    32     }
    33 
    34     @Override //根据id查询
    35     public Team findByTeamId(int id) {
    36         List<Team> teams = new ArrayList<Team>();
    37         Team team = null;
    38         sqlSession = MyBatisUtils.getSqlSession();
    39         try {
    40             teams = sqlSession.selectList("teamNameSpace.findById",id);
    41             if (teams != null && teams.size() > 0) {
    42                 team = teams.get(0);
    43             }
    44         } catch (Exception e) {
    45             System.out.println(e.getMessage());
    46         } finally {
    47             MyBatisUtils.closeSqlSession();
    48         }    
    49         return team;
    50     }
    51 
    52     @Override //查询所有团队/战队
    53     public List<Team> listAll() {
    54         List<Team> teams = new ArrayList<Team>();
    55         sqlSession = MyBatisUtils.getSqlSession();
    56         try {
    57             teams = sqlSession.selectList("teamNameSpace.selectAll");
    58         } catch (Exception e) {
    59             System.out.println("error:" + e.getMessage());
    60         } finally {
    61             MyBatisUtils.closeSqlSession();
    62         }
    63         return teams;
    64     }
    65 }

    IMemberDao.java(接口类)

     1 package com.shore.o2m.dao;
     2 
     3 import java.util.List;
     4 
     5 import com.shore.o2m.entity.Member;
     6 
     7 
     8 /**
     9  * @author DSHORE/2020-3-17
    10  *
    11  */
    12 public interface IMemberDao {
    13     public int addMember(Member member);//新增
    14     
    15     public int updateMember(Member member);//修改
    16     
    17     public Member findByMemberId(int id);//根据id查询
    18     
    19     public List<Member> multiconditionalQuery(String teamName, String memberName);//多条件查询
    20     
    21     public List<Member> listAllByTeam(String teamName);//查询指定战队下,所有队员
    22     
    23     public int deleteMember(int id);//删除
    24     
    25     public int batchDeleteById(List<Integer> ids);//批量删除
    26 }

    MemberDao.java(接口类IMemberDao的实现类)

      1 package com.shore.o2m.dao.impl;
      2 
      3 import java.util.ArrayList;
      4 import java.util.HashMap;
      5 import java.util.List;
      6 import java.util.Map;
      7 
      8 import org.apache.ibatis.session.SqlSession;
      9 
     10 import com.shore.common.utils.MyBatisUtils;
     11 import com.shore.o2m.dao.IMemberDao;
     12 import com.shore.o2m.entity.Member;
     13 
     14 /**
     15  * @author DSHORE/2020-3-17
     16  *
     17  */
     18 public class MemberDao implements IMemberDao {
     19 
     20     @Override //新增
     21     public int addMember(Member member) {
     22         SqlSession sqlSession = MyBatisUtils.getSqlSession();
     23         try {
     24             return sqlSession.insert("memberNameSpace.addMember", member);
     25         } catch (Exception e) {
     26             sqlSession.rollback();//如果出现异常,则,事务回滚
     27             System.out.println(e.getMessage());//打印异常信息
     28         } finally {
     29             sqlSession.commit();//提交事务
     30             MyBatisUtils.closeSqlSession();//关闭SqlSession
     31         }
     32         return 0;
     33     }
     34 
     35     @Override //修改
     36     public int updateMember(Member member) {
     37         SqlSession sqlSession = MyBatisUtils.getSqlSession();
     38         try {
     39             return sqlSession.insert("memberNameSpace.updateMember", member);
     40         } catch (Exception e) {
     41             sqlSession.rollback();
     42             System.out.println(e.getMessage());
     43         } finally {
     44             sqlSession.commit();
     45             MyBatisUtils.closeSqlSession();
     46         }
     47         return 0;
     48     }
     49 
     50     @Override //根据id查询
     51     public Member findByMemberId(int id) {
     52         List<Member> members = new ArrayList<Member>();
     53         Member member = null;
     54         SqlSession sqlSession = MyBatisUtils.getSqlSession();
     55         try {
     56             members = sqlSession.selectList("memberNameSpace.findById",id);
     57             if (members != null && members.size() > 0) {
     58                 member = members.get(0);
     59             }
     60         } catch (Exception e) {
     61             System.out.println(e.getMessage());//打印错误/异常信息
     62         } finally {
     63             MyBatisUtils.closeSqlSession();//关闭SqlSession
     64         }    
     65         return member;
     66     }
     67 
     68     @Override //多条件查询
     69     public List<Member> multiconditionalQuery(String teamName, String memberName) {
     70         List<Member> members = new ArrayList<Member>();
     71         SqlSession sqlSession = MyBatisUtils.getSqlSession();
     72         try {
     73             Map<String, String> map = new HashMap<String, String>();
     74             map.put("teamName", teamName);
     75             map.put("memberName", memberName);
     76             members = sqlSession.selectList("memberNameSpace.multiconditionalQuery", map);
     77         } catch (Exception e) {
     78             System.out.println("error:" + e.getMessage());
     79         } finally {
     80             MyBatisUtils.closeSqlSession();
     81         }
     82         return members;
     83     }
     84 
     85     @Override //查询指定战队下,所有队员
     86     public List<Member> listAllByTeam(String teamName) {
     87         List<Member> members = new ArrayList<Member>();
     88         SqlSession sqlSession = MyBatisUtils.getSqlSession();
     89         try {
     90             members = sqlSession.selectList("memberNameSpace.selectAll",teamName);
     91         } catch (Exception e) {
     92             System.out.println(e.getMessage());//打印错误/异常信息
     93         } finally {
     94             MyBatisUtils.closeSqlSession();//关闭SqlSession
     95         }    
     96         return members;
     97     }
     98 
     99     @Override //删除(只删除member表的消息,不删除关联表team的消息)
    100     public int deleteMember(int id) {
    101         SqlSession sqlSession = MyBatisUtils.getSqlSession();
    102         try {
    103             return sqlSession.delete("memberNameSpace.deleteByMemberId", id);
    104         } catch (Exception e) {
    105             sqlSession.rollback();
    106             System.out.println(e.getMessage());
    107         } finally {
    108             sqlSession.commit();
    109             MyBatisUtils.closeSqlSession();
    110         }
    111         return 0;
    112     }
    113 
    114     @Override //批量删除(只删除member表的消息,不删除关联表team的消息)
    115     public int batchDeleteById(List<Integer> ids) {
    116         SqlSession sqlSession = MyBatisUtils.getSqlSession();
    117         try {
    118             return sqlSession.delete("memberNameSpace.batchDeleteById", ids);
    119         } catch (Exception e) {
    120             sqlSession.rollback();
    121             System.out.println("error:"+e.getMessage());
    122         } finally {
    123             sqlSession.commit();
    124             MyBatisUtils.closeSqlSession();
    125         }
    126         return 0;
    127     }
    128 
    129 }

    2.6、测试类 (TestMemberDao)及测试结果

      1 package test.member;
      2 
      3 import java.util.ArrayList;
      4 import java.util.HashSet;
      5 import java.util.List;
      6 import java.util.Set;
      7 
      8 import org.junit.Test;
      9 
     10 import com.shore.o2m.dao.IMemberDao;
     11 import com.shore.o2m.dao.ITeamDao;
     12 import com.shore.o2m.dao.impl.MemberDao;
     13 import com.shore.o2m.dao.impl.TeamDao;
     14 import com.shore.o2m.entity.Member;
     15 import com.shore.o2m.entity.Team;
     16 
     17 /**
     18  * @author DSHORE/2020-3-17
     19  *
     20  */
     21 public class TestMemberDao {
     22     IMemberDao memberDao = new MemberDao();
     23     ITeamDao teamDao = new TeamDao();
     24     
     25     @Test //新增
     26     public void testAdd() {
     27         Member member = new Member();
     28         member.setName("王五");
     29         member.setSex(1);
     30         
     31         Member member2 = new Member();
     32         member2.setName("赵六");
     33         member2.setSex(0);
     34         
     35         //1、新建的方式
     36         Team team = new Team();
     37         team.setName("峡谷抓河蟹");
     38         team.setDescription("王者荣耀战队名称");
     39         
     40         Set<Member> members = new HashSet<Member>();
     41         team.setMembers(members);
     42         
     43         //2、使用数据中已有的数据  的方式
     44         /*Team team = teamDao.findByTeamId(2);
     45         member.setTeam(team);*/
     46         
     47         member.setTeam(team);
     48         member2.setTeam(team);
     49         
     50         System.out.println(teamDao.addTeam(team));//返回值:1     说明插入数据成功
     51         System.out.println(memberDao.addMember(member));//返回值:1
     52         System.out.println(memberDao.addMember(member2));//返回值:1
     53     }
     54     
     55     @Test //更新(修改)
     56     public void testUpdate() {
     57         Member member = new Member();
     58         member.setId(1);
     59         member.setName("张三");
     60         member.setSex(1);
     61         
     62         //把张三的所在战队id是1的,改为战队id是2。
     63         Team team = teamDao.findByTeamId(2);
     64         member.setTeam(team);
     65         
     66         System.out.println(memberDao.updateMember(member));//返回值:1
     67     }
     68     
     69     @Test //根据id查询
     70     public void testFindById() {
     71         System.out.println(teamDao.findByTeamId(1));//返回值:com.shore.o2m.entity.Team@722d95b3
     72         System.out.println(memberDao.findByMemberId(3));//返回值:Member [id=3, name=王五, sex=1, team=com.shore.o2m.entity.Team@6273305c]
     73     }
     74     
     75     @Test //多条件查询
     76     public void testMulticonditionalQuery() {
     77         //返回值:[Member [id=2, name=李四, sex=0, team=com.shore.o2m.entity.Team@5dd2b9b7]]
     78         System.out.println(memberDao.multiconditionalQuery("飞虎队", null));
     79         
     80         //返回值:[Member [id=1, name=张三, sex=1, team=com.shore.o2m.entity.Team@451c0d60]]
     81         System.out.println(memberDao.multiconditionalQuery(null, "张三"));
     82         
     83         //返回值:[Member [id=1, name=张三, sex=1, team=com.shore.o2m.entity.Team@5a0029ac]]
     84         System.out.println(memberDao.multiconditionalQuery("峡谷抓河蟹", "张三"));
     85     }
     86     
     87     @Test //查询指定战队下,所有队员
     88     public void testListAllByTeam() {
     89         List<Member> members = memberDao.listAllByTeam("峡谷抓河蟹");
     90         if (members == null) {
     91             System.out.println("members is null。");
     92         } else {
     93             //System.out.println(members.get(0));
     94             for (Member me : members) {
     95                 System.out.println(me);
     96                 /*返回值:
     97                  * Member [id=4, name=赵六, sex=0, team=com.shore.o2m.entity.Team@337b4703]
     98                  * Member [id=1, name=张三, sex=1, team=com.shore.o2m.entity.Team@6273305c]
     99                  * Member [id=3, name=王五, sex=1, team=com.shore.o2m.entity.Team@786c1a82]
    100                  * */
    101             }
    102         }
    103     }
    104     
    105     @Test //查询所有战队
    106     public void testListAll() {
    107         List<Team> teams = teamDao.listAll();
    108         if (teams == null) {
    109             System.out.println("teams is null。");
    110         } else {
    111             //System.out.println(teams.get(0));
    112             for (Team te : teams) {
    113                 System.out.println(te);
    114                 /*返回值:
    115                  * com.shore.o2m.entity.Team@4a57ea52
    116                  * com.shore.o2m.entity.Team@51d8d39f
    117                  * */
    118             }
    119         }
    120     }
    121     
    122     @Test //删除 (只删除member表的消息,不删除关联表team的消息)
    123     public void testDelete() {
    124         System.out.println(memberDao.deleteMember(7));//返回值:1     说明删除数据成功
    125     }
    126     
    127     @Test // 批量删除 (只删除member表的消息,不删除关联表team的消息)
    128     public void testBatchDelete() {
    129         List<Integer> ids = new ArrayList<Integer>();
    130         ids.add(4);
    131         ids.add(5);
    132         ids.add(6);
    133         System.out.println(memberDao.batchDeleteById(ids));//返回值:3     说明批量删除数据成功
    134     }
    135 }

    到此已完结!有任何问题,可留言。

    mybatis单向一对一关联映射:https://www.cnblogs.com/dshore123/p/12489304.html
    mybatis单向一对多关联映射:https://www.cnblogs.com/dshore123/p/12493450.html
    mybatis单向多对多关联映射:https://www.cnblogs.com/dshore123/p/12526016.html

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/12493450.html

    版权声明:欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    Redis哨兵(Sentinel)模式
    一个http请求就是一个线程吗,java的服务是每收到一个请求就新开一个线程来处理吗
    Redis 快速入门
    Redis 持久化之RDB和AOF
    Junit 入门使用教程 转自:http://www.cnblogs.com/ysocean/p/6889906.html
    Spring里PropertyPlaceholderConfigurer类的使用 转自:https://www.cnblogs.com/huqianliang/p/5673701.html
    Apache Commons Codec 编码/解码 (Base64/MD5/SHA1/SHA256等算法) 转自https://blog.csdn.net/hbtj_1216/article/details/52813741
    hive中时间日期函数的使用
    关于mat函数
    strip 和split
  • 原文地址:https://www.cnblogs.com/dshore123/p/12493450.html
Copyright © 2011-2022 走看看