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());
}
}
三、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的: