mybatis+strut2+spring整合总结

合集下载

Spring精品教程资料:3.MyBatis与Spring的整合

Spring精品教程资料:3.MyBatis与Spring的整合
根据整合步骤实现Spring和MyBatis的整合 查询出全部供应商数据 直接注入SqlSessionTemplate实现
完成时间:20分钟
7/33
学员操作—根据名称查询供应商信息 练习 需求说明
在上一练习基础上增加按照供应商名称模糊查询供应商 信息的功能
要求:直接注入SqlSessionTemplate实现
MapperFactoryBean
MapperScannerConfigurer递归扫描基准包下所有接口,若它们 在SQL映射文件中定义过,则动态注册为MapperFactoryBean, 如此即可批量产生映射器实现类
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
分析 配置数据源 配置SqlSessionFactoryBean
使用SqlSessionTemplate实现数据库的操作
编写业务逻辑代码并测试
演示示例1:实现Spring对MyBatis的整合
6/33
学员操作—实现供应商表的查询操作 练习 需求说明
在超市订单系统中实现供应商表的查询操作
<property name="basePackage" value="cn.smbms.dao" />
</bean>
指定扫描的基准包
演示示例3:使用MapperScannerConfigurer注入映射器
11/33
小结
MapperScannerConfigurer 与@Autowired注解或@Resource注解配合 使用,自动创建映射器实现并注入给业务组件,能够最大限度地减 少DAO组件与业务组件的编码和配置工作

三大框架整合及其原理

三大框架整合及其原理

