快速学会使用association和collection

一对多时,在映射文件中写出它们的映射关系,这时是使用collection

<resultMap id="manMap" type="ManBean">
        <id property="manId" column="man_id"></id>
        <result property="manName" column="man_name"></result>
        <result property="manAge" column="man_age"></result>
        <result property="manGender" column="man_gender"></result>
    </resultMap>
<!-- extends 继承指定resultMap中的映射关系
    collection 专用于做集合属性中的元素对象映射关系
    property 书写集合属性的属性名 ofType 该集合属性元素的类型-->
    <resultMap id="man_car_map" type="ManBean" extends="manMap">
        <collection property="carList" ofType="CarBean">
            <id property="carId" column="car_id"></id>
            <result property="carName" column="carName"></result>
            <result property="carType" column="car_type"></result>
            <result property="carPrice" column="car_price"></result>
        </collection>
    </resultMap>

而一对一,多对一时时则使用association

<resultMap id="carMap" type="CarBean">
        <id property="carId" column="car_id"></id>
        <result property="carName" column="car_name"></result>
        <result property="carType" column="car_type"></result>
        <result property="carPrice" column="car_price"></result>
    </resultMap>

    <!-- association 用于属性对象属性中映射关系
    property 表示关联属性-书写属性名称
    javaType 表示关联属性的类型 -书写类的别名(类的全限定名 -包名+类名)-->
    <resultMap id="car_man_map" type="CarBean" extends="carMap">
        <association property="man" javaType="ManBean">
            <id property="manId" column="man_id"></id>
            <result property="manName" column="man_name"></result>
            <result property="manAge" column="man_age"></result>
            <result property="manGender" column="man_gender"></result>
        </association>
    </resultMap>

这里博主可以借一个实例来讲述它们的用法

这个项目中有两个表,一个人类实体,一个是车的实体

人类实体

public class ManBean {
    private int manID;//人的ID
    private String manName;//姓名
    private int manAge;//年龄
    private String manGender;//性别
    private ArrayList<CarBean> carList;//人拥有的汽车集合

    public ManBean() {
    }

    public ManBean( String manName, int manAge, String manGender) {

        this.manName = manName;
        this.manAge = manAge;
        this.manGender = manGender;
    }

    public int getManID() {
        return manID;
    }

    public void setManID(int manID) {
        this.manID = manID;
    }

    public String getManName() {
        return manName;
    }

    public void setManName(String manName) {
        this.manName = manName;
    }

    public int getManAge() {
        return manAge;
    }

    public void setManAge(int manAge) {
        this.manAge = manAge;
    }

    public String getManGender() {
        return manGender;
    }

    public void setManGender(String manGender) {
        this.manGender = manGender;
    }

    public ArrayList<CarBean> getCarList() {
        return carList;
    }

    public void setCarList(ArrayList<CarBean> carList) {
        this.carList = carList;
    }

    @Override
    public String toString() {
        return "ManBean{" +
                "manID=" + manID +
                ", manName='" + manName + '\'' +
                ", manAge=" + manAge +
                ", manGender='" + manGender + '\'' +
                ", carList=" + carList +
                '}';
    }
}

汽车实体

public class CarBean {
    private int carID;
    private String carName;//汽车姓名
    private String carType;//汽车类型
    private int carPrice;//汽车价格
    private ManBean man;//汽车主人


    public CarBean() {
    }

    public CarBean(String carName, String carType, int carPrice) {
        this.carName = carName;
        this.carType = carType;
        this.carPrice = carPrice;
    }

    public int getCarID() {
        return carID;
    }

    public void setCarID(int carID) {
        this.carID = carID;
    }

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    public String getCarType() {
        return carType;
    }

    public void setCarType(String carType) {
        this.carType = carType;
    }

    public int getCarPrice() {
        return carPrice;
    }

    public void setCarPrice(int carPrice) {
        this.carPrice = carPrice;
    }

    public ManBean getMan() {
        return man;
    }

