1.hibernate译为“越冬”,指的是给java程序员带来春天,因为java程序员无需再关心各种sql了;

2.hibernate通过java类生成数据库表,通过操作对象来映射成SQL;

3.hibernate是真正意义上的ORM框架,因为他实现了对象(Object)---->关系(Relation)的映射(Mapping);

4.maven项目整体包结构(报错是eclipse发神经,不用管)

因为hibernate可以根据类生成表,所以只需创建数据库即可;

create database ssh;

该案例实现了一个用户拥有多部手机的关系

5.各种配置文件

(1)pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xiaog</groupId><artifactId>testssh</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><dependencies><!-- spring+springmvc顶级依赖包,包含spring-webmvc、spring-aop、spring-beans、spring-context、spring-core、spring-jcl、spring-expression、spring-web --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.5.RELEASE</version></dependency><!-- spring-aop所依赖的静态代理 ,使用aop方式管理事务,在service方法执行前开启事务,方法执行后提交事务,方法执行失败回滚事务--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.8.0</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.0</version></dependency><!-- 使用jdbcTemplate中的事务实现 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.5.RELEASE</version></dependency><!-- 数据库方面 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency><!-- orm框架 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.2.2.Final</version></dependency><!-- spring对于orm框架的支持 --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.2.4.RELEASE</version></dependency><!-- Logback --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.3</version></dependency><dependency><groupId>org.logback-extensions</groupId><artifactId>logback-ext-spring</artifactId><version>0.1.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.12</version></dependency><!-- jsp需要 --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>3.0-alpha-1</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.1.2</version></dependency></dependencies><build><defaultGoal>compile</defaultGoal><plugins><!-- maven插件 --><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId><version>3.1</version> <configuration><source>1.8</source><target>1.8</target>            <encoding>UTF-8</encoding> </configuration> </plugin> <!-- tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>9999</port><path>/testssh</path><uriEncoding>UTF-8</uriEncoding><finalName>testssh</finalName><server>tomcat7</server></configuration></plugin>
<!--           <plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.3.7.v20160115</version></plugin> --></plugins></build>
</project>

pom.xml

(2)spring-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"default-autowire="byName" default-lazy-init="true"><description>Spring公共配置 </description><!-- 1.扫描包: @Repository @Service @Autowired @Resource  --><context:component-scan base-package="com.xiaog.dao,com.xiaog.service" /><!-- 2.加载配置文件 --><context:property-placeholder location="classpath:jdbc.properties" /><!-- 3.配置连接池 :druid连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><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="5" /><!-- 最大连接数 --><property name="maxActive" value="100" /><!-- 最小连接数 --><property name="minIdle" value="5" /><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="120000" /><!-- 超过时间限制是否回收 --><property name="removeAbandoned" value="true" /><!-- 超过时间限制多长 --><property name="removeAbandonedTimeout" value="1800" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="120000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><!-- 用来检测连接是否有效的sql,要求是一个查询语句 --><property name="validationQuery" value="SELECT 1" /><!-- 申请连接的时候检测 --><property name="testWhileIdle" value="true" /><!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 --><property name="testOnBorrow" value="false" /><!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 --><property name="testOnReturn" value="false" /><!-- 打开PSCache,并且指定每个连接上PSCache的大小 --><property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize" value="20" /><property name="defaultAutoCommit" value="false" /><!-- 配置监控统计拦截的filters --><property name="filters" value="stat"/></bean><!-- 4.spring集成hibernate  --><!-- 配置hibernate的SessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!-- 注入数据源 相关信息看源码 --><property name="dataSource" ref="dataSource" /><!-- hibernate配置信息 --><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">false</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><!-- 扫描hibernate注解配置的entity --><property name="packagesToScan" value="com.xiaog.entity" /></bean><!-- 5.配置事务管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 6.配置aop --><!-- 配置通知: 定位方法 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="*" /></tx:attributes></tx:advice><!-- 配置切面 --><aop:config><!-- 定位具体的类:完整类名,使用通配符 --><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.xiaog.service.*.*(..))" /></aop:config>        </beans>

spring-context.xml

