springmvc配置mybatis与hibernate的不同点
相信每个人对springmvc+hibernate或者springmvc+mybatis都不会陌生,拿来一个项目也都会开发。但是自己配置的情况下却很少,即使自己配置过,长时间不写也会忘,在这里记录一下配置的过程以及遇到的问题。以maven项目为例,首先是springmvc+hibernate的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>maven-springmvc</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven-springmvc Maven Webapp</name>
<url>http://maven.apache.org</url>
<!--项目依赖 -->
<dependencies> <!-- 添加Hibernate依赖 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.8.Final</version>
</dependency>
<!-- dbcp连接池需要的jar包 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.19.0-GA</version>
</dependency> <!--j2ee相关包 servlet、jsp、jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> <!-- 添加oracle jdbc driver -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency> <!--spring相关包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.1.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.1.RELEASE</version>
</dependency> <!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.0</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.1.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.1.RELEASE</version>
</dependency> <!--其他需要的包-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
<build>
<finalName>maven-springmvc</finalName>
<resources>
<!--表示把java目录下的有关xml文件,properties文件编译/打包的时候放在resource目录下-->
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>tomcat7</server>
<username>tomcat</username>
<password>tomcat</password>
<path>/maven-springmvc</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
主要的依赖包括日志包(log4j),oracle驱动包,spring及springmvc的依赖包,jackson依赖包(转化json),maven的tomcat插件,数据库连接池数据源的jar包(dbcp),文件上传需要的包,以及hibernate的包。这些基本就可以满足springmvc+hibernate的基本需求了。再来看看springmvc+mybatis的配置:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>maven-springmvc</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven-springmvc Maven Webapp</name>
<url>http://maven.apache.org</url>
<!--项目依赖 -->
<dependencies> <!-- mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--整合spring mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- dbcp连接池需要的jar包 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.19.0-GA</version>
</dependency> <!--j2ee相关包 servlet、jsp、jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> <!-- 添加oracle jdbc driver -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency> <!--spring相关包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.1.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.1.RELEASE</version>
</dependency> <!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.0</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.1.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.1.RELEASE</version>
</dependency> <!--其他需要的包-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
<build>
<finalName>maven-springmvc</finalName>
<resources>
<!--表示把java目录下的有关xml文件,properties文件编译/打包的时候放在resource目录下-->
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>tomcat7</server>
<username>tomcat</username>
<password>tomcat</password>
<path>/maven-springmvc</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
对比两个配置文件,除了mybatis的maven依赖以外,其他的都是一样的(废话)。这里就是注意一下除了mybatis的依赖,还有mybatis整合spring的依赖,如果你也用的是spring+mybatis的话,就需要了。
然后就是spring的配置文件了,我们知道springmvc需要一个配置文件,首先我们要在web.xml中配置
<!--配置springmvc DispatcherServlet-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--Sources标注的文件夹下需要新建一个spring文件夹-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
告诉项目我们要用springmvc,将所有请求交给DispatcherServlet再转给springmvc的控制器(controller),接下来就是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-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--启用spring的一些annotation -->
<context:annotation-config/> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<!--<context:component-scan base-package="com.example.controller">-->
<!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>-->
<!--</context:component-scan>-->
<context:component-scan base-package="com.example.controller"/> <!--HandlerMapping 无需配置,springmvc可以默认启动--> <!--静态资源映射-->
<!--本项目把静态资源放在了WEB-INF的statics目录下,资源映射如下-->
<mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/"/>
<mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/"/>
<mvc:resources mapping="/image/**" location="/WEB-INF/statics/image/"/> <!--但是项目部署到linux下发现WEB-INF的静态资源会出现无法解析的情况,但是本地tomcat访问正常,因此建议还是直接把静态资源放在webapp的statics下,映射配置如下-->
<!--<mvc:resources mapping="/css/**" location="/statics/css/"/>-->
<!--<mvc:resources mapping="/js/**" location="/statics/js/"/>-->
<!--<mvc:resources mapping="/image/**" location="/statics/images/"/>--> <!-- 配置注解驱动 可以将request参数与绑定到controller参数上 --> <mvc:annotation-driven>
<mvc:message-converters>
<ref bean="stringHttpMessageConverter"/>
<ref bean="mappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven> <bean id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter"/> <!--解决IE浏览器json文件下载和json数据中午乱码的问题-->
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean> <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
<!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/view/"/><!--设置JSP文件的目录位置-->
<property name="suffix" value=".jsp"/>
</bean> <!-- springmvc文件上传需要配置的节点-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="20971500"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean> </beans>
首先我们要配置controller的包,指定哪个包下是控制器,<mvc:resources 是配置静态资源的开头,即配置访问的目录是不通过DispatcherServlet控制器,这样我们就可以访问静态资源。然后就是配置jackson的转换器,使我们在@Responsebody时可以直接返回json格式的数据。<mvc:annotation-driven/>是注解驱动启动,这样就可以通过注解解析控制器了,将写好的converter绑定到其中。然后就是配置视图解析器,指定模板引擎存放的路径以及后缀,最后配置一下spinrgmvc文件上传需要的配置的节点。关于springmvc配置文件的配置,都是一样的(无论是hibernate还是mybatis)
然后就是spring的配置了,一般情况下spring的配置包含3个部分:
一个是spring-bean,主要是配置扫描包,主要是dao层,实现依赖注入
第二个是spring-dao,配置数据连接相关配置,这里mybatis和hibernate有很大不同了,
第三个是spring-service,主要是配置一些业务逻辑处理(AOP),我们这里先不讨论。
我这里web.xml的配置只有两个文件(其实如果写一个里面理论也是可以的),web.xml配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,classpath:hibernateConfig.xml</param-value>
</context-param>
ContextLoaderListener是spring的监听器,只要用到spring肯定是需要的,器参数contextConfigLocation即是用来加载我们需要的配置文件,我这里只有两个,一个是用来扫描bean的,一个是用来配置数据连接方面的,applicationContext.xml就相当于spring-bean,内容为;
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 扫描文件(自动将servicec层注入) -->
<context:component-scan base-package="com.example.dao"/>
</beans>
这里我只配置了扫描service包这句,目的是可以让service层可以注入。但在配置mybatis的时候出现了一个问题,之后再说
然后就是hibernateConfig.xml,就是连接池以及hibernate的配置了
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<!-- 读取hibernate.properties配置文件 -->
<context:property-placeholder location="classpath:hibernate.properties" /> <!-- 使用dbcp数据源,Oracle数据库 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="maxActive" value="30"></property>
<property name="maxIdle" value="10"></property>
<property name="maxWait" value="1000"></property>
<property name="defaultAutoCommit" value="true"></property>
</bean> <!-- session工厂 -->
<!-- spring与hibernate整合配置,扫描所有dao -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<!-- 是否根据需要每次自动创建数据库 -->
<prop key="hibernate.hbm2ddl.auto">${jdbc.hbm2ddl.auto}</prop>
<prop key="hibernate.dialect">${jdbc.dialect}</prop>
<!-- 显示Hibernate持久化操作所生成的SQL -->
<prop key="hibernate.show_sql">${jdbc.show_sql}</prop>
<prop key="hibernate.format_sql">${jdbc.format_sql}</prop>
</props>
</property>
<!-- 扫描单个class-->
<property name="annotatedClasses">
<list>
<value>com.example.pojo.Message</value>
</list>
</property>
<!--<!–扫描整个package,加载整个包下的class–>-->
<!--<property name="packagesToScan">-->
<!--<list>-->
<!--<value>com.example.pojo</value>-->
<!--</list>-->
<!--</property>-->
<!--扫描一个配置文件-->
<property name="mappingResources">
<array>
<value>com/example/dao/orm/Book.hbm.xml</value>
</array>
</property>
<!--<property name="mappingDirectoryLocations">-->
<!--<list>-->
<!--<value>com/example/dao/orm</value>-->
<!--</list>-->
<!--</property>-->
</bean> <!-- <bean id="bookDao" class="com.example.dao.impl.BookDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>--> <bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- 对数据源进行事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager" /> </beans>
首先要加载一下hibernate的配置文件,hibernate.properties
#sqlserver
#jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
#jdbc.url=jdbc:sqlserver://192.168.1.60:1408;DatabaseName=test
#jdbc.username=sa
#jdbc.password=1111 #mysql
#jdbc.driverClassName=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/test
#jdbc.username=root
#jdbc.password=root #Oracle
jdbc.dialect=org.hibernate.dialect.Oracle10gDialect
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@10.64.68.195:xxxx:orcl
jdbc.username=xxxxxx
jdbc.password=xxxxxx jdbc.hbm2ddl.auto=update
jdbc.show_sql=true
jdbc.format_sql=true
然后就是配置数据连接的连接源,我这里用的是dbcp(还有c3p0和proxool),然后就是配置hibernate的SessionFactory了,这里我使用的是hibernate4,org.springframework.orm.hibernate4.LocalSessionFactoryBean,将数据源配置到sessionFactory中,<property name="annotatedClasses">是将我们生成的实体类加入hibernate中,这样在使用hibernate的hql时,表明就是实体类的类名了,否则hibernate不会识别。使用hibernate的话,实体类可以根据数据库中的表生成实体类,也可以根据实体类生成表。
如果用实体类生成表的话就需要在sessionFactory中加入<property name="mappingResources">,即把映射文件加入进来,然后修改一下hibernate.hbm2ddl.auto的方式,这里就不多做介绍了。
然后就是附上一下我的service文件:
package com.example.dao; import com.example.pojo.Message; import java.util.List; public interface MessageDao { public Message findMessageById(String id); public void saveMessage(Message message); public List<Message> findMessageAll(); public String getMessageName();
}
package com.example.dao.impl; import com.example.dao.MessageDao;
import com.example.pojo.Message;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class MessageDaoImpl implements MessageDao { @Autowired
private SessionFactory sessionFactory; //获取和当前线程绑定的Session
private Session getSession(){
return sessionFactory.openSession();
} public Message findMessageById(String id) {
//实例化Configuration,这行代码默认加载hibernate.cfg.xml文件
//String hql = "FROM Message where id = ?";
String hql = "FROM Message where id = ?";
Query query = getSession().createQuery(hql).setString(0,id);
Message message = (Message) query.uniqueResult();
return message;
}
public void saveMessage(Message message) {
getSession().save(message);
} public List<Message> findMessageAll() {
String hql = " FROM Message";
Query query = getSession().createQuery(hql);
List<Message> messageList = query.list();
return messageList;
} public String getMessageName() {
String name = "测试消息";
return name;
}
}
可以看到在我在接口的实现类中通过注入的方式注入了Hibernate的sessionFactory,这里需要注意一下,如果这里采用注入的方式,那么在使用这个service的实现类时,也必须要采用注入的方式引入这个类,否则sessionFactory会是null。再然后需要注意的就是获取session的方式,我这里采用的是sessionFactory.openSession()的方式,我看网上给的好多种都是sessionFactory.getCurrentSession()这个方法,但是如果你使用的是hibernate4的话,getCurrentSession()这个方法就不管用了,注意一下。然后我们就可以通过hibernate的session进行数据库操作了。到此springmvc+hibernate的配置就到此结束了,接下来我们说一下springmvc+mybatis的配置,由于好久都没用了,之前用过也不是springmvc一起用的,所以配置的时候还是忘了好多。
这里最需要注意的就是mybatis是需要mapper类的,mapper类对应的就是mybatis的sql xml中的方法,有了mapper类我们才能调用mybatis写好的sql方法这里我们看一下web.xml中的配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springbeans.xml,classpath:mybatis.xml</param-value>
</context-param>
配置文件还是两个,一个bean一个dao,名字不一样而已,我们看一下mybatis.xml
aaarticlea/png;base64,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" alt="" />
先截一下项目目录的图,方便之后说明。
<?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:mybatis="http://mybatis.org/schema/mybatis-spring"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 该包下的类支持注解,表示会被当作{@code mybatis mapper}处理 配置了之后表示可以自动引入mapper类-->
<mybatis:scan base-package="com.mvc.dao"/> <!-- 自动扫描注解的bean -->
<context:component-scan base-package="com.mvc.dao" /> <!--引入属性文件 -->
<context:property-placeholder location="classpath:mybatis.properties"/>
<!--数据库连接-->
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<!--链接池中最大连接数,默认为8-->
<property name="maxActive" value="30"></property>
<!--链接池中最大空闲连接数,默认为8-->
<property name="maxIdle" value="10"></property>
<!--链接池中最小空闲连接数,默认为0-->
<property name="minIdle" value="0"></property>
<!--当连接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1.表示永不超时-->
<property name="maxWait" value="1000"></property>
<property name="defaultAutoCommit" value="true"></property> </bean>
<!-- mybatis配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<!-- 加载Mybatis全局配置文件 -->
<property name="configLocation" value="classpath:mapper/SqlMapConfig.xml"/>
</bean> <!-- 配置mapper扫描器 -->
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包路径,如果需要扫描多个包中间用半角逗号隔开 -->
<property name="basePackage" value="com.mvc.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>
<!-- 该包下的类支持注解,表示会被当作{@code mybatis mapper}处理 配置了之后表示可以自动引入mapper类-->
<mybatis:scan base-package="com.mvc.dao"/> <!-- 自动扫描注解的bean -->
<context:component-scan base-package="com.mvc.dao" />
这两句我不知道有什么不同,目的都是一样,可以注入dao层的类,这里的dao层即是mybatis的mapper层,自动注入方便我们在service中注入mapper。然后是配置mybatis的sqlSessionFactory,对应的类是org.mybatis.spring.SqlSessionFactoryBean,类似hibernate的sessionFactory,将数据源配置进来,然后就是再把mybatis的mapper配置文件加载进来,SqlMapConfig.xml,也叫全局配置文件,<property name="configLocation" value="classpath:mapper/SqlMapConfig.xml"/>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- 将数据库连接数据抽取到属性文件中方便测试 -->
<!-- <properties resource="/WEB-INF/classes/jdbc.properties"></properties> -->
<!-- 别名的定义 -->
<!--<typeAliases>-->
<!--<typeAlias alias="User" type="cn.jxufe.web.mybatis.User"/>-->
<!--</typeAliases>-->
<typeAliases>
<typeAlias alias="Book" type="com.mvc.pojo.Book"/>
</typeAliases> <!-- 数据库连接用数据库连接池 --> <mappers>
<!-- 加载映射文件 -->
<!-- 这里也可以使用class来加载映射文件,前提是:使用mapper代理的方法,遵循规范,
并且两个文件必须同名且在同一目录
<mapper class="com.wxisme.mybatis0100.mapper.UserMapper"/>
基于class加载,可以进行批量加载
-->
<!-- 通过扫描包的方式来进行批量加载映射文件 -->
<!--<package name="com.wxisme.ssm.mapper"/>-->
<mapper resource="mapper/BookMapper.xml"/> </mappers>
</configuration>
这里面主要两个标签,一个是<typeAliases>,这个标签的作用就是配置实体类别名,这样的话我们在xxMapper.xml中可以使用类的别名,可以单个类加载,也可以整个包加载,另外一个是<mappers>,就是加载我们的映射文件了,这里我写了一个BookMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mvc.dao.BookMapper">
<insert id="insertBook" parameterType="Book">
insert into book values( #{id}, #{bookName}, #{isbn}, #{price}, #{stock})
</insert>
<!-- 查询单条记录 -->
<select id="getBookById" parameterType="int" resultType="Book">
select * from book where id = #{id}
</select>
</mapper>
这里我们看一下,<mapper>标签下 namespace就是对应的mapper类,mapper类中写的方法就是我们映射文件的方法(名称要一致),这里的parameterType就是参数类型了,这里我就用到了之前在配置文件中配置的别名了,resultType就是返回类型了,注意如果没有别的配置,这里的Book里的属性,要和book表中字段一模一样才行。也可以手动配置。
然后我们再回去看一下mybatis.xml中的配置,配置完sqlSessionFactory后,需要加一个mapper扫描器,这里hibernate是没有的,也是mybatis独有的,因为mybatis才有mapper
<!-- 配置mapper扫描器 -->
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包路径,如果需要扫描多个包中间用半角逗号隔开 -->
<property name="basePackage" value="com.mvc.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
这里又扫描了一次mapper包,然后将sqlSessionFactory配置进来,我觉得mapper扫描器是必须要用的,但配置这块还需要具体研究一下。先记录下来。这样配置就基本结束了。
然后我们看一下调用,mybatis我们可以直接调用mapper类中的方法,至于为什么不像Hibernate那样需要session,是接下来需要学习的
public class BookServiceImpl implements BookService { @Autowired
private BookMapper bookMapper; public Book getBook(int id) {
return bookMapper.getBookById(id);
} public void insertBook(Book book) {
bookMapper.insertBook(book);
}
}
这里直接注意bookMapper,bookMapper的方法就是bookMapper.xml中定义的。然后我们在controller中注入BookServiceImpl就行了。
这里就出现了一个问题,这里我附上我mybatis项目中springbeans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.mvc.service"/>
<bean id ="userService" class="com.mvc.service.impl.BookServiceImpl"/> </beans>
我想像之前hibernate项目中时直接用扫描包的方式注入BookServiceImpl时,失败了,这地方还不知道原因,也是先记录一下。还是手动的配置一下这个类,才注入成功的。我们写的时候也是,如果不嫌麻烦,可以一个类一个类手动注入,类似<bean id ="userService" class="com.mvc.service.impl.BookServiceImpl"/>这种。注入时名字就为userService。
这里我再又看一遍代码后知道问题出在哪里了,配置文件是没有问题的,问题出在我并没有在BookServiceImpl这个接口实现类上加上注入@Component这样的注解,所以不能被spring容器识别,从而没有生成spring管理的bean。加上注解就OK了。从这里我们知道了如果想要通过spring的注解注入bean的话,需要两个步骤。第一点就是要在配置文件将想注入的路径配置进去,然后再在bean的开头根据不同bean的作用使用@Controller,@Component,@Repository,@Service注解。
最后总结一下hibernate和mybatis配置相同和不同的几个地方。
相同点:1,都需要配置数据源(dbcp,c3p0,proxool)
2,都需要个.properties文件,用来保存数据库相关属性(比如是什么数据库,用户名,密码之类的),也可以使用xml文件(hibernate可以,mybatis不太清楚不敢说)
3,都需要配置sessionFactory,hibernate叫sessionFactory,mybatis叫sqlSessionFactory。
不同点:1,mybatis是需要mapper层的,mapper层对应mapper的映射文件。
2,在mybatis的sqlSessionFactory,需要将mybatis的全局配置文件加入,全局配置文件中配置实体类的别名typeAliases和映射文件mappers。
3,mybatis需要配置mapper扫描器,扫描器将扫描mapper包,然后把sqlSessionFactory配置进来。
4,实现查询的话,hibernate是利用sessionFactory创建的session进行操作,不需要手动写sql。而mybatis则是写好每个xxMapper.xml然后再写对应的mapper类,然后每次调用的时候利用mapper类中的方法实现数据库的操作。
以上是我个人以一个初学者的角度进行的总结,逻辑也不是很清晰,学术性更不用说了,只当做是给自己以后忘了的时候看的。以后有学习到新的东西还需要做很多补充。在这里先作为记录。
springmvc配置mybatis与hibernate的不同点的更多相关文章
- Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结
1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...
- spring整合springMVC、mybatis、hibernate、mongodb框架
开发环境 eclipse Mars 4.5 JDK 1.7 框架 spring 4.0.5 mybatis 3.2.7 hibernate 4.3.6 mongodb 1.7 数据库 MySQL 5. ...
- MyBatis 与 Hibernate 到底哪个更快?
前言 由于编程思想与数据库的设计模式不同,生出了一些ORM框架. 核心都是将关系型数据库和数据转成对象型.当前流行的方案有Hibernate与myBatis. 两者各有优劣.竞争激烈,其中一个比较重要 ...
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...
- SpringMVC,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分
SpringMVC,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分 辞职待业青年就是有很多时间来写博客,以前在传统行业技术强度相对不大,不处理大数据,也不弄高并发 ...
- SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置
一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...
- spring整合mybatis、hibernate、logback配置
Spring整合配置Mybatis 1.配置数据源(连接数据库最基本的属性配置,如数据库url,账号,密码,和数据库驱动等最基本参数配置) <!-- 导入properties配置文件 --> ...
- SpringMVC+Spring+mybatis项目从零开始--Spring mybatis mysql配置实现
上一章我们把SSM项目结构已搭建(SSM框架web项目从零开始--分布式项目结构搭建)完毕,本章将实现Spring,mybatis,mysql等相关配置. 1. 外部架包依赖引入 外部依赖包引入 ...
- SpringMVC的工作流程?Mybatis和hibernate区别?
SpringMVC的工作流程?1. 用户发送请求至前端控制器DispatcherServlet2. DispatcherServlet收到请求调用HandlerMapping处理器映射器.3. 处理器 ...
随机推荐
- IO模型之NIO代码及其实践详解
一.简介 NIO我们一般认为是New I/O(也是官方的叫法),因为它是相对于老的I/O类库新增的( JDK 1.4中的java.nio.*包中引入新的Java I/O库).但现在都称之为Non-bl ...
- 基于SpringBoot的多模块项目引入其他模块时@Autowired无法注入其他模块stereotype注解类对象的问题解决
类似问题: 关于spring boot自动注入出现Consider defining a bean of type 'xxx' in your configuration问题解决方案 排查原因总结如下 ...
- Python中的上下文管理器(contextlib模块)
上下文管理器的任务是:代码块执行前准备,代码块执行后收拾 1 如何使用上下文管理器: 打开一个文件,并写入"hello world" filename="my.txt&q ...
- ES Client
关于 ElasticSearch的学习参见:ELK | wjcx_sqh 本文分别学习 .Net | Java 下操作 ES: .Net 目前主流的 .Net 客户端有 2 种: PlainElast ...
- mamcached+(magent+keepalived高可用)搭建及理论概述
目录 一.理论概述 工作流程 二.部署 环境 环境概述 部署 三.测试 四.总结 一.理论概述 Memcached服务器端与PHP-Memcache客户端安装配置_服务器应用_Linux公社-Linu ...
- 异常-No suppression parameter found for notification
1 详细异常 Command Start is not currently available for execution. 关闭 kafka gateway 无法启动 java.lang.NullP ...
- Luogu P5020 货币系统
Luogu P5020 货币系统 先把$a$数组排一下序. 从最小的数开始选,显然最小这个数必须选,然后利用完全背包的思想,从$a_i$到最大值筛选一遍,将可以组成的打上标记. 在判断后面的数字时,如 ...
- Ignatius and the Princess IV (简单DP,排序)
方法一: 直接进行排序,输出第(n+1)/2位置上的数即可. (容易超时,关闭同步后勉强卡过) #include<iostream> #include<cstdio> # ...
- FM系列
在计算广告中,CTR是非常重要的一环.对于特征组合来说,业界通用的做法主要有两大类:FM系列和Tree系列.这里我们来介绍一下FM系列. 在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征 ...
- Python调用R编程——rpy2
在Python调用R,最常见的方式是使用rpy2模块. 简介 模块 The package is made of several sub-packages or modules: rpy2.rinte ...