JavaEE应用开发 知识点总结

JSP+Servlet+JavaBean,40分 hibernate,40分 Spring,10分 环境配置,10分 满分100分。

一.Hibernate:

查询常用语句
1.先定义一个session变量,进行初始化操作
在这里插入图片描述
附HbnUtils工具类:

package utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Hbnutils {
    static SessionFactory sessionFactory=null;
    public void main(String[] args) {


    }
    //单例模式
    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null || sessionFactory.isClosed()) {
            sessionFactory= new Configuration().configure().buildSessionFactory();
        }
        return sessionFactory;
    }

    public static Session getSession() {
        Session session=getSessionFactory().getCurrentSession();
        return session;
    }

}

2.基本操作:开启事务、提交事务、回滚事务
在这里插入图片描述
3.使用HQL查询
list返回一个集合给List对象
createQuery这个api背过
在这里插入图片描述
还可排序
在这里插入图片描述

4.?运算符加createSqlquery:
在这里插入图片描述
5.最常用的查询:
在这里插入图片描述
6. :查询
在这里插入图片描述
7.分页查询:
在这里插入图片描述
8.模糊查询
在这里插入图片描述
9.唯一性查询:
在这里插入图片描述
10.聚合函数查询:
在这里插入图片描述
11.投影查询
在这里插入图片描述
在这里插入图片描述
12.分组查询
在这里插入图片描述
13.list查询所有:
在这里插入图片描述
14.iterate迭代器:
在这里插入图片描述
15.更新操作:
在这里插入图片描述
16.复杂的方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package entity;

import utils.HbnUtils;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.query.Query;
import org.junit.Before;
import org.junit.Test;

import java.util.Iterator;
import java.util.List;

public class HibernateQueryTest {
    private Session session;
    @Before
    public void init(){
        session = HbnUtils.getSession();
    }