(3)spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><!-- 1.启动自动扫描 --><context:component-scan base-package="com.xiaog.controller" /><!-- 2.注册MVC注解驱动 --><mvc:annotation-driven /><!-- 3.配置静态资源    css js imgs --><mvc:resources location="/resources/**" mapping="/resources"/>        <mvc:resources location="/webapp/static/**" mapping="/webapp/static"/>     <!-- 4.附件上传 -->   <!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> -->    <!-- 默认编码 -->  <!-- <property name="defaultEncoding" value="utf-8" /> -->    <!-- 文件大小最大值 -->  <!-- <property name="maxUploadSize" value="10485760000" />     --><!-- 内存中的最大值 -->  <!-- <property name="maxInMemorySize" value="40960" /> --><!-- 启用是为了推迟文件解析,以便捕获文件大小异常 --><!-- <property name="resolveLazily" value="true"/> --><!-- </bean>  --><!-- 5.配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name = "prefix" value="/" /><!-- 前缀 --><property name = "suffix" value = ".jsp" /><!-- 后缀 --><property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  </bean></beans>

spring-mvc.xml

(4)logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 控制台输出 -->   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- 日志输出编码 -->  <!-- <Encoding>UTF-8</Encoding>    --><layout class="ch.qos.logback.classic.PatternLayout">   <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   </pattern>   </layout>   </appender>   <!-- 日志输出级别 --><root level="INFO"> <appender-ref ref="STDOUT" />   </root> <!-- 打印sql语句 --><logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />  <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />  <logger name="org.hibernate.SQL" level="DEBUG" /><logger name="org.hibernate.type" level="INFO" /><logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />  <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
</configuration>

logback.xml

(5)jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssh?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8
jdbc.username=root
jdbc.password=root

jdbc.properties

(6)web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><display-name>testssh</display-name><!-- spring配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-context.xml</param-value></context-param>  <!-- spring监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 字符编码过滤器   spring web自动提供一个 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- spring  mvc 配置  【中央控制器/前端控制器/总控】 --><servlet>  <servlet-name>spring-mvc</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <!-- 配置Spring mvc下的配置文件的位置和名称 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- 可以配置扩展名,*.do -->  <servlet-mapping>  <servlet-name>spring-mvc</servlet-name>  <url-pattern>/</url-pattern>  </servlet-mapping><!-- 添加日志监听器 -->  <context-param>  <param-name>logbackConfigLocation</param-name>  <param-value>classpath:logback.xml</param-value>  </context-param>  <listener>  <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  </listener> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

web.xml

6.实体类User和Phone

