mybatis关联查询之“ 一对多”的增删改查

1、数据库准备

  • 1.1 创建数据库
DROP database IF EXISTS `learn_mybatis`;
CREATE database `learn_mybatis` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `learn_mybatis`;
  • 1.2 创建数据表
DROP TABLE IF EXISTS `tbl_0302_city`;
DROP TABLE IF EXISTS `tbl_0302_provice`;

CREATE TABLE `tbl_0302_provice` (
  `provice_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '省份编号',
  `provice_name` varchar(20) NOT NULL COMMENT '省份名称',
  PRIMARY KEY (`provice_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='省份信息表';
INSERT INTO `tbl_0302_provice` VALUES ('1', '湖北');
INSERT INTO `tbl_0302_provice` VALUES ('2', '湖南');
INSERT INTO `tbl_0302_provice` VALUES ('3', '北京');
INSERT INTO `tbl_0302_provice` VALUES ('4', '香港');
INSERT INTO `tbl_0302_provice` VALUES ('5', '新疆');
INSERT INTO `tbl_0302_provice` VALUES ('6', '上海');

CREATE TABLE `tbl_0302_city` (
  `city_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '城市编号',
  `city_provice_id` int(11) NOT NULL COMMENT '所属省份',
  `city_name` varchar(20) NOT NULL COMMENT '城市名称',
  PRIMARY KEY (`city_id`),
  KEY `city_provice_id` (`city_provice_id`),
  CONSTRAINT `tbl_0302_city_ibfk_1` FOREIGN KEY (`city_provice_id`) REFERENCES `tbl_0302_provice` 
  (`provice_id`)  ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=99 DEFAULT CHARSET=utf8 COMMENT='城市信息表';
INSERT INTO `tbl_0302_city` VALUES ('1', '1', '武汉');
INSERT INTO `tbl_0302_city` VALUES ('2', '1', '黄石');
INSERT INTO `tbl_0302_city` VALUES ('3', '1', '十堰');
INSERT INTO `tbl_0302_city` VALUES ('4', '1', '宜昌');
INSERT INTO `tbl_0302_city` VALUES ('5', '1', '襄阳');
INSERT INTO `tbl_0302_city` VALUES ('6', '1', '鄂州');
INSERT INTO `tbl_0302_city` VALUES ('7', '1', '荆门');
INSERT INTO `tbl_0302_city` VALUES ('8', '1', '孝感');
INSERT INTO `tbl_0302_city` VALUES ('9', '1', '荆州');
INSERT INTO `tbl_0302_city` VALUES ('10', '1', '黄冈');
INSERT INTO `tbl_0302_city` VALUES ('11', '1', '咸宁');
INSERT INTO `tbl_0302_city` VALUES ('12', '1', '随州');
INSERT INTO `tbl_0302_city` VALUES ('13', '1', '恩施');
INSERT INTO `tbl_0302_city` VALUES ('14', '1', '仙桃');
INSERT INTO `tbl_0302_city` VALUES ('15', '1', '潜江');
INSERT INTO `tbl_0302_city` VALUES ('16', '1', '天门');
INSERT INTO `tbl_0302_city` VALUES ('17', '1', '神农架');
INSERT INTO `tbl_0302_city` VALUES ('18', '2', '长沙');
INSERT INTO `tbl_0302_city` VALUES ('19', '2', '株洲');
INSERT INTO `tbl_0302_city` VALUES ('20', '2', '湘潭');
INSERT INTO `tbl_0302_city` VALUES ('21', '2', '衡阳');
INSERT INTO `tbl_0302_city` VALUES ('22', '2', '邵阳');
INSERT INTO `tbl_0302_city` VALUES ('23', '2', '岳阳');
INSERT INTO `tbl_0302_city` VALUES ('24', '2', '常德');
INSERT INTO `tbl_0302_city` VALUES ('25', '2', '张家界');
INSERT INTO `tbl_0302_city` VALUES ('26', '2', '益阳');
INSERT INTO `tbl_0302_city` VALUES ('27', '2', '郴州');
INSERT INTO `tbl_0302_city` VALUES ('28', '2', '永州');
INSERT INTO `tbl_0302_city` VALUES ('29', '2', '怀化');
INSERT INTO `tbl_0302_city` VALUES ('30', '2', '娄底');
INSERT INTO `tbl_0302_city` VALUES ('31', '2', '湘西');
INSERT INTO `tbl_0302_city` VALUES ('32', '3', '东城');
INSERT INTO `tbl_0302_city` VALUES ('33', '3', '西城');
INSERT INTO `tbl_0302_city` VALUES ('34', '3', '朝阳');
INSERT INTO `tbl_0302_city` VALUES ('35', '3', '丰台');
INSERT INTO `tbl_0302_city` VALUES ('36', '3', '石景山');
INSERT INTO `tbl_0302_city` VALUES ('37', '3', '海淀');
INSERT INTO `tbl_0302_city` VALUES ('38', '3', '门头沟');
INSERT INTO `tbl_0302_city` VALUES ('39', '3', '房山');
INSERT INTO `tbl_0302_city` VALUES ('40', '3', '通州');
INSERT INTO `tbl_0302_city` VALUES ('41', '3', '顺义');
INSERT INTO `tbl_0302_city` VALUES ('42', '3', '昌平');
INSERT INTO `tbl_0302_city` VALUES ('43', '3', '大兴');
INSERT INTO `tbl_0302_city` VALUES ('44', '3', '平谷');
INSERT INTO `tbl_0302_city` VALUES ('45', '3', '怀柔');
INSERT INTO `tbl_0302_city` VALUES ('46', '3', '密云');
INSERT INTO `tbl_0302_city` VALUES ('47', '3', '延庆');
INSERT INTO `tbl_0302_city` VALUES ('48', '4', '中西区');
INSERT INTO `tbl_0302_city` VALUES ('49', '4', '东区');
INSERT INTO `tbl_0302_city` VALUES ('50', '4', '九龙城区');
INSERT INTO `tbl_0302_city` VALUES ('51', '4', '观塘区');
INSERT INTO `tbl_0302_city` VALUES ('52', '4', '南区');
INSERT INTO `tbl_0302_city` VALUES ('53', '4', '深水埗区');
INSERT INTO `tbl_0302_city` VALUES ('54', '4', '黄大仙区');
INSERT INTO `tbl_0302_city` VALUES ('55', '4', '湾仔区');
INSERT INTO `tbl_0302_city` VALUES ('56', '4', '油尖旺区');
INSERT INTO `tbl_0302_city` VALUES ('57', '4', '离岛区');
INSERT INTO `tbl_0302_city` VALUES ('58', '4', '葵青区');
INSERT INTO `tbl_0302_city` VALUES ('59', '4', '北区');
INSERT INTO `tbl_0302_city` VALUES ('60', '4', '西贡区');
INSERT INTO `tbl_0302_city` VALUES ('61', '4', '沙田区');
INSERT INTO `tbl_0302_city` VALUES ('62', '4', '屯门区');
INSERT INTO `tbl_0302_city` VALUES ('63', '4', '大埔区');
INSERT INTO `tbl_0302_city` VALUES ('64', '4', '荃湾区');
INSERT INTO `tbl_0302_city` VALUES ('65', '4', '元朗区');
INSERT INTO `tbl_0302_city` VALUES ('66', '5', '乌鲁木齐');
INSERT INTO `tbl_0302_city` VALUES ('67', '5', '克拉玛依');
INSERT INTO `tbl_0302_city` VALUES ('68', '5', '吐鲁番');
INSERT INTO `tbl_0302_city` VALUES ('69', '5', '哈密');
INSERT INTO `tbl_0302_city` VALUES ('70', '5', '昌吉');
INSERT INTO `tbl_0302_city` VALUES ('71', '5', '博尔塔拉');
INSERT INTO `tbl_0302_city` VALUES ('72', '5', '巴音郭楞');
INSERT INTO `tbl_0302_city` VALUES ('73', '5', '阿克苏');
INSERT INTO `tbl_0302_city` VALUES ('74', '5', '克孜勒苏');
INSERT INTO `tbl_0302_city` VALUES ('75', '5', '喀什');
INSERT INTO `tbl_0302_city` VALUES ('76', '5', '和田');
INSERT INTO `tbl_0302_city` VALUES ('77', '5', '伊犁');
INSERT INTO `tbl_0302_city` VALUES ('78', '5', '塔城');
INSERT INTO `tbl_0302_city` VALUES ('79', '5', '阿勒泰');
INSERT INTO `tbl_0302_city` VALUES ('80', '5', '石河子');
INSERT INTO `tbl_0302_city` VALUES ('81', '5', '阿拉尔');
INSERT INTO `tbl_0302_city` VALUES ('82', '5', '图木舒克');
INSERT INTO `tbl_0302_city` VALUES ('83', '5', '五家渠');
INSERT INTO `tbl_0302_city` VALUES ('84', '5', '北屯');
INSERT INTO `tbl_0302_city` VALUES ('85', '6', '黄浦区');
INSERT INTO `tbl_0302_city` VALUES ('86', '6', '徐汇区');
INSERT INTO `tbl_0302_city` VALUES ('87', '6', '长宁区');
INSERT INTO `tbl_0302_city` VALUES ('88', '6', '静安区');
INSERT INTO `tbl_0302_city` VALUES ('89', '6', '普陀区');
INSERT INTO `tbl_0302_city` VALUES ('90', '6', '虹口区');
INSERT INTO `tbl_0302_city` VALUES ('91', '6', '杨浦区');
INSERT INTO `tbl_0302_city` VALUES ('92', '6', '嘉定区');
INSERT INTO `tbl_0302_city` VALUES ('93', '6', '浦东新区');  
INSERT INTO `tbl_0302_city` VALUES ('94', '6', '金山区'); 
INSERT INTO `tbl_0302_city` VALUES ('95', '6', '松江区');
INSERT INTO `tbl_0302_city` VALUES ('96', '6', '青浦区');
INSERT INTO `tbl_0302_city` VALUES ('97', '6', '奉贤区'); 
INSERT INTO `tbl_0302_city` VALUES ('98', '6', '崇明区');

2、工程搭建

  • 2.1 创建一个java项目工程
  • 2.2 加入相关依赖文件(如:mybatis框架、mysql驱动、junit单元测试、log4j日志)
  • 2.3 搭建完成的项目结构如下
    在这里插入图片描述

3、结构内容

配置文件3个,分别为
mybatis-conf.xml,mybatis的主配置文件;
jdbc.properties,数据库连接的配置;
log4j.properties,配置日志输出的

  • 3.1 mybatis的主配置文件(mybatis-conf.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
	<properties resource="jdbc.properties" />
    <settings>
        <setting name="lazyLoadingEnabled" value="true"/><!-- 启用延迟加机制 -->
        <setting name="aggressiveLazyLoading" value="false"/><!-- 不使用积极加载关联的属性 -->
    </settings>
    <typeAliases>
        <package name="bean"/>
    </typeAliases>

	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="mapper/CityMapper.xml"/>
		<mapper resource="mapper/ProviceMapper.xml"/>
	</mappers>
</configuration>
  • 3.2 jdbc配置文件(jdbc.properties)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/learn_mybatis
jdbc.username=root
jdbc.password=root
  • 3.3 log4j的配置文件(log4j.properties)
log4j.rootLogger=DEBUG, stdout,logfile

log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG 

#控制台日志
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n

#普通文件日志  
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
#log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=logs/err.log
log4j.appender.logfile.MaxFileSize=5MB

#输出日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.logfile.Threshold=ALL  
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n

bean包文件2个,City和Provice实体类

  • 3.4 bean包下的City.java文件
package bean;
/**
 * 城市信息表<br/>
 * create by LINKSINKE on 2020/4/9
 */
public class City {
    private Integer cityId;// 城市编号
    private String cityName;// 城市名称
    private Provice provice;// 一对一关联,采用对象关联
    public City() { }
    public City(Integer cityId, String cityName) {
        super();
        this.cityId = cityId;
        this.cityName = cityName;
    }
    @Override
    public String toString() {
        return "City [cityId=" + cityId + ", cityName=" 
                + cityName + ", provice=" + provice + "]";
    }
    // getter and setter methods
    public Provice getProvice() { return provice; }
    public void setProvice(Provice provice) { this.provice = provice; }
    public Integer getCityId() { return cityId; }
    public void setCityId(Integer cityId) { this.cityId = cityId; }
    public String getCityName() { return cityName; }
    public void setCityName(String cityName) { this.cityName = cityName; }
}
  • 3.5 bean包下的Provice.java文件
package bean;
import java.util.List;
/**
 * 省份信息表<br/>
 * create by LINKSINKE on 2020/4/9
 */
public class Provice {
    private Integer proviceId;// 省份编号
    private String proviceName;// 省份名称
    private List<City> cities;// 一对多关联,采用集合来关联
    public Provice() { }
    public Provice(Integer proviceId, String proviceName) {
        super();
        this.proviceId = proviceId;
        this.proviceName = proviceName;
    }
    @Override
    public String toString() {
        return "Provice [proviceId=" + proviceId + ", proviceName=" 
                + proviceName + ", cities=" + cities + "]";
    }
    // getter and setter methods
    public List<City> getCities() { return cities; }
    public void setCities(List<City> cities) { this.cities = cities; }
    public Integer getProviceId() { return proviceId; }
    public void setProviceId(Integer proviceId) { this.proviceId = proviceId; }
    public String getProviceName() { return proviceName; }
    public void setProviceName(String proviceName) { this.proviceName = proviceName; }
}

mapper包,有接口类和映射文件一起4个

  • 3.6 mapper包下的CityMapper接口类
package mapper;
import java.util.List;
import bean.City;
public interface CityMapper {

    /**
     * 按照指定的编号查找城市信息(包含城市归属于的城市名称) <br/>
     * by\嵌套结果查询
     * @param cid 指定编号
     * @return 城市信息
     */
    public City getCity01(Integer cid);

    /**
     * 按照指定的编号查找城市信息(包含城市归属于的城市名称) <br/>
     * by\ProviceMapper.xml
     * @param cid 指定编号
     * @return 城市信息
     */
    public City getCity02(Integer cid);

    /**
     * 查询所有城市
     * @return 所有的城市信息(包含城市所属于那个省份的)
     */
    public List<City> findAll();

    /**
     * 查询指定的城市
     * @param cid 城市编号
     * @return 城市信息
     */
    public City findCityById (Integer cid);
    
    /**
     * 添加城市信息
     * @param city 城市信息
     * @return 受影响的行数(0为失败,1为成功)
     */
    public int add(City city);
    
    /**
     * 修改某个城市信息
     * @param city 城市信息
     * @return 是否修改成功(false为失败,true为成功)
     */
    public boolean update(City city);
    
    /**
     * 删除某个城市信息
     * @param cid 城市编号
     * @return 是否删除成功(false为失败,true为成功)
     */
    public boolean delete(Integer cid);
}
  • 3.7 和CityMapper接口相关的映射文件CityMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="mapper.CityMapper">
	
	<!-- 一对一关联方式1:by==>嵌套结果:使用嵌套结果映射 -->
	<resultMap type="City" id="cityResultMap01">
		<id property="cityId" column="city_id" javaType="int" jdbcType="INTEGER" />
		<result property="cityName" column="city_name" javaType="string" jdbcType="VARCHAR" />
		<association property="provice" column="city_provice_id" javaType="Provice" jdbcType="INTEGER">
			<id property="proviceId" column="provice_id" javaType="int" jdbcType="INTEGER" />
			<result property="proviceName" column="provice_name" javaType="string" jdbcType="VARCHAR" />
		</association>
	</resultMap>
	<select id="getCity01" parameterType="int" resultMap="cityResultMap01">
        select * from tbl_0302_city as city join tbl_0302_provice as provice on city.city_provice_id = provice.provice_id and city_id = #{cityid}
	</select>
	
	<!-- 一对一关联方式2:by==>嵌套查询:通过ProviceMapper.xml里的映射语句实现 -->
	<resultMap type="City" id="cityResultMap02">
		<id property="cityId" column="city_id" javaType="int" jdbcType="INTEGER" />
		<result property="cityName" column="city_name" javaType="string" jdbcType="VARCHAR" />
		<association property="provice" column="city_provice_id" javaType="Provice" jdbcType="INTEGER" select="mapper.ProviceMapper.findProviceById" />
	</resultMap>
	<select id="getCity02" parameterType="int" resultMap="cityResultMap02">
		select * from tbl_0302_city where city_id = #{cityid}
	</select>
	
    
    <!-- 查询所有的城市信息 -->
	<select id="findAll" parameterType="int" resultMap="cityResultMap02">
		select city_id cityId,city_name cityName,city_provice_id city_provice_id from tbl_0302_city
	</select>

    <!-- 通过省份编号获取城市信息 -->
	<select id="findCityByProviceId" parameterType="int" resultType="City">
		select city_id cityId,city_name cityName,city_provice_id city_provice_id from tbl_0302_city where city_provice_id = #{cityid}
	</select>
    
    <!-- 添加 -->
    <insert id="add" parameterType="City" useGeneratedKeys="true" keyColumn="city_id" keyProperty="cityId">
        insert into tbl_0302_city(city_provice_id,city_name) values(#{provice.proviceId},#{cityName})
    </insert>
    
    <!-- 修改 -->
    <update id="update" parameterType="City">
        update `tbl_0302_city` set `city_name` = #{cityName},`city_provice_id` = #{provice.proviceId} where city_id = #{cityId}
    </update>
    
    <!-- 删除 -->
    <delete id="delete" parameterType="int">
        delete from `tbl_0302_city` where city_id = #{asfds}
    </delete>
</mapper>
  • 3.8 mapper包下的ProviceMapper接口类
package mapper;
import java.util.List;
import bean.Provice;
public interface ProviceMapper {
    
    /**
     * 按照指定的编号查找省份信息(包含省份里面的城市)<br/>
     * by\嵌套映射
     * @param pid 省份编号
     * @return 省份信息
     */
    public Provice getProvice01(Integer pid);
    
    /**
     * 按照指定的编号查找省份信息(包含省份里面的城市)<br/>
     * by\CityMapper.xml
     * @param pid 编号
     * @return 省份信息
     */
    public Provice getProvice02(Integer pid);

    /**
     * 查询所有省份
     * @return 所有的省份信息(包含省份里面的所有城市)
     */
    public List<Provice> findAll();
    
    /**
     * 查询指定的省份
     * @param pid 省份编号
     * @return 省份信息
     */
    public Provice findProviceById(Integer pid);
    
    /**
     * 添加省份信息
     * @param provice 省份信息
     * @return 受影响的行数
     */
    public int add(Provice provice);
    
    /**
     * 修改某个省份信息
     * @param provice 省份信息
     * @return 是否修改成功(false为失败,true为成功)
     */
    public boolean update(Provice provice);
    
    /**
     * 删除某个省份信息
     * @param pid 省份编号
     * @return 是否删除成功(false为失败,true为成功)
     */
    public boolean delete(Integer pid);    
}
  • 3.9 和ProviceMapper接口相关的映射文件ProviceMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="mapper.ProviceMapper">
	
	<!-- 一对多关联方式1:by==>嵌套结果:使用嵌套结果映射 -->
	<resultMap type="Provice" id="proviceResultMap01">
		<id property="proviceId" column="provice_id" javaType="int" jdbcType="INTEGER" />
		<result property="proviceName" column="provice_name" javaType="string" jdbcType="VARCHAR" />
		<!-- ofType:在反向select中使用,并且是collection中的属性 -->
		<collection property="cities" ofType="City" column="provice_id">
			<id property="cityId" column="city_id" javaType="int" jdbcType="INTEGER" />
			<result property="cityName" column="city_name" javaType="string" jdbcType="VARCHAR" />
		</collection>
	</resultMap>
	<select id="getProvice01" parameterType="int" resultMap="proviceResultMap01">
		select * from tbl_0302_provice as provice join tbl_0302_city as city on city.city_provice_id = provice.provice_id and provice_id = #{proviceid}
	</select>

	<!-- 一对多关联方式2:by==>嵌套查询:通过CityMapper.xml里的映射语句实现 -->
	<resultMap type="Provice" id="proviceResultMap02">
		<id property="proviceId" column="provice_id" javaType="int" jdbcType="INTEGER" />
		<result property="proviceName" column="provice_name" javaType="string" jdbcType="VARCHAR" />
		<!-- ofType:在反向select中使用,并且是collection中的属性 -->
		<collection property="cities" ofType="City" column="provice_id" select="mapper.CityMapper.findCityByProviceId" />
    </resultMap>
	<select id="getProvice02" parameterType="int" resultMap="proviceResultMap02">
		select * from tbl_0302_provice where provice_id = #{proviceid}
	</select>
	
    
    <!-- 查询所有的省份信息 -->
	<select id="findAll" resultMap="proviceResultMap02">
		select * from tbl_0302_provice as provice
	</select>
	
    <!-- 通过省份编号获取省份信息 -->
	<select id="findProviceById" parameterType="int" resultType="Provice">
		select provice_id proviceId,provice_name proviceName from tbl_0302_provice where provice_id = #{proviceId}
	</select>
    
    <!-- 添加 -->
    <insert id="add" parameterType="Provice" useGeneratedKeys="true" keyProperty="proviceId" keyColumn="provice_id">
        insert into tbl_0302_provice(provice_name) values(#{proviceName})
    </insert>
    
    <!-- 修改 -->    
    <update id="update" parameterType="Provice">
        update `tbl_0302_provice` set `provice_name` = #{proviceName} where `provice_id` = #{proviceId}  
    </update>
    
    <!-- 删除 -->
    <delete id="delete" parameterType="int">
        delete from `tbl_0302_provice` where `provice_id` = #{adsfdsf}
    </delete>
</mapper>

test包下的两个测试类

  • 3.10 测试类CityMapperTest
package test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import bean.City;
import bean.Provice;
import mapper.CityMapper;
import mapper.ProviceMapper;
public class CityMapperTest {
    private static SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() {
        InputStream inputStream;
        try {
            inputStream = Resources.getResourceAsStream("mybatis-conf.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 关联查询方式一:查询指定的城市(含城市归属的省份)
    @Test
    public void testGetCity01() {
        SqlSession session = sqlSessionFactory.openSession();
        CityMapper mapper = session.getMapper(CityMapper.class);
        City city = mapper.getCity01(10);
        session.close();
        System.out.println(city);
    }

    // 关联查询方式二:查询指定的城市(含城市归属的省份)
    @Test
    public void testGetCity02() {
        SqlSession session = sqlSessionFactory.openSession();
        CityMapper mapper = session.getMapper(CityMapper.class);
        City city = mapper.getCity02(10);
        session.close();
        // System.out.println(String.format("城市信息=>[编号:%d,名称:%s,所属的省份:%s]",city.getCityId(),
        // city.getCityName(),city.getProvice().getProviceName()));
        System.out.println(city);
    }

    // 查询所有的城市(含城市归属的省份)
    @Test
    public void testFindAllCity() {
        SqlSession session = sqlSessionFactory.openSession();
        CityMapper mapper = session.getMapper(CityMapper.class);
        List<City> lis = mapper.findAll();
        session.close();
        for (City city : lis) {
            System.out.println(city);
        }
    }

    // 添加城市信息
    @Test
    public void testAddCity() {
        SqlSession session = sqlSessionFactory.openSession();
        CityMapper cMapper = session.getMapper(CityMapper.class);
        ProviceMapper pMapper = session.getMapper(ProviceMapper.class);

        City city = new City(null, "测试区01");
        city.setProvice(pMapper.findProviceById(1));// 设置关联
        int rows = cMapper.add(city);
        session.commit();
        session.close();
        System.out.println(rows == 0 ? "添加失败" : "添加成功");
        System.out.println(city);
    }

    // 修改城市信息(城市名称、所属的省份)
    @Test
    public void testUpdate() {
        SqlSession session = sqlSessionFactory.openSession();
        CityMapper cMapper = session.getMapper(CityMapper.class);
        ProviceMapper pMapper = session.getMapper(ProviceMapper.class);
        // 准备省份
        Provice provice = pMapper.findProviceById(1);
        System.out.println("准备的省份信息:" + provice);
        // 修改城市编号为100的
        City city = cMapper.getCity01(100);
        city.setProvice(provice);// 设置新的所属省份
        System.out.println("要修改的城市信息:" + city);
        boolean isUpdate = cMapper.update(city);
        session.commit();
        System.out.println(isUpdate ? "修改成功" : "修改失败");
        System.out.println(cMapper.getCity01(100));
        session.close();
    }

    // 删掉某个城市
    @Test
    public void testDelete() {
        SqlSession session = sqlSessionFactory.openSession();
        CityMapper cMapper = session.getMapper(CityMapper.class);
        // 删除城市编号为100的
        boolean isDelete = cMapper.delete(100);
        session.commit();
        System.out.println(isDelete ? "删除成功" : "删除失败");
        session.close();
    }
}
  • 3.11 测试类ProviceMapperTest
package test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import bean.Provice;
import mapper.ProviceMapper;
public class ProviceMapperTest {
    private static SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() {
        InputStream inputStream;
        try {
            inputStream = Resources.getResourceAsStream("mybatis-conf.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 关联查询方式一:查询指定省份(含省份下的城市)
    @Test
    public void getProvice01() {
        SqlSession session = sqlSessionFactory.openSession();
        ProviceMapper mapper = session.getMapper(ProviceMapper.class);
        Provice provice = mapper.getProvice01(1);
        session.close();
        System.out.println("城市数量共:" + provice.getCities().size());
        System.out.println(provice);
    }

    // 关联查询方式二:查询指定的省份(含省份下的城市)
    @Test
    public void getProvice02() {
        SqlSession session = sqlSessionFactory.openSession();
        ProviceMapper mapper = session.getMapper(ProviceMapper.class);
        Provice provice = mapper.getProvice02(1);
        session.close();
        System.out.println("城市数量共:" + provice.getCities().size());
        System.out.println(provice);
    }

    // 查询所有的省份(含省份下的城市)
    @Test
    public void testFindAllProvice() {
        SqlSession session = sqlSessionFactory.openSession();
        ProviceMapper mapper = session.getMapper(ProviceMapper.class);
        List<Provice> lis = mapper.findAll();
        session.close();
        for (Provice provice : lis) {
            System.out.println(provice);
        }
    }

    // 添加省份
    @Test
    public void testAddProvice() {
        SqlSession session = sqlSessionFactory.openSession();
        ProviceMapper mapper = session.getMapper(ProviceMapper.class);
        Provice provice = new Provice(null, "测试省份01");
        int rows = mapper.add(provice);
        session.commit();
        session.close();
        System.out.println(rows == 0 ? "添加失败" : "添加成功");
        System.out.println(provice);
    }

    // 修改省份
    @Test
    public void testUpdate() {
        SqlSession session = sqlSessionFactory.openSession();
        ProviceMapper mapper = session.getMapper(ProviceMapper.class);
        Provice provice = mapper.findProviceById(7);
        provice.setProviceName("省份测试中11...");
        boolean isUpdate = mapper.update(provice);
        session.commit();
        System.out.println(isUpdate ? "修改成功" : "修改失败");
        System.out.println(mapper.findProviceById(7));
        session.close();
    }

    // 删除省份
    @Test
    public void testDelete() {
        SqlSession session = sqlSessionFactory.openSession();
        ProviceMapper mapper = session.getMapper(ProviceMapper.class);
        // 删除省份编号为7
        boolean isDelete = mapper.delete(7);
        session.commit();
        System.out.println(isDelete ? "删除成功" : "删除失败");
        session.close();
    }
}

版权声明:本文为qq_29001539原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。