一搭建三大框架步骤1 搭建s2sh步骤分析:1.1在MyEclipse 里面新建一个 java web project1.2新建三个 Source Folder :src : 源文件config : 存放配置文件 : hibernate , spring , struts2test: 测试类1.3 导入环境需要的jar 包 : WebRoot/WEB-INF/lib (一共64个)2 搭建Hibernate 和Spring 整合(*根据搭建需求谁能先测试就先搭建谁)2.1 在 src 源文件里面建立一个 cola.s2sh.domain[并且在该包下创建一个持久类和该类的映射文件] .2.2 配置核心文件在 config 里面建立一个hibernate 文件夹里面创建hibernate.cfg.xml配置文件(里面的内容拷贝就可以)2.3 在spring 文件夹里面创建并且把sessionFactory 交给spring 来管理: [applicationContext-db.xml中引入][<bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"><value>classpath:hibernate/hibernate.cfg.xml</value> </property></bean>]在 applicationContext.xml 中 : 导入<import resource="applicationContext-db.xml"/>2.4 测试sessionFactory[编写SpringUtils 然后继承这个][public class SpringUtils {public static ApplicationContext context;static {context = newClassPathXmlApplicationContext("spring/applicationContext.xml" );}}]2.5 编写 dao .service 的包类和接口;PersonDaoImpl 要继承HibernateDaoSupport[public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao {public void savePerson(Person person) {this.getHibernateTemplate().save(person);}}]2.6 把 dao ,service 放在spring 容器中:[<bean id="personDao"class="cola.s2sh.daoImpl.PersonDaoImpl"> <property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><bean id="personService"class="cola.s2sh.service.impl.PersonServiceImpl"><property name="personDao"><ref bean="personDao"/></property></bean>]2.7 完成 spring 声明式处理 :[<!-- 事务管理 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><tx:advice id="tx"transaction-manager="transactionManager"><tx:attributes><tx:method name="save*"read-only="false"/><tx:method name="update*"read-only="false"/><tx:method name="delete*"read-only="false"/><!--除了上面三种情况以外的情况--><tx:method name="*"read-only="true"/></tx:attributes></tx:advice><aop:config><aop:pointcutexpression="execution(* cola.s2sh.service.impl.*.*(..))"id="perform"/><aop:advisor advice-ref="tx"pointcut-ref="perform"/> </aop:config>]2.8 整合struts 创建 action 类包 ;2.9 把action 放在spring 容器中* 注意在personAction的spring的配置中一定要写一个属性scope="prototype"[<bean id="personAction"class="cola.s2sh.action.PersonAction" scope="prototype"><property name="personService"><ref bean="personService"/></property></bean>]在这个中引入下面3.0 编写struts2中配置文件Struts –person.xml中Struts.xml3.1 编写web .xml文件[<?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>cola.s2sh</display-name><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener><!—将srping放在SrvletContext中进行加载当servlet加载时 spring 也完成加载 --> <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext.xml</param-value> </context-param><filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>OpenSessionInViewFilter</filter-name><url-pattern>*.action</url-pattern></filter-mapping><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter -class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>]二原理分析:一、 Struts 2框架整合Spring步骤1、复制文件。

struts2+spring3+mybatis整合

struts2+spring3+mybatis整合

--src|-com.ssm|-action|-LoginAction.java|-entity|-User.java|-iface|-IUserDao.java|-impl|-UserDao.java|-seriface|-IUserServices.java|-impl|-UserServices.java|-sqlmap|-User.xmlapplicationContext.xmldatabase.Propertieslog4j.PropertiesmyBatis-config.xmlstruts.Propertiesstruts.xmlok直接上代码了:Action类: LoginAction.javapackage com.ssm.action;import java.util.ArrayList;import java.util.List;import com.opensymphony.xwork2.Action;import er;import com.ssm.seriface.IUserService;public class LoginAction implements Action{private User user;private IUserService userServices;public void setUserServices(IUserService userServices) {erServices = userServices;}public User getUser(){return user;}public void setUser(User user){er = user;}public String execute() throws Exception{String aaa= getUser().getId()+"";List userList= new ArrayList();userList= userServices.selectUserById(getUser().getId()); if(userList.size()>0){return Action.SUCCESS;}else{return Action.ERROR;}}}实体类User.javapackage com.ssm.entity;import java.io.Serializable;import java.util.Date;public class User implements Serializable{private int id;private String name;private String password;private Date birthday;public User(){}public User(String name, String password, Date birthday) {= name;this.password= password;this.birthday= birthday;}public int getId(){return id;}public void setId(int id){this.id = id;}public String getName(){return name;}public void setName(String name){ = name;}public String getPassword(){return password;}public void setPassword(String password){this.password = password;}public Date getBirthday(){return birthday;}public void setBirthday(Date birthday){this.birthday = birthday;}}IUserDao接口类IUserDao.javapackage com.ssm.iface;import java.util.List;public interface IUserDao{public boolean userVaild(String name, String password);public List selectUserById(int id);}UserDaoImpl实现接口类:UserDaoImpl.javapackage com.ssm.iface.impl;import java.util.List;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; import com.ssm.iface.IUserDao;//import com.ssb.baseutil.SqlMapClientDaoSupport;//import com.ssb.iface.IUserDao;//import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; public class UserDaoImpl extends SqlMapClientDaoSupport implements IUserDao {public List selectUserById(int id){// TODO Auto-generated method stubreturn getSqlMapClientTemplate().queryForList("selectUserById", id);}public boolean userVaild(String name, String password){// TODO Auto-generated method stubreturn false;}/*public boolean userVaild(String name, String password){return false;}public List selectUserById(String id){return getSqlMapClientTemplate().queryForList("getUserById", id);}*/}业务类IUserServices.javapackage com.ssm.seriface;import java.util.List;public interface IUserService{public boolean userVaild(String name, String password); public List selectUserById(int id);}UserServicesImpl.javapackage com.ssm.seriface.impl;import java.util.List;import com.ssm.iface.IUserDao;import com.ssm.seriface.IUserService;public class UserServiceImpl implements IUserService{private IUserDao serviceUserDao= null;public IUserDao getServiceUserDao(){return serviceUserDao;}public void setServiceUserDao(IUserDao serviceUserDao) {this.serviceUserDao = serviceUserDao;}public List selectUserById(int id){// TODO Auto-generated method stubreturn serviceUserDao.selectUserById(id);}public boolean userVaild(String name, String password){// TODO Auto-generated method stubreturn erVaild(name, password);}}mybatis实体配置文件User.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="user"><resultMap type="User" id="userResultMap"><id property="id" column="ID"/><result property="name" column="NAME"/><result property="password" column="PASSWORD"/><result property="birthday" column="BIRTHDAY"/></resultMap><select id="selectUserById" parameterType="ng.String" resultType="User"><![CDATA[SELECT * FROM USER SUWHERE SU.ID = #{id}]]></select></mapper>sprng配置文件applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p" xmlns:context="/schema/context"xmlns:jee="/schema/jee" xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/jee/schema/jee/spring-jee-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><!-- 数据源属性配置文件--><!-- <bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:com/databaseconfig/database.properties"/></bean>--><context:property-placeholder location="classpath:database.properties"/><bean id="dataSource" class="boPooledDataSource"><property name="driverClass" value="${jdbc.driverClassName}" /><property name="jdbcUrl" value="${jdbc.url}" /><property name="user" value="${ername}" /><property name="password" value="${jdbc.password}" /><property name="autoCommitOnClose" value="true"/><property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/><property name="initialPoolSize" value="${cpool.minPoolSize}"/><property name="minPoolSize" value="${cpool.minPoolSize}"/><property name="maxPoolSize" value="${cpool.maxPoolSize}"/><property name="maxIdleTime" value="${cpool.maxIdleTime}"/><property name="acquireIncrement" value="${cpool.acquireIncrement}"/><property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/> </bean><!-- 数据连接管理--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- myBatis文件--><!--<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:myBatis-config.xml"/></bean>--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:myBatis-config.xml"/><property name="dataSource" ref="dataSource"/></bean><!-- ibatis2.x 配置<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><property name="configLocation" value="classpath:myBatis-config.xml"/><property name="dataSource" ref="dataSource"/></bean>--><bean id="mapDao" class="org.mybatis.spring.MapperFactoryBean"><!-- 这里是接口,不是接口实现类了--><property name="mapperInterface" value="com.ssm.iface.IUserDao"/><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean><bean id="userServices" class="erServiceImpl"><property name="serviceUserDao" ref="mapDao"/></bean><bean id="LoginAction" class="com.ssm.action.LoginAction"><property name="userServices" ref="userServices"/></bean></beans>数据库连接属性配置文件(其实可以不用这么复杂)database.Propertiesjdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/ddtest?characterEncoding=utf8 ername=rootjdbc.password=123cpool.checkoutTimeout=5000cpool.minPoolSize=20cpool.maxPoolSize=50cpool.maxIdleTime=7200cpool.maxIdleTimeExcessConnections=1800cpool.acquireIncrement=10log4j 随便到log4j里copy一个吧mybatis-config.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC"-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias alias="User" type="er"/></typeAliases><mappers><mapper resource="com/ssm/sqlmap/User.xml" /></mappers></configuration>struts配置文件struts.Properties##整合spring的struts.objectFactory=springeClassCache = truestruts.locale=zh_CNstruts.i18n.encoding=GBKstruts的Action配置文件struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="style" extends="struts-default"><!--<action name="loginAction" class="sys.style.design.action.LoginAction"> <result name="success">success.jsp</result><result name="error">error.jsp</result></action>--><action name="loginAction" class="com.ssm.action.LoginAction"><result name="success">success.jsp</result><result name="error">error.jsp</result></action></package></struts>。

Struts2、spring2、hibernate_的整合

Struts2、spring2、hibernate_的整合

一.struts 2 与spring2struts2 本身就采用了类似于spring的IOC容器机制,可以利用struts2官方提供的插件struts2-spring-plugin-2.0.11.1.jar,直接与spring进行整合,配置文件中只需要设置struts.objectFactory=spring这样,就将struts2的对象管理交给了spring2的IOC容器。

在struts.xml中配置的action<package name="maintaince" extends="struts-default"><action name="serverInfoList" class="serverInfoService" method="getAllServersInfo"><result name="list">/jsp/server_info/server_info_list.jsp</result></action>在spring的配置文件中配置的bean<bean id="serverInfoService" class="com.wod.service.impl.ServerInfoServiceImpl"><property name="serverInfoDao" ref="serverInfoDao"/><property name="sib" ref="serverInfoBean"/></bean>可以看出,struts2可以直接只用在spring2中配置的bean,引用过来作为action。

整合Spring与Struts2

整合Spring与Struts2

整合Spring与Struts2(java私塾)15.2 整合Spring与Struts215.2.1概述以上面的示例来说明整合Spring和Struts2的基本方式:∙SampleAction与SampleService的生命周期和依赖关系都由Spring去管理。

∙Struts2需要SampleAction实例的时候,不是自己新建实例,而是向Spring去请求获取一个实例,也就是SampleAction实例的生命周期也由Spring来管理接下来就来具体看看怎么整合Spring与Struts2。

15.2.2拷入jar包要整合Spring和Struts2,需要先要拷入Spring需要的jar包,既包括Spring本身的jar包,也包括Struts2的Spring插件。

找到下载的Struts2的资源包中的lib文件夹,也就是struts-2.1.8.1\lib,将以下几个jar 包拷入到我们的web工程的WEB-INF\lib中:spring-beans-2.5.6.jar、spring-context-2.5.6.jar、spring-core-2.5.6.jar、spring-test-2.5.6.jar、spring-web-2.5.6.jar、struts2-spring-plugin-2.1.8.1.jar、commons-logging-1.0.4.jar、struts2-spring-plugin-2.1.8.1.jar。

15.2.3改写SampleAction由于现在和Spring结合了,可以由Spring为Action注入Action需要的SampleService 的实例,也就是SampleAction引用SampleService的方式需要改变,其他的没有变化,示例代码如下:java代码:查看复制到剪贴板打印1.public class SampleAction extends ActionSupport{2.//通过setter方式,由Spring来注入SampleService实例3.private SampleService service;4.public void setService(SampleService service) {5.this.service = service;6. }7.private String name;8.private String userId;9.public String getName() {10.return name;11. }12.public void setName(String name) { = name;14. }15.public String getUserId() {16.return userId;17. }18.public void setUserId(String userId) {erId = userId;20. }21.22.public String execute() throws Exception {23. name = this.service.getNameById(userId);24.return SUCCESS;25. }26.}在execute方法中不再直接新建SampleServiceImpl的实例了,而是声明了一个SampleSerivce 类型的属性,并提供对应的setter方法,这个setter方法是留给Spring注入对象实例的时候调用的,可以不用提供getter方法。

struts2+hibernate+spring经典整合实例教程

struts2+hibernate+spring经典整合实例教程

Struts2与Spring、Hibernate三者整合的过程示例:示例工具:MyEclipse 7.0、Tomcat 6.0、MySql步骤:1.创建一个WEB工程,命名为BookShop(名字自己取,此处为示例工程名);2.导入struts2的核心jar包,也就是在WEB-INF下的lib文件夹中放入jar包文件,如下图(图中jar包为示例版本):3.加载spring,选中工程名,右击并选择【MyEclipse】选项下的【Add Spring Capabilities...】(或者在工具栏中选择【MyEclipse】下的【Add Spring Capabilities...】),在弹出的对话框中进行如下图所示操作:点击【Next】,点击Folder文本框后的【Browse】,在弹出对话框中选择spring配置文件存储位置为WEB-INF 文件夹,如下图所示:点击【OK】后,再点击【Finish】完成。

至此,已经完成加载spring,在WEB-INF文件夹下已经生成了配置文件applicationContext.xml。

4.加载Hibernate,选择【MyEclipse】下的【Add Hibernate Capabilities...】,在弹出对话框中进行如下图所示操作:点击【Next】后,选择Existing Spring configuration file单选框,在SessionFactory Id文本框中填入"sessionFactory",如下图所示:点击【Next】,进行如下图所示操作:该操作中,只需在Bean Id文本框中输入一个Id名,作为数据库源的代用名,意义不大。

然后在DB Driver 下拉列表中,选择MyEclipse中创建好的数据库源xiaoqi,其他信息将自动填写。

点击【Next】,在弹出对话框中去掉Create SessionFactory class?复选框,不创建该类,点击【Finish】完成(创建过程中,加载的jar包文件可能有重复,所以这个时候如果提示有某些jar包重复,问全部保存【Keep Exiting】,还是替换掉【Replace】,可以选择替换掉【Replace】)。

spring struts2 整合原理

spring struts2 整合原理

spring struts2 整合原理
Spring和Struts2的整合原理是通过Struts2框架提供的拦截器
来实现的。

在整合中,Spring框架负责管理Struts2的Action
对象,并提供依赖注入的功能。

具体的整合步骤如下:
1. 在Spring的配置文件中,配置Struts2的拦截器,指定
Struts2的配置文件路径,并注册Spring的拦截器。

2. 在Struts2的配置文件中,使用Spring创建Action对象,通
过Spring的依赖注入注入依赖的业务逻辑对象。

3. 配置Struts2的拦截器栈,指定拦截器的顺序和执行条件。

4. 在Struts2的Action类中,使用注解或XML配置将Action
类注册为Spring的Bean。

5. 在Spring的配置文件中,配置Action类所需要的依赖对象,并使用依赖注入将其注入到Action类中。

通过以上的步骤,实现了Spring和Struts2的整合。

整合后,Spring负责管理Struts2的Action对象以及其依赖的业务逻辑
对象,实现了两个框架的功能互补。

同时,整合后还可以利用Spring的强大功能,如AOP、事务管理等,来增强Struts2的
功能。

Spring精品教程资料:3.MyBatis与Spring的整合

Spring精品教程资料:3.MyBatis与Spring的整合
对上机练习1、2、3中的功能实现进行改造 要求:采用MapperScannerConfigurer+@Autowired(或
@Resource)注解实现映射器注入
完成时间:20分钟
15/33
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
共性问题集中讲解
16/33
为业务层添加声明式事务 问题 如何在添加用户的业务流程中控制事务?
read-only:事务是否为只读,默认值为false rollback-for:设定能够触发回滚的异常类型
Spring默认只在抛出runtime exception时才标识事务回滚 可以通过全限定类名指定需要回滚事务的异常,多个类名用
逗号隔开
no-rollback-for:设定不触发回滚的异常类型
SUPPORTS NOT_SUPPORTED、NEVER
isolation:事务隔离等级
DEFAULT(默认值)
READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZABLE 19/33
事务属性 2-2
timeout:事务超时时间,允许事务运行的最长时间,以秒 为单位。默认值为-1,表示不超时
使用@Transactional为.Da方taSo法urc添eTra加nsa事ctio务nM支ana持ger"> <property name="dataSource" ref="dataSource" /> <@/bTeraanns>actional <@txS:aenrvnioceta("tuiosne-rdSreivrveincet"ra) nsaction-manager="txManager"/> public class UserServiceImpl implements UserService { …… @Transactional(propagation = Propagation.SUPPORTS) public List<User> findUsersWithConditions(User user) { // 省略实现代码 }}

Struts2,Spring,Hibernate整合步骤及一个简单实例

Struts2,Spring,Hibernate整合步骤及一个简单实例

Struts2,Spring,Hibernate整合步骤(自己笔记)配步骤的例子一个:请参看:Struts2,Spring,Hibernate整合例子一个1.建立web项目2.在web.xml 配置 struts2,和 spring ,<!-- 配置Struts2 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher(struts的过滤器)</filter-class></filter><filter-mapping>(加载struts2)<filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 配置Spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener(spring监听器)</listener-class></listener><!-- 查找spring配置文件 --><context-param>(程序从此处开始加载.xml 文件,并执行)<param-name>contextConfigLocation</param-name><param-value>classpath*:*.xml</param-value></context-param>3.在src根目录下创建struts.xml文件<include file="struts-default.xml"/>固定格式,用到此包4.在src根目录创建hibernate.cfg.xml文件<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN" "/hibernate-configura tion-3.0.dtd"><hibernate-configuration><session-factory><!-- 基本配置 --><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><property name="show_sql">false</property><property name="format_sql">true</property><propertyname="e_reflection_optimizer">true</property><property name="max_fetch_depth">2</property><property name="default_batch_fetch_size">8</property><property name="jdbc.batch_size">20</property></session-factory></hibernate-configuration>系统给的文件只需要拷贝,都是一些数据库库的基本配置5.在src根目录拷贝struts.properties文件struts.objectFactory = spring 该项是告诉系统用spring来控制hibernate和Actionstruts.action.extension=action 告诉系统访问时以什么结尾。

struts2+spring+mybatis框架整合详细介绍

struts2+spring+mybatis框架整合详细介绍

struts2+spring+mybatis框架整合详细介绍一、问题的提出最近一直在看各种主流javaweb框架,感触颇深,一个好的框架可以让你的程序代码变得相当的明了,也便于后期的维护!目前用到的主流框架包括struts2+spring+mybatis和spring+springmvc+mybatis(注:个人觉得mybatis框架很好用,所以框架基本都会选择用mybatis)。

其实很多的小伙伴都想自己配置个框架,但是基于怕报错啊、引入jar包、程序调试啊等等问题都放弃了!基于这个现象,本人在这里就详细的介绍下本人配置框架的详细过程,希望对读者有所帮助。

二、引入jar包这个问题一直是想搭建框架的小伙伴们的最大的一个障碍!很多人就是由于不知道导入什么样的jar而犯愁!对于这个问题我个人的想法是,jar包都是向下兼容的所以你大可不用担心你的jar包版本不对的问题,尽可能下载版本靠后的jar包就能解决这个问题。

其次是不知道要导入多少个jar包,这确实是个棘手的问题,对于这个问题我的解决方案是:首选是在网上查找,这方面的资料网上还是很全面的什么jar都可以下载,其次是注意struts2 以及spring 等的官网,官网上也会有详细的介绍每个jar的功能。

这里我就不在详细的描述了。

下面是我这个框架搭建需要的jar包截图,如果有需要jar包的可私下联系我,大家共同学习。

s三、配置框架1、首先让大家看看我配置完后的框架图,再来讲述我配置的流程2、配置流程2.1、首先任何一个系统都需要有其对应的数据库,这里我用的是mysql数据库,首先在数据库里新建个数据库,注意数据库的字符集最好选为utf-8的这样能防止数据库中文字符乱码。

由于我只是配置框架,所以我新建数据库名为wayneT est数据库里也只建了一张表,如下图:2.2、建好数据库后,我用了个工具Mybatis Generator自动生成model类,dao,mapper文件.这个工具的详细的用法网上也很多,如果读者不懂得话也可以私下联系我这里给你们个链接Mybatis 主页/p/mybatis/ 上下载Mybatis mybatis-generator-core 。

Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一

Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一

Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)⼀MyBatis-Spring 会帮助你将 MyBatis 代码⽆缝地整合到 Spring 中。

使⽤这个类库中的类, Spring 将会加载必要的MyBatis⼯⼚类和 session 类。

这个类库也提供⼀个简单的⽅式来注⼊MyBatis数据映射器和SqlSession到业务层的bean中。

⽽且它也会处理事务, 翻译MyBatis的异常到Spring的 DataAccessException异常(数据访问异常,译者注)中。

最终它并不会依赖于MyBatis,Spring或MyBatis-Spring来构建应⽤程序代码。

⼀、使⽤Maven创建⼀个Web项⽬为了完成Spring4.x与MyBatis3.X的整合更加顺利,先回顾在Maven环境下创建Web项⽬并使⽤MyBatis3.X,第⼀、⼆点内容多数是回顾过去的内容。

完成第⼀阶段与第⼆阶段的项⽬结构如下所⽰:1.2、点击“File”->“New”->"Other"->输⼊“Maven”,新建⼀个“Maven Project”,如下图所⽰:1.2、请勾选“Create a simple project”,创建⼀个简单的项⽬,不使⽤模板。

也可以使⽤模板,选择WebApp,不过这⾥就不应该勾选。

如下图所⽰:1.3、填写好包名、项⽬名,选择打包类型为:war,如下图所⽰:1.4、项⽬创建好后可能会发现有错误,选择项⽬,右键“属性properties”->"层⾯Project Facets"->"Java"修改版本号为1.7,默认为1.5;点击“Ok”保存后关闭。

如下图所⽰:1.5、重复上⼀个步骤,反勾Dynamic Web Module,将项⽬暂时变成⾮Web项⽬。

点击“Ok”保存后关闭。

Struts2_spring整合

Struts2_spring整合

Struts_spring整合第一步:建立WEB工程Spring_Struts2第二步:①导入struts2支持的JAR包:将struts-2.1.8.1-all\struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\lib下的所有JAR包(6个jar 包,是struts必要的包)拷入到工程目录下的WEB-INF/lib目录下,如果没有看到你拷入的JAR包需要强制加载(这一步指的是如果包导入到lib下后仍然存在WEB-INF/lib下而没有在工程下出现Referenced Liberaries这一项则需要选中lib文件夹,单击右键,Build Path,Configure Build Path,在弹出的对话框中选择Order and Export,Select All,确定)。

②此外还需要struts2-spring-plugin-2.1.8.1.jar支持包,整合spring与struts2所必需的JAR 包,它位于struts-2.1.8.1-all\struts-2.1.8.1\lib目录下第三步:拷贝配置文件web.xml,struts.xml,它们分别位于路径:①struts-2.1.8.1-all\struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF(web.xml所在位置)拷贝Web.xml文件到工程的Web-INF路径下。

Web-INF路径下是受保护的,不会被访问到,保证数据的安全。

②struts-2.1.8.1-all\struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\classes(struts.xml所在位置)拷贝struts.xml文件到工程的src文件下并删除<Struts>标签内的内容,它用于配置action。

内部有一个包含文件<include file="com/ibm/struts/conf/struts_user.xml"/>,这段代码表示,struts.xml中的包含文件是com/ibm/struts/conf包下的struts_user.xml。

Spring和MyBatis的整合

Spring和MyBatis的整合

Spring和MyBatis的整合1. Spring和各个框架的整合Spring⽬前是JavaWeb开发中最终的框架,提供⼀站式服务,可以其他各个框架整合集成Spring整合⽅案1.1. SSHssh是早期的⼀种整合⽅案Struts2 : Web层框架Spring :容器框架Hibernate :持久层框架1.2. SSM主流的项⽬架构的三⼤框架(相对其他框架⽽⾔,最优秀)SpringMVC : spring⾃⼰家的 Web层框架,spring的⼀个模块Spring :容器框架MyBatis :持久层框架2. Spring与MyBatis整合2.1. 集成思路实际开发,使⽤Maven项⽬,直接引⼊项项⽬在Maven仓库中的坐标即可学习阶段:⼿动导⼊jar包,从零开始集成(巩固基础知识)2.2. 创建java项⽬准备集成相关jar包完成项⽬层与层之间spring对象的创建和依赖关系的维护package cn.sxt.pojo;public class User {private Integer id;private String name;private String password;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + "]"; }public User(Integer id, String name, String password, Integer age) {super();this.id = id; = name;this.password = password;this.age = age;}public User() {super();// TODO Auto-generated constructor stub}}package cn.sxt.mapper;import java.util.List;import er;public interface UserMapper {int insert(User user);int deleteByPrimaryKey(Integer id);int updateByPrimaryKey(User user);User selectByPrimaryKey(Integer id);List<User> selectList();}<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="erMapper"><insert id="insert" parameterType="User"keyColumn="id"keyProperty="id"useGeneratedKeys="true">insert into user (name,password,age)values(#{name},#{password},#{age}) </insert><!-- 单⾏查询<select resultType ="">查询功能的标签resultType : 返回结果的数据类型,和接⼝对应⽅法的返回类型必须⼀致--><select id="selectByPrimaryKey" parameterType="Integer" resultType="User"><!-- #{对象属性} ,主键理论上任何值都可以 #{abc},#{xxx},可以不⽤对象属性-->select * from user where id = #{id}</select><!-- 多⾏查询⽆论单⾏或者多⾏查询,返回的数据类型都是对应 pojo 对应的对象类型--><select id="selectList" resultType="User">select * from user</select><!-- 删除操作 --><delete id="deleteByPrimaryKey" parameterType="Integer">delete from user where id = #{id}</delete><!-- 修改操作 --><update id="updateByPrimaryKey" parameterType="User"><!-- 固定语义的sql语句 -->update user set name = #{name},password = #{password},age = #{age} where id = #{id} </update></mapper>package cn.sxt.service;import java.util.List;import er;public interface UserService {int insert(User user);int deleteByPrimaryKey(Integer id);int updateByPrimaryKey(User user);User selectByPrimaryKey(Integer id);List<User> selectList();}package cn.sxt.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import erMapper;import er;import erService;@Servicepublic class UserServiceImpl implements UserService {/** 问题1 : UserMapper是接⼝,如何创建对象?* 答:使⽤MyBatis的SqlSession 会话对象。

SpringSpringMVCMyBatis整合

SpringSpringMVCMyBatis整合

SpringSpringMVCMyBatis整合今天主要想总结一下SSM的整合,之前已经将MyBatis和spring整合起来了,那么这次主要介绍怎样加入SpringMVC这个框架,在整合之前先简单介绍一下SpringMVC:SpringMVC是一种基于Java的,实现了”WEB MVC”设计模式,基于请求驱动类型的轻量级WEB框架,是Spring框架的重要组成部分,该框架使用了MVC架构模式的思想,将WEB层进行职责功能的解耦,基于请求驱动类型指的就是使用“请求-响应”模型,该框架的目的就是帮助我们简化web系统的开发。

SpringMVC中最重要的一个就是前端控制器:FontController:DispatcherServlet,MVC架构模式中要求一定要存在前端控制器,而且一定是由Servlet实现的,而Struts2严格来说称之为MVC的变种架构。

Servlet:Servlet规范对路径匹配规则是有要求的:1.如果一个路径是以/开头,以/*结尾,称之为路径前缀匹配2.如果一个路径是以*.开头,那么这个路径称之为扩展匹配3.其它所有的路径都是精确匹配SpringMVC架构模式:天生和Spring框架集成,能简单的进行Web层的单元测试。

搭建SpringMVC的开发环境:1.首先自然是要引入相关的Jar包,然后在web.xml中配置前端控制器:servlet当然由于我们现在创建的是WEB项目,记得在web.xml中配置一个全局的参数,在Tomcat 启动时就会去读取该文件:applicationContext.xml以下就是web.xml文件的具体配置内容:<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"><display-name>SpringMVCTest</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><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><filter><!-- 解决put delete得不到数据的问题--><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><servlet-name>springmvc</servlet-name></filter-mapping><!-- session超时定义,单位为分钟--><session-config><session-timeout>30</session-timeout></session-config><error-page><error-code>403</error-code><location>/WEB-INF/views/errors/403.jsp</location></error-page><error-page><error-code>404</error-code><location>/WEB-INF/views/errors/404.jsp</location></error-page><error-page><error-code>405</error-code><location>/WEB-INF/views/errors/405.jsp</location></error-page><error-page><error-code>500</error-code><location>/WEB-INF/views/errors/500.jsp</location></error-page></web-app>2.增加配置文件,默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件,上面这样写就代表当前配置文件的名称为springmvc-servlet.xml,也就是配置文件的名称必须和Servlet的名字一样:“springmvc-servlet.xml”该配置文件中主要配置一些处理器映射器,处理适配器,视图解析器以及开启注解和扫描SpringMVC注解的包路径,以下就是具体配置内容:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xmlns:p="/schema/p"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/mvc/schema/mvc/spring-mvc-3.2.xsd/schema/beans/schema/beans/spring-beans-3.2.xsd/schema/context/schema/context/spring-context-3.2.xsd/schema/aop/schema/aop/spring-aop-3.2.xsd/schema/mvc/schema/mvc/spring-mvc-3.0.xsd"> <!-- 开启注解--><context:annotation-config /><!-- @Controller注解的使用前提配置--><mvc:annotation-driven /><!-- 扫描的包路径--><context:component-scan base-package="com.ecjtu.ssm"><context:exclude-filter type="annotation"expression="org.springframework.stereotype.Service" /></context:component-scan><mvc:interceptors><bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" /><bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"p:paramName="lang" /></mvc:interceptors><beanclass="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"> </bean><!-- request --><beanclass="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean> <!-- 将静态文件指定到某个特殊的文件夹中统一处理--><mvc:resources location="/resources/" mapping="/resources/**" /><!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理--><mvc:resources mapping="/images/**" location="/images/" /><mvc:resources mapping="/css/**" location="/css/" /><mvc:resources mapping="/others/**" location="/others/" /><mvc:resources mapping="/js/**" location="/js/" /><mvc:resources mapping="/html/**" location="/html/" /><!-- 文件上传--><bean id="multipartResolver"class="monsMultipartResolver"><property name="maxUploadSize" value="10000000" /><!-- 10M --></bean><!--注解映射器--><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappin g"/><!-- 添加对图片、字节、字符串、XML及json数据格式的支持,注意添加json支持的jar包--><bean id="messageAdapter"class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter "><property name="messageConverters"><list><beanclass="org.springframework.http.converter.StringHttpMessageConverter" /><beanclass="org.springframework.http.converter.FormHttpMessageConverter" /><beanclass="org.springframework.http.converter.ByteArrayHttpMessageConverter" /><beanclass="org.springframework.http.converter.xml.SourceHttpMessageConverter" /><beanclass="org.springframework.http.converter.BufferedImageHttpMessageConverter" /><beanclass="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> </list></property></bean><!--启动Spring MVC的注解功能,设置编码方式,防止乱码--><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter "><property name="messageConverters"><list><beanclass="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean></list></property></bean><!-- 定义JSP文件的位置--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean></beans>这里我也一并将applicationContext.xml文件的内容都贴出来吧,里面都有详细的注释<?xml version="1.0" encoding="UTF-8"?>default-autowire="no" default-lazy-init="false"><!-- 配置Spring组件扫描的包路径--><context:component-scan base-package="com.ecjtu.ssm.*"><!-- 不包括@Controller注解--><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /><context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /></context:component-scan><!-- 开启注解--><context:annotation-config /><!-- 读取外部的配置文件,这个配置文件主要配置了数据库的连接信息--><bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location"><value>classpath:db-config.properties</value></property></bean><!--本示例采用DBCP连接池,应预先添加DBCP包的依赖。

Struts2+Spring+MyBatis整合文档(共66张)

Struts2+Spring+MyBatis整合文档(共66张)
Struts2+Spring+MyBatis
2016-04-20
第1页,共66页。
目 录
Contents
1
框架的介绍
2
框架的原理
3
框架的使用
4
技术小结
第2页,共66页。
Part
1
框架 的介绍 (kuànɡ jià)
Introduction to the framework
第3页,共66页。
1.1 框架 由来 (kuànɡ jià)
种应用服务器,甚至无须应用服务器的支持,也能提供应用服务 器的功能,如声明式事务等。
第12页,共66页。
MyBatis产生的背景
Mybatis background
1、传统的jdbc,有许多操作是与业务和数据无关的,真正需要 的是,一个运行sql语句的功能,还有取回结果的功能,但是 jdbc要求你处理连接(liánjiē),会话、statement,尤其是 还要你注意关闭资源,还要写try catch处理异常 。 2、iBatis 解决了jdbc的问题,不仅如此,还要求你把sql 语句写到xml里,这样不会把sql编译到程序中,以增强程 序的可移植性,在不重新编译的情况下,可以更换数据库。 3、MyBatis 本是apache的一个开源项目iBatis, 2010年 这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。
应用了IOC,容器会主动在对象初始化时,将其依赖(yīlài)的其它对象传递进来,而不是这个
在做业务处理时,数据关系复杂,参与者多,造成业务逻辑复杂。使用面向过程开发很难保 持清晰的程序结构,不同功能的业务逻辑互相关联,耦合度高,对程序进行查错与修改困难。

Mybatis和spring整合

Mybatis和spring整合

Mybatis和spring整合mybatis和spring整合也就是把两者的优点集合到⼀起下⾯我们看下配置步骤1. 导⼊jar1. 整合spring和mybatis需要mybatis-spring.jar我⽤的是1.2.0版本2. 整合需要⽤到spring数据源和事物⽀持,需要spring-jdbc和spring-tx的包3. spring中使⽤具体的数据源实现,此次需要dbcp,commons-dbcp及commons-pool包4.5. 导⼊后如图所⽰6.7. spring官⽹下载地址:https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring/4.3.2.RELEASE8. 另⼀个地址:http://repo.spring.io/release/org/springframework/spring/9. mybatis官⽹下载地址:https:///mybatis/mybatis-3/releases2.3. 搭建好mybatis框架后确保mybatis环境搭建没有错误,在此基础上进⾏spring融合1. 修改配置⽂件1. ⾸先需要把mybatis中数据库连接和映射mapper⽂件的部分删除如下2. <properties resource="database.properties"/>3. <environments default="dpCommodity"><environment id="dpCommodity"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${user}"/><property name="password" value="${pwd}"/></dataSource></environment></environments><mappers><mapper resource="cn/dao/CommodityMapper.xml"/></mappers>2. 删除之后新建spring配置⽂件导⼊database.properties⽂件<!-- 引⼊properties⽂件 --><bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:database.properties"/></bean>之后配置数据源其中⼤括号⾥⾯的名称对应 database.properties⽂件中的名称3. <!-- 配置数据源 --><bean id="dataSource" class="mons.dbcp.BasicDataSource"><property name="driverClassName" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${user}"/><property name="password" value="${pwd}"/></bean>database⽂件内容如下:4. 配置sqlSessionFactory<!-- 配置sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 引⽤数据源组件 --><property name="dataSource" ref="dataSource"/><!-- 引⽤mybatis配置⽂件中的配置 --><property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 配置SQL映射⽂件信息 --><property name="mapperLocations"><list><value>classpath:cn/dao/**/*.xml</value></list></property></bean> 其他配置 <!-- 配置SQLsessionTemplate --><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/></bean><!-- 配置dao组件并注⼊SQLsession session为实现类中的属性 class中的路径为所需要使⽤接⼝的实现类路径--><bean id="workinggMapper" class="cn.dao.impl.WorkinggMapperImpl"><property name="session" ref="sqlSessionTemplate"/></bean><!-- 配置业务bean并且注⼊ wM为业务bean中的属性 class中的路径为所需要使⽤接⼝的业务实现bean路径 --><bean id="workinggService" class="cn.service.impl.WorkinggServiceImpl"><property name="wM" ref="workinggMapper"/></bean>1. 测试1. 测试类代码如下public class Test {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");WorkinggService cs = (WorkinggServiceImpl)ctx.getBean("workinggService");List<Workingg> cList = cs.allWorking();for (Workingg w : cList) {System.out.println(w.getTitle());}}}⾃动⽣成映射器实现类1. 其实还有另外⼀种配置⽅法,因为上⾯的配置⽅法如果我换⼀个接⼝,那么⼜要修改配置⽂件那么有没有好点的⽅法呢 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- basePackage属性指定了扫描的基准包,MapperScannerConfigurer将递归扫描基准包(包括下⾯的⼦包)下所有接⼝如果他们在sql映射⽂件中定义过,则将他们动态注册为mapperFactoryBean,这样既可批量产⽣映射器实现类--><property name="basePackage" value="cn.dao"/></bean>通过上⾯这⼀步就可以让它⾃动⽣成映射器实现类,其中basePackage属性中可以包含多个包名,多个包名直接使⽤逗号或分号隔开2. 注意如果sqlSessionFactory配置了多个那么⾃动装配则⽆法进⾏,需要指定 sqlSessionFactory如下<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- basePackage属性指定了扫描的基准包,MapperScannerConfigurer将递归扫描基准包(包括下⾯的⼦包)下所有接⼝如果他们在sql映射⽂件中定义过,则将他们动态注册为mapperFactoryBean,这样既可批量产⽣映射器实现类--><property name="basePackage" value="cn.dao"/><!-- 注意此属性时name,⽽不是sqlSessionFactory,为其赋值使⽤的是 value --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>如上则可以⾃动⽣成映射器实现类<!-- 定义业务bean --><bean id="workinggService" class="cn.service.impl.WorkinggServiceImpl"><property name="wM" ref="workinggMapper"/></bean>⾃动⽣成映射器实现类的名字默认为,接⼝名第⼀个单词⼩写后⾯的不变如接⼝名:WorkinggMapper 默认名称:workinggMapper3. 注意:SQL映射⽂件中必须遵循以下命名规则1. 映射命名空间和映射器接⼝的名称相同2. 映射元素的id和映射器接⼝的⽅法相同3.使⽤注解定义业务bean 通过上⾯的改造,可不⽤⼿动⽣成映射器实现类了但是去依然要写业务bean,这时候就有了注解当需要某种业务bean时执⾏添加注解即可 如下吧之前⽣成业务bean的代码替换成 <!-- ⾃动扫描cn下⾯所包(包括⼦包)下⾯所有类 --><context:component-scan base-package="cn"/>再在业务bean中写两个注释即可如下业务bean继承SqlSessionDaoSupport类 修改之前的业务bean如下package cn.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Service;import cn.dao.WorkinggMapper;import cn.pojo.Workingg;import cn.service.WorkinggService;//加上这⾏注释扫描的时候则会⾃动⽣成名为workinggService的业务bean@Service("workinggService")public class WorkinggServiceImpl implements WorkinggService {//扫描时会⾃动注⼊ WorkinggMapper@ResourceWorkinggMapper wM;public WorkinggMapper getwM() {return wM;}public void setwM(WorkinggMapper wM) {this.wM = wM;}@Overridepublic int screenTitle(String title) {return wM.screenTitle(title);}@Overridepublic Workingg screenId(Integer id) {// TODO Auto-generated method stubreturn wM.screenId(id);}@Overridepublic List<Workingg> allWorking() {// TODO Auto-generated method stubreturn wM.allWorking();}@Overridepublic int count() {// TODO Auto-generated method stubreturn wM.count();}@Overridepublic int addWorking(Workingg workingg) {// TODO Auto-generated method stubreturn wM.addWorking(workingg);}@Overridepublic int del(Integer id) {// TODO Auto-generated method stubreturn wM.del(id);}@Overridepublic int modify(Workingg workingg) {// TODO Auto-generated method stubreturn wM.modify(workingg);}public static WorkinggService getWorkinggService() {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");WorkinggService wService = (WorkinggServiceImpl)ctx.getBean("WorkinggService");return wService;}}继承之后dao的实现类就没什么⽤了,因为业务类以及不依赖dao的实现类了,继承后代码如下package cn.service.impl;import java.util.List;import org.mybatis.spring.support.SqlSessionDaoSupport;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Service;import cn.dao.WorkinggMapper;import cn.pojo.Workingg;import cn.service.WorkinggService;public class WorkinggServiceImpl extends SqlSessionDaoSupport implements WorkinggService {@Overridepublic int screenTitle(String title) {return super.getSqlSession().getMapper(WorkinggMapper.class).screenTitle(title);}@Overridepublic Workingg screenId(Integer id) {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).screenId(id);}@Overridepublic List<Workingg> allWorking() {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).allWorking();}@Overridepublic int count() {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).count();}@Overridepublic int addWorking(Workingg workingg) {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).addWorking(workingg);}@Overridepublic int del(Integer id) {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).del(id);}@Overridepublic int modify(Workingg workingg) {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).modify(workingg);}public static WorkinggService getWorkinggService() {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");WorkinggService wService = (WorkinggServiceImpl)ctx.getBean("WorkinggService");return wService;}}修改前的配置⽂件有映射,继承之后不需要了把这⼀段替换成了这段,测试类代码不变就好了<bean id="workinggService" class="cn.service.impl.WorkinggServiceImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean>不清楚的可以去⽹盘下载这个项⽬跑下。

IDEA整合Mybatis+Struts2+Spring(一)--新建项目

IDEA整合Mybatis+Struts2+Spring(一)--新建项目

IDEA整合Mybatis+Struts2+Spring(⼀)--新建项⽬1、IDEA新建Maven项⽬:(1)依次点击File->New->Project,弹出如下对话框:(2)在弹出的New Project页⾯上,①选择Maven,②勾选Create from artifactype,③选择maven-archetype-webapp,点击Next,如下图:(3)GroupID:JAVA的包的结构,是main⽬录⾥java的⽬录结构。

ArtifactID:项⽬的名称(就是项⽬的唯⼀的标识符),点击Next,如下图:(4)①User settings file:maven的安装路径,②Local repository:maven管理的jar包保存路径,③点击+号,弹出如下对话框:(5)Name:archetypeCatalog表⽰插件使⽤的archetype元数据,Value:internal表⽰仅使⽤内部元数据。

不加这个参数时默认为remote,local,即中央仓库archetype元数据,由于中央仓库的archetype太多了,所以导致很慢。

点击OK,在点击Next。

(6)填写project name和module name,并选择项⽬所在的路径。

点击Finish,创建完成。

注意上图中的两个红框,当⽬录结构同上图所⽰,并且控制台输出,Maven execution finished。

表⽰创建成功。

(7)点击IDEA右上⾓Project structure 图标:(8)弹出Project structure页⾯后,①点击Facets,②点击加号,③选择Web(9)在弹出的对话框选择刚刚创建的项⽬,然后点击OK。

(10)Facets⽬录结构变成下图所⽰。

Deployment Descriptors:web.xml表⽰⽂件所在的路径⼀定要指对地⽅。

Web Resource DIrectory:设置web资源所在的根⽬录。

spring整合mybatis中数据源的几种配置方式(总结篇)

spring整合mybatis中数据源的几种配置方式(总结篇)

spring整合mybatis中数据源的⼏种配置⽅式(总结篇)因为spring 整合mybatis的过程中,有好⼏种整合⽅式,尤其是数据源那块,经常看到不⼀样的配置⽅式,总感觉有点乱,所以今天有空总结下。

⼀、采⽤org.mybatis.spring.mapper.MapperScannerConfigurer 其实逆向⼯程也是这种⽅式 1、数据源配配置⽂件 2、DAO⽂件package com.jdd.mapper;import com.jdd.pojo.Employee;import java.util.List;public interface EmployeeMapper {public Employee getEmployeeById(int id);public List<Employee> findAllEmployees();} 3、Mapper.xml ⽂件 <?xml version="." encoding="UTF-" ?><!DOCTYPE mapper PUBLIC "-////DTD Mapper .//EN""/dtd/mybatis--mapper.dtd"><mapper namespace="com.jdd.mapper.EmployeeMapper"><select id="getEmployeeById" parameterType="int" resultType="com.jdd.pojo.Employee"><![CDATA[select * from employee where id = #{id};]]></select><select id="findAllEmployees" resultType="com.jdd.pojo.Employee"><![CDATA[select * from employee where status='';]]></select></mapper> 这样在service类⾥就可以直接注⼊dao接⼝了package com.jdd.service.impl;import com.jdd.mapper.EmployeeMapper;import com.jdd.pojo.Employee;import com.jdd.service.EmployeeService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Service("employeeService")public class EmployeeServiceImpl implements EmployeeService{@Autowiredprivate EmployeeMapper employeeMapper;@Overridepublic Employee getEmployeeById(int id) {return employeeMapper.getEmployeeById(id);}@Overridepublic List<Employee> findAllEmployees() {return employeeMapper.findAllEmployees();}} ⼆、采⽤抽象类org.mybatis.spring.support.SqlSessionDaoSupport,给它注⼊ sqlSessionFactory的⽅式 1、数据源配置⽂件 <?xml version="." encoding="UTF-"?><beans xmlns="/schema/beans"xmlns:context="/schema/context" xmlns:p="/schema/p"xmlns:aop="/schema/aop" xmlns:tx="/schema/tx"xmlns:xsi="//XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-..xsd/schema/context /schema/context/spring-context-..xsd/schema/aop /schema/aop/spring-aop-..xsd /schema/tx /schema/tx/spring-tx-..xsd /schema/util /schema/util/spring-util-..xsd"><!-- 加载配置⽂件 --><context:property-placeholder location="classpath:resource/*.properties" /><!-- 数据库连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${ername}" /><property name="password" value="${jdbc.password}" /><property name="maxActive" value="" /><property name="minIdle" value="" /></bean><!-- sqlsessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property><property name="dataSource" ref="dataSource"></property><property name="mapperLocations" value="classpath:com/jdd/mapper/*.xml"></property></bean></beans> 2、baseDao类package com.jdd.dao;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.support.SqlSessionDaoSupport;import javax.annotation.Resource;public abstract class BaseDao extends SqlSessionDaoSupport {@Resourcepublic void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {super.setSqlSessionFactory(sqlSessionFactory);}} 3、接⼝ EmployeeDao.java 类package com.jdd.dao;import com.jdd.pojo.Employee;import java.util.List;public interface EmployeeDao {Employee getEmployeeById(int id);List<Employee> findAllEmployees();} 4、dao实现类 EmployeeDaoImplpackage com.jdd.dao.impl;import com.jdd.dao.BaseDao;import com.jdd.dao.EmployeeDao;import com.jdd.pojo.Employee;import org.springframework.stereotype.Repository;import java.util.List;@Repository("employeeDao")public class EmployeeDaoImpl extends BaseDao implements EmployeeDao {@Overridepublic Employee getEmployeeById(int id) {return this.getSqlSession().selectOne("com.jdd.dao.EmployeeDao.getEmployeeById", id);}@Overridepublic List<Employee> findAllEmployees() {return this.getSqlSession().selectList("com.jdd.dao.EmployeeDao.findAllEmployees");}} 5、这样就可以在service类⾥注⼊ employeeDao了 三、采⽤ org.mybatis.spring.SqlSessionTemplate 模板类 1、数据源⽂件<?xml version="." encoding="UTF-"?><beans xmlns="/schema/beans"xmlns:context="/schema/context" xmlns:p="/schema/p"xmlns:aop="/schema/aop" xmlns:tx="/schema/tx"xmlns:xsi="//XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-..xsd/schema/context /schema/context/spring-context-..xsd/schema/aop /schema/aop/spring-aop-..xsd /schema/tx /schema/tx/spring-tx-..xsd /schema/util /schema/util/spring-util-..xsd"><!-- 加载配置⽂件 --><context:property-placeholder location="classpath:resource/*.properties" /><!-- 数据库连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${ername}" /><property name="password" value="${jdbc.password}" /><property name="maxActive" value="" /><property name="minIdle" value="" /></bean><!-- sqlsessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property><property name="dataSource" ref="dataSource"></property><property name="mapperLocations" value="classpath:com/jdd/mapper/*.xml"></property></bean><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="" ref="sqlSessionFactory"/></bean></beans> 2、 basedao.java 类package com.jdd.dao;import org.mybatis.spring.SqlSessionTemplate;import javax.annotation.Resource;public abstract class BaseDao {public SqlSessionTemplate sqlSessionTemplate;@Resourcepublic void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {this.sqlSessionTemplate = sqlSessionTemplate;}} 3、接⼝ EmployeeDao.java 类 package com.jdd.dao;import com.jdd.pojo.Employee;import java.util.List;public interface EmployeeDao {Employee getEmployeeById(int id);List<Employee> findAllEmployees();} 4、dao实现类 EmployeeDaoImplpackage com.jdd.dao.impl;import com.jdd.dao.BaseDao;import com.jdd.dao.EmployeeDao;import com.jdd.pojo.Employee;import org.springframework.stereotype.Repository;import java.util.List;@Repository("employeeDao")public class EmployeeDaoImpl extends BaseDao implements EmployeeDao {@Overridepublic Employee getEmployeeById(int id) {return sqlSessionTemplate.selectOne("com.jdd.dao.EmployeeDao.getEmployeeById", id);}@Overridepublic List<Employee> findAllEmployees() {return sqlSessionTemplate.selectList("com.jdd.dao.EmployeeDao.findAllEmployees");}} 5、同样现在也可以在service类⾥直接注⼊ employeeDao使⽤了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mybatis+strut2+spring 整合总结最近闲来无事看了些mybatis 相关的知识。

mybatis 用起来还是很灵活的。

看到网上也有许多这样的例子,但有的是不全的。

下面我对mybatis+strut2+spring 学习过程做一下总结(简单的环境搭建)。

(@OnePage )因为本人是初次写这样的文章,也是初学 有些不对的或写错的请指正。

也请多多包含。

一、首先在数据库中建一个user 表 。

显示简单的基本信息就行。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`userName` varchar(11) DEFAULT NULL,`userAge` int(3) DEFAULT NULL,`userAddress` varchar(200) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8; <br>-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'zhangsan1', '28', 'nihjaome'); INSERT INTO `user` VALUES ('2', 'tiana ', '20', '非洲'); INSERT INTO `user` VALUES ('3', 'arear', '20', 'mei 洲');二、建一个web 项目。

1.配置web 配置文件<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><!-- Spring监听 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener -class></listener><context-param><param-name>contextConfigLocation</param-name><!-- 引入spring的配置文件如果有多个就用逗号分隔开--><param-value>classpath:applicationContext-core.xml</param-value> </context-param><!-- Struts2拦截器 --><filter><filter-name>Struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecute Filter</filter-class></filter><filter-mapping><filter-name>Struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>/index.jsp</welcome-file></welcome-file-list></web-app>2、配置spring application-code.xml文件这里有两种配置可以直接把数据库的链接就写到里面也可以配置到config.xml里面当把数据连接写在spring配置文件里时 config.xml可以不配置看情况来写。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd/schema/aop/schema/aop/spring-aop-3.0.xsd"><!-- 数据源属性配置文件 --><!-- <bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderCo nfigurer"><property name="location"value="classpath:com/databaseconfig/database.properties"/></bean>--><!-- 引入数据库配置信息的文件这里我就不贴了--> <context:property-placeholderlocation="classpath:database.properties"/><!--数据源 --><bean id="dataSource"class="boPooledDataSource"><property name="driverClass" value="${driverClassName}"/><property name="jdbcUrl" value="${url}"/><property name="user" value="${username}"/><property name="password" value="${password}"/><!--这里是一些数据库和缓存池的一些配置<property name="autoCommitOnClose" value="true"/><property name="checkoutTimeout"value="${cpool.checkoutTimeout}"/><property name="initialPoolSize"value="${cpool.minPoolSize}"/><property name="minPoolSize" value="${cpool.minPoolSize}"/> <property name="maxPoolSize" value="${cpool.maxPoolSize}"/> <property name="maxIdleTime" value="${cpool.maxIdleTime}"/> <property name="acquireIncrement"value="${cpool.acquireIncrement}"/><property name="maxIdleTimeExcessConnections"value="${cpool.maxIdleTimeExcessConnections}"/>--></bean><!-- 数据连接管理 --><!-- ================================事务相关控制================================================= --> <bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManag er"><property name="dataSource" ref="dataSource"/></bean><tx:advice id="TxAdvice" transaction-manager="transactionManager"> <tx:attributes><tx:method name="delete*" propagation="REQUIRED" read-only="false"rollback-for="ng.Exception" no-rollback-for="ng.RuntimeException"/><tx:method name="insert*" propagation="REQUIRED" read-only="false"rollback-for="ng.RuntimeException" /><tx:method name="update*" propagation="REQUIRED" read-only="false"rollback-for="ng.Exception"/><tx:method name="find*" propagation="SUPPORTS"/><tx:method name="get*" propagation="SUPPORTS"/><tx:method name="select*" propagation="SUPPORTS"/><tx:method name="*" propagation="REQUIRED"/></tx:attributes></tx:advice><aop:config><aop:pointcut id="AopTran" expression="execution (*com.hotel.dao..*.*(..))"/><!--把事务控制在层--><aop:advisor pointcut-ref="AopTran" advice-ref="TxAdvice"/></aop:config><!-- myBatis文件 --><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 引入config配置文件如果数据连接在该配置文件里千万不要忘记--><property name="configLocation" value="classpath:myBatis-config.xml"/><property name="dataSource" ref="dataSource"/></bean><!-- ibatis2.x 配置<bean id="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><property name="configLocation" value="classpath:myBatis-config.xml"/><property name="dataSource" ref="dataSource"/></bean>--><!--<bean id="mapDao"class="org.mybatis.spring.MapperFactoryBean">这里是接口,不是接口实现类了<property name="mapperInterface"value="com.ssm.iface.IUserDao"/><property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>--><!-- 自动扫描接口--><!-- 这里需要注意三点:第一,无需指定引用SqlSessionFactory,因为MapperScannerConfigurer在创建映射器时会通过自动装配的方式来引用。

相关文档
最新文档