package com.xiaog.entity;import java.util.List;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;@Entity
@Table(name="user")
public class User {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;private String username;private String password;@OneToMany(targetEntity=Phone.class)@JoinColumn(name="user_id")private List<Phone> phones;//一个用户拥有多部手机public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public List<Phone> getPhones() {return phones;}public void setPhones(List<Phone> phones) {this.phones = phones;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", password=" + password + ", phones=" + phones + "]";}}

User

package com.xiaog.entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name="phone")
public class Phone {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;private String brand;//品牌public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}@Overridepublic String toString() {return "Phone [id=" + id + ", brand=" + brand + "]";}}

Phone

7.核心dao接口及其实现

package com.xiaog.core.dao;import java.util.List;public interface CoreDao<T> {int insert(T t);int delete(int id);int update(T t);T getOne(int id);List<T> getList(T t);}

CoreDao

package com.xiaog.core.dao.impl;import java.lang.reflect.ParameterizedType;
import java.util.List;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;import com.xiaog.core.dao.CoreDao;
import com.xiaog.entity.User;//继承HibernateDaoSupport 可以直接使用CRUD操作
public class CoreDaoImpl<T> extends HibernateDaoSupport implements CoreDao<T> {private Class<T> clazz;private final static Logger logger = LoggerFactory.getLogger(CoreDaoImpl.class);@SuppressWarnings("unchecked")public CoreDaoImpl() {this.clazz =  (Class<T>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];}@Overridepublic int insert(T t) {return (int) super.getHibernateTemplate().save(t);}@Overridepublic int delete(int id) {super.getHibernateTemplate().delete(new User() {{setId(id);}});return 1;}@Overridepublic int update(T t) {super.getHibernateTemplate().update(t);return 1;}@Overridepublic T getOne(int id) {return super.getHibernateTemplate().get(clazz, id);}@Overridepublic List<T> getList(T t) {//logger.info("进入CoreDaoImpl......");return super.getHibernateTemplate().findByExample(t);}}

CoreDaoImpl

8.模块dao接口及其实现(只需继承核心dao即可)

package com.xiaog.dao;import com.xiaog.core.dao.CoreDao;
import com.xiaog.entity.User;public interface UserDao extends CoreDao<User> {}

UserDao

package com.xiaog.dao;import com.xiaog.core.dao.CoreDao;
import com.xiaog.entity.Phone;public interface PhoneDao extends CoreDao<Phone> {}

PhoneDao

package com.xiaog.dao.impl;import org.springframework.stereotype.Repository;import com.xiaog.core.dao.impl.CoreDaoImpl;
import com.xiaog.dao.UserDao;
import com.xiaog.entity.User;@Repository
public class UserDaoImpl extends CoreDaoImpl<User> implements UserDao {}

UserDaoImpl

package com.xiaog.dao.impl;import org.springframework.stereotype.Repository;import com.xiaog.core.dao.impl.CoreDaoImpl;
import com.xiaog.dao.PhoneDao;
import com.xiaog.entity.Phone;@Repository
public class PhoneDaoImpl extends CoreDaoImpl<Phone> implements PhoneDao {}

PhoneDaoImpl

9.service接口及其实现

package com.xiaog.service;import com.xiaog.entity.User;public interface UserService {User login(User user);
}

UserService

package com.xiaog.service.impl;import java.util.List;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.xiaog.dao.UserDao;
import com.xiaog.entity.User;
import com.xiaog.service.UserService;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;private final static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);@Overridepublic User login(User user) {//logger.info("进入UserServiceImpl......");List<User> users = userDao.getList(user);logger.info("users="+users);if(users!=null&&users.size()>0) {return users.get(0);}else {return null;}}}

UserServiceImpl

10.controller

package com.xiaog.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import com.xiaog.entity.User;
import com.xiaog.service.UserService;@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;private final static Logger logger = LoggerFactory.getLogger(UserController.class);@RequestMapping(value = "/login",params= {"username","password","username!=","password!="})public String login(Model model,User user) {logger.info("user(request)="+user);user = userService.login(user);logger.info("user="+user);model.addAttribute("user", user);return "result";}}

UserController

11.jsp页面测试登录

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="user/login" method="post"><div><label>username</label><input type="text" name="username"/></div><div><label>password</label><input type="password" name="password"/></div><div><input type="submit" value="登录"></div></form>
</body>
</html>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>username=${user}
</body>
</html>

result.jsp

12.项目启动后,你会发现你的ssh数据库中多了两张表User和Phone,自己在插入几条数据

user表                                                 phone表

      

13.测试

index.jsp表单中输入1001和123

result.jsp

控制台打印

2019-06-22 09:40:24.477 [http-bio-9999-exec-9] INFO  com.xiaog.controller.UserController - user(request)=User [id=null, username=1002, password=456, phones=null]
2019-06-22 09:40:24.519 [http-bio-9999-exec-9] DEBUG org.hibernate.SQL - select this_.id as id1_1_0_, this_.password as password2_1_0_, this_.username as username3_1_0_ from user this_ where (this_.password=? and this_.username=?)
Hibernate: select this_.id as id1_1_0_, this_.password as password2_1_0_, this_.username as username3_1_0_ from user this_ where (this_.password=? and this_.username=?)
2019-06-22 09:40:24.520 [http-bio-9999-exec-9] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - 456
2019-06-22 09:40:24.520 [http-bio-9999-exec-9] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - 1002
2019-06-22 09:40:24.523 [http-bio-9999-exec-9] DEBUG org.hibernate.SQL - select phones0_.user_id as user3_1_1_, phones0_.id as id1_0_1_, phones0_.id as id1_0_0_, phones0_.brand as brand2_0_0_ from phone phones0_ where phones0_.user_id=?
Hibernate: select phones0_.user_id as user3_1_1_, phones0_.id as id1_0_1_, phones0_.id as id1_0_0_, phones0_.brand as brand2_0_0_ from phone phones0_ where phones0_.user_id=?
2019-06-22 09:40:24.524 [http-bio-9999-exec-9] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [INTEGER] - 2
2019-06-22 09:40:24.533 [http-bio-9999-exec-9] INFO  com.xiaog.service.impl.UserServiceImpl - users=[User [id=2, username=1002, password=456, phones=[Phone [id=3, brand=三星], Phone [id=4, brand=小米], Phone [id=5, brand=魅族]]]]
2019-06-22 09:40:24.557 [http-bio-9999-exec-9] INFO  com.xiaog.controller.UserController - user=User [id=2, username=1002, password=456, phones=[Phone [id=3, brand=三星], Phone [id=4, brand=小米], Phone [id=5, brand=魅族]]]
2019-06-22 10:38:09.540 [http-bio-9999-exec-5] INFO  com.xiaog.controller.UserController - user(request)=User [id=null, username=1001, password=123, phones=null]
2019-06-22 10:38:09.549 [http-bio-9999-exec-5] DEBUG org.hibernate.SQL - select this_.id as id1_1_0_, this_.password as password2_1_0_, this_.username as username3_1_0_ from user this_ where (this_.password=? and this_.username=?)
Hibernate: select this_.id as id1_1_0_, this_.password as password2_1_0_, this_.username as username3_1_0_ from user this_ where (this_.password=? and this_.username=?)
2019-06-22 10:38:09.550 [http-bio-9999-exec-5] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - 123
2019-06-22 10:38:09.550 [http-bio-9999-exec-5] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - 1001
2019-06-22 10:38:09.554 [http-bio-9999-exec-5] DEBUG org.hibernate.SQL - select phones0_.user_id as user3_1_1_, phones0_.id as id1_0_1_, phones0_.id as id1_0_0_, phones0_.brand as brand2_0_0_ from phone phones0_ where phones0_.user_id=?
Hibernate: select phones0_.user_id as user3_1_1_, phones0_.id as id1_0_1_, phones0_.id as id1_0_0_, phones0_.brand as brand2_0_0_ from phone phones0_ where phones0_.user_id=?
2019-06-22 10:38:09.556 [http-bio-9999-exec-5] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [INTEGER] - 1
2019-06-22 10:38:09.563 [http-bio-9999-exec-5] INFO  com.xiaog.service.impl.UserServiceImpl - users=[User [id=1, username=1001, password=123, phones=[Phone [id=1, brand=华为], Phone [id=2, brand=iphone]]]]
2019-06-22 10:38:09.570 [http-bio-9999-exec-5] INFO  com.xiaog.controller.UserController - user=User [id=1, username=1001, password=123, phones=[Phone [id=1, brand=华为], Phone [id=2, brand=iphone]]]

14.注意点:我个人觉得ssh框架坑实在是多,我在搭建的过程中出现了各种各样的问题,不过最恶心的问题是spring和hibernate存在版本不兼容问题,一开始使用的是spring5+hibernate5,发现报错,就将hibernate5换成4(应该没问题了吧),结果还是报错,折腾半天,发现虽然Pom版本虽然换成4,但是之前dao层用到的HibernateDaoSupport和spring-context.xml配置中SessionFactory还是5的版本,诶,智障问题。

转载于:https://www.cnblogs.com/xiaogblog/p/11067988.html

javaweb各种框架组合案例(三):maven+spring+springMVC+hibernate相关推荐