    public void setMan(ManBean man) {
        this.man = man;
    }

    @Override
    public String toString() {
        return "CarBean{" +
                "carID=" + carID +
                ", carName='" + carName + '\'' +
                ", carType='" + carType + '\'' +
                ", carPrice=" + carPrice +
                ", man=" + man +
                '}';
    }
}

dao层

ICarDao

public interface ICarDao {

    //根据人的id添加汽车集合
    void addCar(@Param("list") ArrayList<CarBean> carBeans,@Param("manID") int manID);

    //根据人的id删除他的汽车
    void delCar(@Param("manID") int manID);

    //根据人的id查询他的所有汽车
    ArrayList<CarBean> findCarsByManID(int manID);
    
    //根据汽车价格动态查询
    ArrayList<CarBean> findByTypePrice(@Param("carType") String carType,@Param("startPrice") int startPrice,@Param("endPrice") int endprice);

    //根据汽车类型和价格动态查询
    ArrayList<CarBean> findByItem(String carTypr,int startPrice,int endPrice);
    
    //根据车的id查看属于哪个人
    CarBean findCarIncludeMan(int carID);

    //根据车名分页查询
    ArrayList<CarBean> checkByCut(String carName);

}

IManDao

public interface IManDao {

    //添加一个人
    void addMan(ManBean manBean);
    
    //根据id删除一个人
    void delMan(@Param("manID") int manID);
    
    //根据人的id查询这个人的所有车
    ManBean findManIncludeCars(int manID);

    //根据id查询一个人
    ManBean findById(int manID);
    
    //根据id更改这个人的姓名和年龄
    void updateman(@Param("manID") int manID,@Param("manName") String manName,@Param("manAge") int manAge);
    
    //根据条件动态分页查询
    ArrayList<ManBean> cutList(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize, @Param("manName") String manName,
                               @Param("manAge") int manAge, @Param("manGender") String manGender);
    
    //根据条件查询
    int cutcount(@Param("manName") String manName,@Param("manAge") int manAge,@Param("manGender") String manGender);

    //根据id更改人的性别
    void updateman1(@Param("manID") int manID,@Param("manGender") String manGender);
}

service层

ICarService

public interface ICarService {

    ArrayList<CarBean> findByItem(String carTypr,int startPrice,int endPrice);
    CarBean findCarIncludeMan(int carID);

    PageInfo<CarBean> checkByCut(int pageNo,String carName);

}

IManService

public interface IManService {
    //在添加公民信息时,需要将其汽车信息一并添加到数据库
    void addManIncludeCar( ManBean manBean, ArrayList<CarBean> carBeans);

    void delMan(int manID);

    ManBean findManIncludeCars(int manID);
    CutPageBean<ManBean> findByCut(@Param("pageNO") int pageNO, @Param("manName") String manName, @Param("manAge") int manAge, @Param("manGender") String manGender);

    void updateMan(@Param("manID") int manID,@Param("manGender") String manGender);

}

它们的实现类

ManServiceImpl

public class ManServiceImpl implements IManService {
    private IManDao dao = new ManDaoImpl();
    private ICarDao carDao = new CarDaoImpl();

    @Override
    public void addManIncludeCar(ManBean manBean, ArrayList<CarBean> carBeans) {
        dao.addMan(manBean);
        carDao.addCar(carBeans,manBean.getManID());

    }

    @Override
    public void delMan(int manID) {
        carDao.delCar(manID);
        dao.delMan(manID);
    }

    @Override
    public ManBean findManIncludeCars(int manID) {
        ManBean manBean = dao.findById(manID);
        carDao.findCarsByManID(manID);
        return manBean;
    }

    @Override
    public CutPageBean<ManBean> findByCut(int pageNO, String manName, int manAge, String manGender) {
        CutPageBean<ManBean> cutPageBean = new CutPageBean<>();
        ArrayList<ManBean> list = dao.cutList((pageNO-1)*CutPageBean.PAGE_SISE,CutPageBean.PAGE_SISE,manName,manAge,manGender);
        int count = dao.cutcount(manName,manAge,manGender);
        cutPageBean.setCount(count);
        cutPageBean.setList(list);

        return cutPageBean;
    }