    //完成数据插入
    @Test
    public void testData() {
        try {
            session.beginTransaction();
            for(int i = 0; i < 10; i ++) {
                Student student = new Student("name_" + i, 15 +i , 75 + i);
                session.save(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用SQLQuery查询所有,hibernate新版本session.createNativeQuery(sql)
    @Test
    public void testSQLQuery() {
        try {
            session.beginTransaction();
            String sql = "select * from student";
            List<Student> students = session.createNativeQuery(sql).addEntity(Student.class).list();

            //List<Student> students = session.createSQLQuery(sql).addEntity(Student.class).list();
            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用HQL查询所有
    @Test
    public void testHQL() {
        try {
            session.beginTransaction();
            String hql = "from Student";
            List<Student> students = session.createQuery(hql).list();

            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用QBC查询所有
    @Test
    public void testQBC() {
        try {
            session.beginTransaction();
            List<Student> students = session.createCriteria(Student.class).list();
            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用HQL查询所有,并排序
    @Test
    public void testHQLDesc() {
        try {
            session.beginTransaction();
            String hql = "from Student order by score desc";

            List<Student> students = session.createQuery(hql).list();
            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用QBC查询所有,并排序
    @Test
    public void testQBCDesc() {
        try {
            session.beginTransaction();
            List<Student> students = session.createCriteria(Student.class).addOrder(Order.desc("score")).list();
            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用SQLQuery查询年龄大于20岁,成绩小于98分的学生
    @Test
    public void testSQLQuery_setXxx() {
        try {
            session.beginTransaction();
            String sql = "select * from student where age > ? and score < ?";
            List<Student> students = session.createSQLQuery(sql)
                    .addEntity(Student.class).setInteger(1, 20).setDouble(2, 98).list();
            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用HQL查询年龄大于20岁,成绩小于84分的学生
    // ?占位符,setParameter()方法
    @Test
    public void testHQL_setParameter1() {
        try {
            session.beginTransaction();
            String hql = "from Student where age > ?0 and score < ?1";
            Query query = session.createQuery(hql).setParameter(0,20).setParameter(1,84.0);
            List<Student> students = query.list();

            for(Student student : students) {
                System.out.println("testHQL_setParameter1():"+student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用HQL查询年龄大于18岁,成绩小于84分的学生
    @Test
    public void testHQL_setParameter2() {
        try {
            session.beginTransaction();
            String hql = "from Student where age > :tage and score < :tscore";
            List<Student> students = session.createQuery(hql)
                    .setParameter("tage", 18).setParameter("tscore", 84.0).list();
            for(Student student : students) {
                System.out.println("testHQL_setParameter1():"+student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用QBC查询年龄大于20岁,成绩小于98.0分的学生.
    @Test
    public void testQBC_Parameter() {
        try {
            session.beginTransaction();
            List<Student> students = session.createCriteria(Student.class)
                    .add(Restrictions.gt("age", 20))
                    .add(Restrictions.lt("score", 98.0)).list();

            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //分页查询:使用HQL查询出所有学生中从第4条开始的5名学生信息
    @Test
    public void testHQL_pages() {
        try {
            session.beginTransaction();
            String hql = "from Student";
            List<Student> students = session.createQuery(hql)
                    .setFirstResult(3).setMaxResults(5).list();
            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //模糊查询:使用HQL查询出所有姓名中包含字符1的学生
    @Test
    public void testHQL_like() {
        try {
            session.beginTransaction();
            String hql = "from Student where name like :tname";
            List<Student> students = session.createQuery(hql)
                    .setParameter("tname", "%1%")
                    .list();
            for(Student student : students) {
                System.out.println(student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //唯一性查询:使用HQL查询id为5的学生
    @Test
    public void testHQL_uniqueResult() {
        try {
            session.beginTransaction();
            String hql = "from Student where id = ?0";
            Student student = (Student)session.createQuery(hql)
                    .setParameter(0, 5).uniqueResult();

            System.out.println(student);
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //聚合函数查询:查询记录总数以及姓名非空的记录数
    @Test
    public void testHQL_count() {
        try {
            session.beginTransaction();
            String hql1 = "select count(*) from Student";
            Object total1 = session.createQuery(hql1).uniqueResult();
            System.out.println("学生记录总数="+total1);

            String hql2 = "select count(name) from Student";
            Object total2 = session.createQuery(hql2).uniqueResult();
            System.out.println("姓名非空的学生记录数="+total2);

            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //投影查询:使用HQL查询所有学生的姓名与年龄
    @Test
    public void testHQL_Projection() {
        try {
            session.beginTransaction();
            String hql = "select new Student(name, age) from Student";
            List<Student> students = session.createQuery(hql).list();
            for(Student student: students) {
                System.out.println(student.getName()+","+student.getScore());
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //分组查询:查询出所有的年龄段,以及人数大于1人的年龄段
    @Test
    public void testHQL_group() {
        try {
            session.beginTransaction();
            String hql1 = "select age from Student group by age";
            List<Object> result1 = session.createQuery(hql1).list();
            for(Object object: result1) {
                System.out.print(object+"\t");
            }
            System.out.println("\n-----------------------------");
            String hql2 = "select age from Student group by age having count(age) > ?0";
            List<Object> result2 = session.createQuery(hql2)
                    .setParameter(0, new Long(1)).list();
            for(Object object: result2) {
                System.out.println(object);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用Query的list()查询所有
    @Test
    public void testHQL_list() {
        try {
            session.beginTransaction();
            String hql = "from Student";

            //第一次查询
            List<Student> students1 = session.createQuery(hql).list();
            for(Student student : students1) {
                System.out.println("list()第一次查询:"+student);
            }
            //第二次查询
            List<Student> students2 = session.createQuery(hql).list();
            for(Student student : students2) {
                System.out.println("list()第二次查询:"+student);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //使用Query的iterate()查询所有
    @Test
    public void testHQL_iterate() {
        try {
            session.beginTransaction();
            String hql = "from Student where age>20";

            //第一次查询
            System.out.println("iterate()第一次查询");
            Iterator<Student> it1 = session.createQuery(hql).iterate();
            while(it1.hasNext()) {
                Student student = it1.next();
                System.out.println(student);
            }
            //第二次查询
            System.out.println("iterate()第二次查询");
            Iterator<Student> it2 = session.createQuery(hql).iterate();
            while(it2.hasNext()) {
                Student student = it2.next();
                System.out.println(student);
            }

            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }

    //Query接口实现更新操作
    @Test
    public void testQueryUpdate(){
        session.beginTransaction();
        String sql = "update Student set age=30 where name='name_9'";
        Query query = session.createQuery(sql);
        query.executeUpdate();
        session.getTransaction().commit();
    }
}

增删改查常用语句
1.save和persist方法:
在这里插入图片描述
在这里插入图片描述
2.根据id进行删除:
在这里插入图片描述
3.更新操作:
在这里插入图片描述
4.session.get和load
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.不需要事务的crud
HbnUtils.getSession需要开启事务,下面这个不用
在这里插入图片描述
6.二者结合:
在这里插入图片描述
7.清除session缓存:
在这里插入图片描述
ps:
如果增删改在同一个事务中,那么其默认执行顺序为增C改U删D!

解决办法

在需要同步的地方(即按照INSERT, UPDATE,
DELETE顺序有可能产生问题的时候;混用JDBC操作的时候),执行session.flush()方案,该方法将缓存中的数据请求立即转换为数据库操作并执行

flush就是把sql缓冲区的sql语句发送到数据库去。

在大批量数据处理的时候,可能需要分批刷出数据,然后清空缓存,以减少内存占用量。

如果操作逻辑少的话,执行完每条sql都会返回一个int值(成功行数),>0则执行下一条sql,这样做,hibernate也会去判断,然后执行与代码一样逻辑的顺序。

Hibernate中的一些配置(注解):
在这里插入图片描述

二.JavaBean+jsp+servlet:

1.jsp导入文件:


<%@page import="java.sql.*" %>

2.设置字符集:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

3.jsp中连接数据库;
在这里插入图片描述
class.forname 反射 动态创建类 本质是实例化对象,这样产品交付时不用修改源代码,只要更改驱动类名就可以了
4.form与servlet:
在这里插入图片描述
在这里插入图片描述
5.jsp接收传参并查询sql:
在这里插入图片描述
在这里插入图片描述
然后赋值于表单:
在这里插入图片描述
6.关于Servlet中:
继承自HttpServelt
doGet中一般写doPost()
在这里插入图片描述
req.setCharacterEncoding设置编码
在这里插入图片描述
7.cookies的用法:

resp.setCharacterEncoding("UTF-8");

        Cookie[] cookies = req.getCookies();
        if(cookies!=null){
            for (int i = 0; i <cookies.length ; i++) {
                Cookie cookie = cookies[i];
                if(cookie.getName().equals("lastLoginTime")){
                    System.out.println(cookie.getValue());
                }

            }




        }else{
            System.out.println("第一次访问该文章");
        }
        Date date=new Date();
        Cookie cookie = new Cookie("lastLoginTime", date.toString());
        resp.addCookie(cookie);

8.session的用法:
前面三行经典编码格式
PrinterWriter最常用的打印流
在这里插入图片描述
还可以把对象传到session里
在这里插入图片描述
9.jsp中javabean的好文:
在这里插入图片描述

https://blog.csdn.net/u011024652/article/details/52012435?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162536359716780357235272%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162536359716780357235272&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-52012435.first_rank_v2_pc_rank_v29&utm_term=jsp%3AuseBean&spm=1018.2226.3001.4187
顺便打一波自己的广告:
https://blog.csdn.net/weixin_45678130/article/details/116739542
10.c:forEach
在这里插入图片描述
11.getParameterNames()
在这里插入图片描述
12、SimpleDateFormat

字符串转日期:

 private static void testStringToDate() {
        String s = "2017-05-25";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(s);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
        }
        System.out.println(date);
    }

日期转字符串:

private static void formatDataTest() {
        /*
         * 日期转期望格式的字符串
         */
        //HH 和 hh 的差别:前者是24小时制,后者是12小时制。
        StringBuilder sb = new StringBuilder();
        sb.append("yyyy年MM月dd日 HH:mm:ss")
                .append(" 上下午标志 a")
                .append(" E")
                .append(" 一年中的第D天")
                .append(" 一月中的第F个星期")
                .append(" 一年中的第w个星期")
                .append(" 一月中的第W个星期")
                .append(" Z")
                .append(" z");
        SimpleDateFormat sdf = new SimpleDateFormat(sb.toString());
        String dateString = sdf.format(new Date());
        System.out.println(dateString);
        /*
         * 字符串转日期
         */
        Date date;
        try {
            date = sdf.parse(dateString);
            System.out.println(date);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
        }
    }

13.ServletContext
在这里插入图片描述
好文:
https://blog.csdn.net/gavin_john/article/details/51399425?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162536482816780269855977%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162536482816780269855977&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-51399425.first_rank_v2_pc_rank_v29&utm_term=ServletContext&spm=1018.2226.3001.4187
14.打印文件
在这里插入图片描述

三、spring

1.简单spring
Dao层:

注解 repository背过,value是取名字
在这里插入图片描述

Service层:

在这里插入图片描述
在这里插入图片描述

bean.xml扫描包:
在这里插入图片描述
2.spring_xml
dao层:
在这里插入图片描述
service层:
也没有使用注解
在这里插入图片描述
xml的配置为重点:
ref重要
在这里插入图片描述
3.spring注解:
dao层:
在这里插入图片描述
不用写setRunner
service:
在这里插入图片描述
bean.xml:
在这里插入图片描述
4.不用写xml的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值