  1. Maven整合SSM框架(maven+spring+springmvc+mybatis)

    啊哈,终于到了用Maven整合SSM这个扑街含家产了.弄了整整一天才跑通.Mybatis的配置有些繁琐,跟之前学习的那个有点出去,加上Eclipse的Spring工具没有弄,配置的时候没有提示被搞蒙圈 ...

  2. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 14小时以前 CSDN日报 ...

  3. Spring+SpringMvc+Hibernate 框架搭建

    2019独角兽企业重金招聘Python工程师标准>>> 框架篇:Spring+SpringMVC+hibernate整合开发 一.建立项目 1.新建一个空项目project 相当于e ...

  4. 用Eclipse 搭建一个Maven Spring SpringMVC 项目

    1: 先创建一个maven web  项目: 可以参照之前的文章:  用Maven 创建一个 简单的 JavaWeb 项目 创建好之后的目录是这样的; 2: 先配置maven  修改pom.xml & ...

  5. 基于Spring+SpringMVC+hibernate实现的体检中心管理系统

    源码及论文下载: http://www.byamd.xyz/tag/java/ 摘 要 随着人们生活水平的不断提高,人们的保健意识随之增强,体检已普遍成为人们保健的重要部分.特殊职业的体检.各种职业病 ...

  6. spring+springmvc+hibernate 整合

