2020.04-Study_update.4

本文记录了作者在4.20-4.26一周内的Java学习内容,包括数据库连接配置(db.properties)、MyBatis的别名配置、结果映射(resultMap)、一对多关系、where和set标签的使用,以及ArrayList的方法和遍历。此外,还讨论了equals()方法的正确编写规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

week 4.20-4.26

-Study-update
-Monproperties,sqlMapConfig-typeAliases别名配置
-Tuemapper映射器配置问题,sqlMapper别名配置,输入映射,输出映射resultMap
-Wes一对一查询,一对多查询,动态sql-if标签 动态sql-where标签 trim
-Thuset 标签 ,foreach标签 mybatis generator-maven生成
-Fri-
-Sat反射
-Sun工厂方法,集合学习,编写equals的方法

4.20 Monday

db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_mybatis
jdbc.username=root
jdbc.password=root
sqlMapConfig-typeAliases别名配置

    <typeAliases>
<!--        <typeAlias type="com.demogorgen.bean.User" alias="User"/>-->
            <package name="com.demogorgen.bean"/>
    </typeAliases>

4.21 Tuesday

当使用package扫描时,mapper和接口得处于同一个包下。
引用别人的博客

别名配置
这样子resulttype就不用写全包名

   <typeAliases>
<!--        <typeAlias type="com.demogorgen.bean.User" alias="User"/>-->
            <package name="com.demogorgen.bean"/>
    </typeAliases>

输出映射
resultMap
当bean对象的字段与数据库不一样时,可以这样子配置。

<resultMap type="Country" id="country">
    <result property="countryName" column="c_name"/>
</resultMap>
<select id="SelectAllCountry" resultMap="country">
    select * from country
</select>

4.22 Wednesday

一对一

<resultMap id="userVolist" type="UserVo">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="password" column="password"/>
    <association property="country" javaType="Country">
        <result property="countryName" column="c_name"/>
    </association>
</resultMap>
<select id="SelectAllUserVo" resultMap="userVolist">
    select u.username,u.password,c.c_name from user u left join country c on u.id=c.id
</select>

一对多

<resultMap id="countryVolist" type="CountryVo">
    <id property="id" column="id"/>
    <id property="countryName" column="c_name"/>
    <collection property="userList" ofType="User">
        <id property="username" column="username"/>
        <id property="country" column="country"/>
    </collection>
</resultMap>
<select id="SelectAllCountryVo" resultMap="countryVolist">
    select u.username,u.country,c.c_name from country c left join user u on u.country=c.c_name
</select>

where标签
解决where后面的and问题

<!--public  List<User> SelectLike();-->
<select id="SelectLike" parameterType="User" resultType="User">
    select *
    from user
    <where>
        <if test="id!=null and id!=''">
            id=#{id}
        </if>
        <if test="username!=null and username!=''">
            and username like "%"#{username}"%"
        </if>
        <if test="password!=null and password!=''">
            and password like "%"#{password}"%"
        </if>
    </where>
</select>

4.23 Thuseday

set标签
去掉语句后的,

<!--  public  void UpdateUser();-->
<update id="UpdateUser" parameterType="User">
    update user
    <set>
    <if test="username!=null and username!=''">
    username=#{username},
    </if>
    <if test="password!=null and password!=''">
    password=#{password}
    </if>
    where id=#{id}
    </set>
</update>

foreach

<!--  public void SelectUserByIds();-->
<select id="SelectUserByIds" parameterType="int[]" resultType="User">
    select *
    from user
    where id in
    <foreach collection="array" item="id" open="(" close=")" separator=",">
        #{id}
    </foreach>
</select>

4.26 Sunday

ArrayList常用方法
在末尾添加一个元素:void add(E e)
在指定索引添加一个元素:void add(int index, E e)
删除指定索引的元素:int remove(int index)
删除某个元素:int remove(Object e)
获取指定索引的元素:E get(int index)
获取链表大小(包含元素的个数):int size()

通常情况下优先使用ArrayList而不是LinkedList.
通过Iterator遍历List永远是最高效的方式>

练习

给定一组连续的整数,例如:10,11,12,……,20,但其中缺失一个数字,试找出缺失的数字:

/**
 * @author lzr
 * @date 2020 26 17:34
 * @description
 */
public class ListTest {
    public static void main(String[] args) {
        // 构造从start到end的序列:
        final int start = 10;
        final int end = 20;
        List<Integer> list = new ArrayList<Integer>();
        for (int i = start; i <= end; i++) {
            list.add(i);
        }
        // 随机删除List中的一个元素:
        int removed = list.remove((int) (Math.random() * list.size()));
        int found = findMissingNumber(start, end, list);
        System.out.println(list.toString());
        System.out.println("missing number: " + found);
        System.out.println(removed == found ? "测试成功" : "测试失败");
    }
    static int findMissingNumber(int start, int end, List<Integer> list) {
        int temp=start;
        for(int i:list){
            if(i!=temp){
                return temp;
            }else {
                temp++;
            }
        }
        return 0;
    }
}