    @Override
    public void updateMan(int manID, String manGender) {
        dao.updateman1(manID,manGender);
    }
}

CarServiceImpl

public class CarServiceImpl implements ICarService {
    private ICarDao dao;
    @Override
    public ArrayList<CarBean> findByItem(String carTypr, int startPrice, int endPrice) {
        return null;
    }

    @Override
    public CarBean findCarIncludeMan(int carID) {
        return null;
    }

    @Override
    public PageInfo<CarBean> checkByCut(int pageNo, String carName) {
        PageHelper.startPage(pageNo,3);
        PageInfo<CarBean> pageInfo = PageInfo.of(dao.checkByCut(carName));

        return pageInfo;
    }
    
}

它们的映射文件

ICarDao.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="com.project.dao.ICarDao">
    <insert id="addCar">

        insert into t_car(t_carname,t_cartype,t_carprice,fk_manid) values
        <foreach collection="list" item="car" separator=",">
            (#{car.carName},#{car.carType},#{car.carPrice},#{manID})
        </foreach>

</insert>

    <delete id="delCar">
        delete from t_car where fk_manid=#{manID}
    </delete>

    <resultMap id="carMap" type="CarBean">
        <id property="carID" column="pk_carid"></id>
        <result property="carName" column="t_carname"></result>
        <result property="carType" column="t_cartype"></result>
        <result property="carPrice" column="t_carprice"></result>
    </resultMap>

    <resultMap id="car_man_map" type="CarBean" extends="carMap">
<!--       property表示属性名称在carBean里面  javaTYPE写关联属性的类型  一般写类的别名(类的全限定名)-->
        <association property="man" javaType="ManBean">
            <id property="manID" column="pk_manid"></id>
            <result property="manName" column="t_manname"></result>
            <result property="manAge" column="t_manage"></result>
            <result property="manGender" column="t_mangender"></result>
        </association>
    </resultMap>
    <select id="findCarsByManID" resultMap="carMap">
      select * from t_car where fk_manid = #{manID}
    </select>

    <select id="findByTypePrice" resultMap="carMap">
        select * from t_car where 1=1
        <if test="carType != null and carType !=''">
            and t_carType like "%"#{carType}"%"
        </if>
        <if test="startPrice != 0">
            and t_carprice >=#{startPrice}
        </if>
        <if test="endPrice != 0">
            <![CDATA[and t_carprice <=#{endPrice}]]>
        </if>
    </select>

<!--当我们需要查找一辆车属于哪个主人的时候属于一对一,这时我们就可以选用association-->

    <select id="findCarIncludeMan" resultMap="car_man_map">
        select c.*,m.*  from t_car c left join t_human m on c.fk_manid = m.pk_manid
        where c.pk_carid=#{carID}
    </select>

    <select id="checkByCut" resultMap="carMap">
        select * from t_car where t_carname like "%"#{carName}"%"
    </select>
</mapper>

IManDao.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="com.project.dao.IManDao">

<!--    keyproperty可以绑定bean里的主键    usegeneratedKeys  使用数据库自动增长列,并将最最新的数据主键值赋值给绑定的主键属性-->
    <insert id="addMan" keyProperty="manID" useGeneratedKeys="true">
        insert  into t_human(t_manname,t_manage,t_mangender)
                            values (#{manName},#{manAge},#{manGender})
    </insert>

    <delete id="delMan">
      delete from t_human where pk_manid=#{manID}
    </delete>

    <resultMap id="manMap" type="ManBean">
        <id property="manID" column="pk_manid"></id>
        <result property="manName" column="t_manname"></result>
        <result property="manAge" column="t_manage"></result>
        <result property="manGender" column="t_mangender"></result>
    </resultMap>


    <resultMap id="man_car_map" type="ManBean" extends="manMap">
        <collection property="carList" ofType="CarBean">
            <id property="carID" column="pk_carid"></id>
            <result property="carName" column="t_carname"></result>
            <result property="carType" column="t_cartype"></result>
            <result property="carPrice" column="t_carprice"></result>
        </collection>

    </resultMap>

<!--    当我们想要查找一个人拥有多少辆车时,这种情况属于一对多,这时我们就需要使用collection-->
    <select id="findManIncludeCars" resultMap="man_car_map">
        select m.*,c.* from t_human m left join t_car c on m.pk_manid = c.fk_manid
        where  m.pk_manid = #{manID}
    </select>

    <select id="findById" resultMap="manMap">
        select * from t_human
        where  pk_manid = #{manID}
    </select>

    <update id="updateman">
        update t_human set t_manname=#{manName},t_manage=#{manAge} where pk_manid = #{manID}
    </update>


    <select id="cutList" resultMap="manMap">
        select * from t_human where 1=1
        <include refid="dySql"></include>
        limit #{startIndex},#{pageSize}
    </select>

    <!--    include  引用sql语句块  用它的id引用-->
    <select id="cutcount" resultType="int">
        select count(*)  from t_human where 1=1
        <include refid="dySql"></include>

    </select>

    <!--    用于封装可重用的代码-->
    <sql id="dySql">
        <if test="manName != null and manName !=''">
            and t_manname like "%"#{manName}"%"
        </if>
        <if test="manAge != 0">
            and t_manage >=#{manAge}
        </if>
        <if test="manAge != 0">
            <![CDATA[and t_manage <=#{manAge}]]>
        </if>
        <if test="manGender != null and manGender != ''">
            and t_mangender like "%"#{manGender}"%"
        </if>
    </sql>

    <update id="updateman1">
        update t_human set t_mangender=#{manGender} where pk_manid = #{manID}
    </update>
</mapper>

当然需要测试的话还需要配置文件放在resource目录下

mybatis.cfg.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>
	<settings>
		<setting name="logImpl" value="STDOUT_LOGGING" />
	</settings>

	<typeAliases>
		<package name="com.project.bean"/>
	</typeAliases>

	<!--  分页插件-->
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor">
			<property name="helperDialect" value="mysql"/>
		</plugin>
	</plugins>

   <environments default="dev">  

        <environment id="dev">  

            <transactionManager type="JDBC"></transactionManager>  

            <dataSource type="POOLED">  
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:端口号/数据库名称?characterEncoding=utf-8&amp;allowMultiQueries=true"/>
				<property name="username" value="用户名"/>
				<property name="password" value="密码"/>
            </dataSource>  

        </environment>  

    </environments>  
	
	<mappers>
<!--		<mapper resource="mapper/ManBean.xml"/>-->
		<package name="com.project.dao"/>
	</mappers>
</configuration>  

测试类如下

public class TestService {
    public static void main(String[] args) {
//        IDepartService service = new DepartServiceImpl();
//        System.out.println(service.findByCutItem(2,null,null,null));


        IManService manService = new ManServiceImpl();
//        ManBean manBean = new ManBean();
//        ArrayList<CarBean> carBeans = new ArrayList<>();
//        carBeans.add(new CarBean("奥迪","suv",250000));
//        carBeans.add(new CarBean("宝马","小轿车",300000));
//        carBeans.add(new CarBean("特斯拉","suv",280000));
//
//        manService.addManIncludeCar(manBean,carBeans);

//        manService.delMan(manBean.getManID());
//        manService.findManIncludeCars(manBean.getManID());
//        manService.findByCut(1,null,0,null);
        
//        manService.updateMan(17,"女");


        ICarService carService = new CarServiceImpl();
        System.out.println(carService.checkByCut(1,"马"));
    }
}

总结一下就是一对一,多对一时使用association

一对多时使用collection

这周的画在这里啦  还没有涂完

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值