    三大框架反反复复搭了很多次,虽然每次都能搭起来,但是效率不高.最近重新搭了一次,理顺了思路,整理了需要注意的地方,分享出来. 工具:Eclipse(jdk 1.7) spring和hibernate版 ...

  7. Spring+SpringMvc+Hibernate(SSH)+bootstrap/Jsp整合

    文章目录 前言: 准备工作: 最终项目的目录结构: 源码 一.使用idea创建web app项目 二.导包 三.SpringMVC配置 第一步:配置spring-mvc.xml 第二步:配置 web. ...

  8. Spring+SpringMVC+Hibernate实现投票/调查问卷网站

    使用SSH架构(Spring+SpringMVC+Hibernate)实现了简单的调查问卷网站.最终效果如图: 下面整理实现流程. 前言 1.SSH架构 SSH是MVC架构的一种实现. Spring. ...

  9. Spring+SpringMVC+Hibernate整合(封装CRUD操作)

    前言:当前Web项目开发的框架主流应该非Spring+SpringMVC+Hibernate莫属,不管是工作还是学习中涉及框架技术,首先是要搭建一套运行环境,虽然网上框架整合的教程很多,但我还是输出此 ...

最新文章

  1. Mozilla 扩展开发环境设置
  2. 共享数据库、独立 Schema
  3. hdu1269迷宫城堡(判断有向图是否是一个强连通图)
  4. (85)FPGA显示激励(monitor)
  5. C#中的深度学习:Keras.NET中的硬币识别,第二部分
  6. mfc 使打开的窗口至于最顶层_MFC界面开发控件BCG帮助文档——功能区设计器(2)
  7. 传参:@RequestParam @RequestBody @PathVariable的作用
  8. JAVA计算机毕设题目大全
  9. 计算机串口程序配置,串口设置软件 串口调试工具如何使用
  10. ubuntu 12.04 安装 Anjuta
  11. C++ freopen 打开txt文件,读取,写入txt文件
  12. 局域网DNS劫持,输入网址会跳转到其他的广告页
  13. css 实现一个尖角_css 实现一个带尖角的正方形
  14. 机器学习 交叉验证与网格搜索调参
  15. ubuntu22.04运行qq音乐
  16. 电脑可以连接手机热点,却无法连路由器无线wifi
  17. PHP源码 京东联盟API接口,转链+cha询订单,cha询推广位
  18. 模拟电路设计(23)---模数和数模转换器概述
  19. #304 – 为没有文本标题的控件定义Access 键(Defining an Access Key That Gives Focus to a Different Control)
  20. 简单的购物卡管理系统 可开源

热门文章

  1. Deepin XP V5系列完美精简版合集
  2. 台达PLC水箱液位控制系统参数整定及开环辨识
  3. 二类户常见使用场景解析
  4. 不用下载软件,教你轻松在线修改照片大小
  5. stm32——EXTI
  6. python tensorflow验证码识别_Tensorflow简单验证码识别应用
  7. B. Numbers on the Chessboard -codeforces1027 -csdn博客
  8. laravel 在执行命令composer dumpautoload报错的解决办法
  9. 这20件事千万不要对自己做!
  10. 教你如何获取微信公众号历史文章链接