增强版:和上述题目一样,但整数不再有序,试找出缺失的数字:

/**
 * @author lzr
 * @date 2020 26 20:20
 * @description
 */
public class ListTest2 {
        public static void main(String[] args) {
// 构造从start到end的序列:
            final int start = 10;
            final int end = 20;
            List<Integer> list = new ArrayList<Integer>();
            for (int i = start; i <= end; i++) {
                list.add(i);
            }
            // 洗牌算法suffle可以随机交换List中的元素位置:
            Collections.shuffle(list);
            // 随机删除List中的一个元素:
            int removed = list.remove((int) (Math.random() * list.size()));
            int found = findMissingNumber(start, end, list);
            System.out.println(list.toString());
            System.out.println("missing number: " + found);
            System.out.println(removed == found ? "测试成功" : "测试失败");
        }
    static int findMissingNumber(int start, int end, List<Integer> list) {
           int temp=list.get(0);
           boolean b=false;
           while(++temp<=end){
               for(int i:list){
                   if(temp==i){
                       b=false;
                       break;
                   }else {
                       b=true;
                   }
               }
               if(b){
                   return temp;
               }
           }
           temp=list.get(0);
           while (--temp>=start){
               for (int i:list){
                   if(temp==i){
                       b=false;
                       break;
                   }else{
                       b=true;
                   }
               }
               if(b){
                   return temp;
               }
           }
        return 0;
    }
}

如何正确编写equals()方法?equals()方法要求我们必须满足以下条件:

自反性(Reflexive):对于非null的x来说,x.equals(x)必须返回true;
对称性(Symmetric):对于非null的x和y来说,如果x.equals(y)为true,则y.equals(x)也必须为true;
传递性(Transitive):对于非null的x、y和z来说,如果x.equals(y)为true,y.equals(z)也为true,那么x.equals(z)也必须为true;
一致性(Consistent):对于非null的x和y来说,只要x和y状态不变,则x.equals(y)总是一致地返回true或者false;
对null的比较:即x.equals(null)永远返回false。

您好,我可以帮您解决这个问题。首先,为了融合多张dcm图像为一张dcm图像,您可以使用Python的pydicom库来操作DICOM文件。以下是一种可能的解决方案: ```python import pydicom import numpy as np # 读取第一张dcm图像作为基准 base_file = "C:/Users/11508/Desktop/568/RI.568.0-3_1_17.dcm" base_dcm = pydicom.dcmread(base_file) # 读取所有dcm图像 file_list = ["C:/Users/11508/Desktop/568/dcm1.dcm", "C:/Users/11508/Desktop/568/dcm2.dcm", ...] # 将所有dcm图像读取为numpy数组,并将像素值存储到一个列表中 pixel_arrays = [] for file in file_list: dcm = pydicom.dcmread(file) pixel_arrays.append(dcm.pixel_array) # 将像素数组堆叠为三维数组,并计算平均值 merged_array = np.stack(pixel_arrays, axis=2) merged_pixel_array = np.mean(merged_array, axis=2, dtype=np.uint16) # 创建一个新的DICOM对象,将基准dcm的属性复制到新对象中 merged_dcm = pydicom.Dataset() merged_dcm.update(base_dcm) # 更新新对象的像素数组和相关属性 merged_dcm.PixelData = merged_pixel_array.tobytes() merged_dcm.Rows, merged_dcm.Columns = merged_pixel_array.shape merged_dcm.NumberOfFrames = 1 merged_dcm.SOPInstanceUID = pydicom.uid.generate_uid() merged_dcm.SeriesInstanceUID = pydicom.uid.generate_uid() merged_dcm.StudyInstanceUID = pydicom.uid.generate_uid() # 保存新的融合后的dcm图像 merged_file = "C:/Users/11508/Desktop/568/merged.dcm" merged_dcm.save_as(merged_file) ``` 请注意,您需要将`"C:/Users/11508/Desktop/568/dcm1.dcm"`替换为您实际的dcm图像路径,并确保安装了pydicom库。此代码将读取每个dcm图像的像素数组,将它们堆叠为三维数组,并计算所有像素的平均值作为融合后的像素数组。然后,它将创建一个新的DICOM对象,将基准dcm的属性复制到新对象中,并更新像素数组和相关属性。最后,新的融合后的dcm图像将保存在指定路径下。 希望这可以帮助到您!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值