week 4.20-4.26
- | Study-update |
---|---|
-Mon | properties,sqlMapConfig-typeAliases别名配置 |
-Tue | mapper映射器配置问题,sqlMapper别名配置,输入映射,输出映射resultMap |
-Wes | 一对一查询,一对多查询,动态sql-if标签 动态sql-where标签 trim |
-Thu | set 标签 ,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。