发表于: 2018-02-20 22:18:46

1 645


今天完成:

想复习一下之前的任务,从任务1到任务三。按照官网中学生报名的信息,做一个网页,实现数据库的增删改查,并把这个程序发布到服务器上。

1,一个小的知识点:src是source源的意思,源文件,resources是资源的意思。The difference between source and resource is a resource is something useful (water, for example), and a source is where the thing came from,来自知乎:
作者:栗子
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2,一个小知识点。在xml文件中’&’符号不被识别,应该写成'&’,但是在jdbc.proterties文件中,可以被识别,应该写成’&’,如果写成'&’将不被识别。
3,尝试使用之前没有用过但是据说非常强的连接池,阿里巴巴的druid连接池。与dbcp连接池的区别体现在配置文件applicationContext.xml中:
<!-- 1.配置数据库相关参数properties的属性:${url} -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 2.数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!--基本属性 url、user、password -->
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <!-- 配置初始化大小、最小、最大 -->
    <property name="initialSize" value="1" />
    <property name="minIdle" value="1" />
    <property name="maxActive" value="20" />
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="60000" />
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis" value="300000" />
    <property name="validationQuery" value="SELECT 'x'" />
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
    <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
    <property name="poolPreparedStatements" value="true" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    <!-- 配置监控统计拦截的filters -->
    <property name="filters" value="stat" />
</bean>
这其中有一些参数不是太理解。比如PSCache,配置监控统计拦截的filters,validationQuery等。反正是跑通了,学习了以后的任务,再回来看看。
4,尝试设计一个多条件模糊查询,要用到动态SQL语句这个知识点。之前将小课堂的时候遇到的一个问题,今天终于搞清楚原因了。
    问题:使用<where>标签据说可以将下边<if>标签中多余的AND去掉,但是发现这样做什么都查不出来,Mapper.xml代码如下:
<select id="getStudentByCondition" resultType="com.byou.pojo.Student">
    SELECT * FROM Student
    <where>
        <if test="name !=null">
            name LIKE #{name}
        </if>
        <if test="QQ !=null">
            AND QQ LIKE #{QQ}
        </if>
        <if test="XZType !=0">
            AND XZType = #{XZType}
        </if>
        <if test="Entrance_Date !=0">
            AND Entrance_Date = #{Entrance_Date}
        </if>
        <if test="Graduate_From !=null">
            AND Graduate_From LIKE #{Graduate_From}
        </if>
        <if test="Online_No !=null">
            AND Online_No LIKE #{Online_No}
        </if>
        <if test="Brother !=null">
            AND Brother = #{Brother}
        </if>
    </where>
</select>
对应的test如下:
Student student = new Student();
//        student.setName("%任%");
        student.setQQ("%2%");
//        student.setXZType(1);
//        student.setEntrance_Date(20180112);
//        student.setGraduate_From("梁山技校");
//        student.setOnline_No("JAVA");
//        student.setBig_Will("还我葵花宝典");
//        student.setBrother("任我行");
//        student.setKnow_From("道听途说");
        List<Student> studentList = studentService.getStudentByCondition(student);
        System.out.println(studentList);
发现test中的任何一个条件得到的结果都是[ ],查不到东西,也没有报错。
    原因:在设计pojo类的时候,没有对参数进行初始化,比如“String name;”。我把所有的条件都初始化一下,例如“String name = null;”,之后,成功查到数据。
    根本原因:对于String类型的局部变量,Java不会给它初始化(即赋值null),只有在String是全局变量时才会给他赋值null并占用一定的内存空间。程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。
    怎么改:将pojo类(即Student.class)中的所有变量都初始化一下,String类型初始化成null,整型初始化成0。成功查出数据库信息。
5,了解到在实际生产环境中,数据库是不提供删除操作的,因为删除操作有很大的隐患。替代的办法是在表中新建一列,使用这个列的数据标注此数据是否删除。所以我在mysql数据库中设计表如下图:
delete默认值是0,表示没有删除,需要删除的时候,只需要将这个数值改为1,即可表示已删除。
有了上边这个前提,当需要列出所有学员的时候,就需要改动一下SQL,如下:
<!-- 查询全部用户-->
<select id="getAllStudent" resultType="Student">
    select * from Student WHERE delete=0
    <if test="start!=null and count!=null">
        limit #{start},#{count}
    </if>
</select>
其中start和count是为了分页显示。


遇到问题:

请看上边的过程。


收获:

回顾了之前的任务。


明天计划:

继续完善这个程序,回顾任务一到任务三。


返回列表 返回列表
评论

    分享到