- 浏览: 123241 次
- 性别:
- 来自: 成都
文章分类
转自:http://www.cnblogs.com/gym_sky/archive/2011/04/21/2024195.html
ibatis+spring+struts整合应用实例
二、数据库设计.
三、POJO类.
四、pojo类配置文件编写
五、ibatis主配置文件编写【主配置文件只剩下sqlMap了】
六、dao接口和接口实现
七、service接口和接口实现
八、struts action实现及struts-config.xml配置
九、spring配置文件的内容【牵扯到ibatis和struts的整合】
十、测试
一、新建工程,添加ibatis、spring和struts的jars;
二、数据库设计.
mysql数据库:
- use ibatis;
- drop table if exists user;
- create table if not exists user(
- ID tinyint primary key auto_increment,
- LOGIN_NAME varchar(10) not null,
- PASS_WORD varchar(15) not null,
- QX varchar(10) default 'guest' not null ,
- MEMO text
- )
- type=innodb
- comment="user info";
- insert into user(LOGIN_NAME,PASS_WORD,QX) values('leh','888','admin');
- insert into user(LOGIN_NAME,PASS_WORD) values('lek','888');
- commit;
数据源的配置
1)、配置文件db.properties (位置:resources/properties/db.properties,这里resources和src是一类文件)
- driver=com.mysql.jdbc.Driver
- url=jdbc\:mysql\://localhost\:3306/ibatis
- username=root
- password=54321
2)、注册数据源到spring
- !-- spring load dataSource configuration property file -->
- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>properties/database.properties</value>
- </list>
- </property>
- </bean>
- <!-- dataSource -->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
- <property name="driverClassName" value="${driver}" />
- <property name="url" value="${url}" />
- <property name="username" value="${username}" />
- <property name="password" value="${password}" />
- </bean>
三、POJO类.
本例是User实例类:
- package com.leadtone.ibatis.domain;
- import java.io.Serializable;
- public class User implements Serializable{
- private int id;
- private String name;
- private String password;
- private String qx;
- private String memo;
- public int getId() {
- return id;
- }
- /**
- *setter和getter方法省略
- */
四、pojo类配置文件编写
本例是User.xml:(位置:com.leadtone.sqlmap.User.xml)
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-2.dtd">
- <sqlMap namespace="User">
- <typeAlias alias="user" type="com.leadtone.ibatis.domain.User"/>
- <resultMap class="user" id="UserResult">
- <result property="id" column="ID"/>
- <result property="name" column="LOGIN_NAME"/>
- <result property="password" column="PASS_WORD"/>
- <result property="qx" column="QX"/>
- <result property="memo" column="MEMO"/>
- </resultMap>
- <!-- query all Users -->
- <select id="selectAllUsers" resultMap="UserResult">
- select * from user
- </select>
- <!-- query user by id -->
- <select id="selectUserById" parameterClass="int" resultMap="UserResult">
- select ID,LOGIN_NAME,PASS_WORD,QX,MEMO from user where ID=#id#
- </select>
- <!-- query user by user -->
- <select id="selectUserByUser2" parameterClass="map" resultMap="UserResult">
- select ID,LOGIN_NAME,PASS_WORD,QX,MEMO
- from user
- <dynamic prepend="where">
- <isNotEmpty prepend="and" property="name">
- LOGIN_NAME=#name#
- </isNotEmpty>
- <isNotEmpty prepend="and" property="password">
- PASS_WORD=#password#
- </isNotEmpty>
- </dynamic>
- </select>
- <select id="selectUserByUser" parameterClass="user" resultMap="UserResult">
- select ID,LOGIN_NAME,PASS_WORD,QX,MEMO
- from user
- <dynamic prepend="where">
- <isNotEmpty prepend="and" property="name">
- LOGIN_NAME=#name#
- </isNotEmpty>
- <isNotEmpty prepend="and" property="password">
- PASS_WORD=#password#
- </isNotEmpty>
- </dynamic>
- </select>
- <select id="selectUsersByName" parameterClass="String" resultMap="UserResult">
- select ID,LOGIN_NAME,PASS_WORD,QX,MEMO
- from user
- <dynamic prepend="where">
- <isNotEmpty prepend="and" property="value">
- sname like '%$value$%'
- </isNotEmpty>
- </dynamic>
- </select>
- <!--
- <insert id="addUser" parameterClass="User">
- insert into user(LOGIN_NAME,PASS_WORD,QX,MEMO )
- values(#name#,#birth#,#score#)
- <selectKey keyProperty="id" resultClass="int">
- select last_insert_id()
- </selectKey>
- </insert>
- <!-- 注意这里的keyProperty="id" 中的id就是User中的id属性,resultClass就是查询的的返回值 -->
- -->
- <update id="updateUser" parameterClass="User">
- update user set LOGIN_NAME=#name#,PASS_WORD=#password#,QX=#qx#,memo=#memo# where ID=#id#
- </update>
- <delete id="deleteUser" parameterClass="int">
- delete from user where ID=#id#
- </delete>
- </sqlMap>
【补充:】动态sql:
一般来说,拼接动态sql是在查询时,指定多个查询条件的情况下用的,所以用到parameterClass= (map或具体类),
但对于传递过来的参数就一个时,若如下代码就会出错:
- <select id="selectUserById" parameterClass="int" resultMap="UserResult">
- select sid,sname,smajor,sbirth,score from users
- <dynamic prepend="where">
- <isNotEmpty prepend="and" property="id">
- sid=#id#
- </isNotEmpty>
- </dynamic>
- </select>
会报错误如下:There is no READABLE property named 'id' in class 'java.lang.Integer'
因为你无缘故用了一个莫名其妙的property="id",id对ibatis来说不认识。
这时的解决办法有两种,一个是这里的property="id" 中的id用value来代替,所以下面的sid=#value#,这个value是ibatis内部指定个变量;另一个方法是直接把property="id"删除,不用property这个属性了。
五、ibatis主配置文件编写【主配置文件只剩下sqlMap了,事务和数据源都交给spring进行配置和管理】
本例为sql-map-config.xml:(位置:)
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMapConfig
- PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
- "<a href="http://ibatis.apache.org/dtd/sql-map-config-2.dtd">http://ibatis.apache.org/dtd/sql-map-config-2.dtd</a>">
- <sqlMapConfig>
- <sqlMap resource="com/leadtone/ibatis/sqlmap/User.xml"/>
- <!--
- <sqlMap resource="com/leadtone/ibatis/sqlmap/User1.xml"/>
- <sqlMap resource="com/leadtone/ibatis/sqlmap/User2.xml"/>
- <sqlMap resource="com/leadtone/ibatis/sqlmap/Usern.xml"/>
- -->
- </sqlMapConfig>
六、dao接口和接口实现
1)、本例为UserDao:
- package com.leadtone.ibatis.dao;
- import java.util.List;
- import com.leadtone.ibatis.domain.User;
- public interface IUserDao {
- public List<User> queryAllUsers();
- public User queryUserById(int id);
- public User queryUserByUser(User user);
- public List<User> queryUserByName(String name);
- public void addUser(User user);
- public void addUserBySequence(User user);
- public void updateUser(User user);
- public void deleteUser(int id);
- }
2)、实现类UserDaoImpl:
- package com.leadtone.ibatis.dao.ibatis;
- import java.util.List;
- import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
- import com.leadtone.ibatis.dao.IUserDao;
- import com.leadtone.ibatis.domain.User;
- public class UserDaoImpl extends SqlMapClientDaoSupport implements IUserDao {
- //注意这里的SqlMapClient接口的声明和下面的static静态代码都不需要了,
- // 因为这里继承了spring提供的ibatis模板template类SqlMapClientDaoSupport,不是用原生的SqlMapClient
- //private static SqlMapClient sqlMapClient=null;
- /*
- static{
- Reader reader=null;
- try {
- reader=Resources.getResourceAsReader("com/leadtone/ibatis/sqlmap/SqlMapConfig.xml");
- sqlMapClient=SqlMapClientBuilder.buildSqlMapClient(reader);
- reader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- */
- public void addUser(User user) {
- getSqlMapClientTemplate().insert("addUser", user);
- }
- public User queryUserByUser(User user) {
- System.out.println("---UserDaoImpl---");
- return (User) this.getSqlMapClientTemplate().queryForObject("selectUserByUser", user);
- }
- /*
- * 这里主要演示一个模拟用户登录系统验证的操作,主要用了queryUserByUser(User user)方法
- */
- }
3)、在spring配置文件中配置这个bean
- <!--sqlMapClient -->
- <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <property name="configLocation" value="sqlmap/sql-map-config.xml"/>
- <property name="dataSource" ref="dataSource" />
- </bean>
- <!-- validate loginUser -->
- <!-- dao -->
- <bean id="userDao" class="com.leadtone.ibatis.dao.ibatis.UserDaoImpl">
- <property name="sqlMapClient" ref="<span style="color: #000000;">sqlMapClient </span>"></property>
- </bean>
七、service接口和接口实现
1)IUserLoginService接口
- package com.leadtone.ibatis.service;
- import com.leadtone.ibatis.domain.User;
- public interface IUserLoginService {
- public boolean isLoginUser(User user);
- }
2)UserLoginSerivceImpl实现类
- package com.leadtone.ibatis.service.impl;
- import com.leadtone.ibatis.dao.IUserDao;
- import com.leadtone.ibatis.domain.User;
- import com.leadtone.ibatis.service.IUserLoginService;
- public class UserLoginServiceImpl implements IUserLoginService {
- private IUserDao userDao;
- public IUserDao getUserDao() {
- return userDao;
- }
- public void setUserDao(IUserDao userDao) {
- this.userDao = userDao;
- }
- public boolean isLoginUser(User user) {
- return null!=userDao.queryUserByUser(user)?true:false;
- }
- }
3)在spring中注册这个bean
- <!-- service -->
- <bean id="userLoginService" class="com.leadtone.ibatis.service.impl.UserLoginServiceImpl">
- <property name="userDao" ref="userDao"></property>
- </bean>
八、struts action实现及struts-config.xml配置(牵扯到struts和spring的整合)
1)action:
- package com.leadtone.web.struts.action;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts.action.Action;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import com.leadtone.ibatis.domain.User;
- import com.leadtone.ibatis.service.IUserLoginService;
- import com.leadtone.web.struts.form.LoginForm;
- public class LoginAction extends Action {
- private IUserLoginService userLoginService;
- public IUserLoginService getUserLoginService() {
- return userLoginService;
- }
- public void setUserLoginService(IUserLoginService userLoginService) {
- this.userLoginService = userLoginService;
- }
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- LoginForm loginForm = (LoginForm) form;
- String name=loginForm.getUsername();
- String password=loginForm.getPassword();
- User user=new User();
- user.setName(name);
- user.setPassword(password);
- boolean isLogin=false;
- isLogin = userLoginService.isLoginUser(user);
- System.out.println(isLogin);
- if(isLogin){
- request.setAttribute("username", name);
- return mapping.findForward("success");
- }
- else
- return mapping.findForward("failure");
- }
- }
2)actionForm:
- public class LoginForm extends ActionForm {
- private String username;
- private String password;
- private String grade;
- public ActionErrors validate(ActionMapping mapping,
- HttpServletRequest request) {
- return null;
- }
- public void reset(ActionMapping mapping, HttpServletRequest request) {
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getGrade() {
- return grade;
- }
- public void setGrade(String grade) {
- this.grade = grade;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
3)xml:
- <struts-config>
- <data-sources />
- <form-beans >
- <form-bean name="loginForm" type="com.leadtone.web.struts.form.LoginForm" />
- </form-beans>
- <global-exceptions />
- <global-forwards />
- <action-mappings >
- <action
- attribute="loginForm"
- input="/login.jsp"
- name="loginForm"
- path="/login"
- scope="request"
- type="org.springframework.web.struts.DelegatingActionProxy">
- <forward name="failure" path="/failure.jsp" />
- <forward name="success" path="/succ.jsp" />
- </action>
- </action-mappings>
- <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>
- <message-resources parameter="com.leadtone.web.struts.ApplicationResources" />
- <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation" value="classpath:applicationContext.xml" />
- </plug-in>
- </struts-config>
4)页面:
login.jsp
- <body >
- <center>
- <html:form action="${Pagecontext.request.contextPath}/login" method="post">
- <table border="1px" cellspacing="1px" cellpadding="1px" >
- <tr>
- <td>username : </td>
- <td><html:text property="username"/></td>
- <td><html:errors property="username"/></td>
- </tr>
- <tr>
- <td>password : </td>
- <td><html:password property="password"/></td>
- <td><html:errors property="password"/></td>
- </tr>
- <tr>
- <td>grade: </td>
- <td> <html:select property="grade">
- <html:option value="guest">guest</html:option>
- <html:option value="admin">admin</html:option>
- </html:select>
- </td>
- <td><html:errors property="grade"/></td>
- </tr>
- <tr >
- <td colspan="3" valign="middle" align="center"><html:submit/> <html:cancel/></td>
- </tr>
- </table>
- </html:form>
- </center>
- </body>
succ.jsp
falure.jsp
5)web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <servlet>
- <servlet-name>action</servlet-name>
- <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
- <init-param>
- <param-name>config</param-name>
- <param-value>/WEB-INF/struts-config.xml</param-value>
- </init-param>
- <init-param>
- <param-name>debug</param-name>
- <param-value>3</param-value>
- </init-param>
- <init-param>
- <param-name>detail</param-name>
- <param-value>3</param-value>
- </init-param>
- <load-on-startup>0</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>action</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>login.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
九、spring配置文件的内容【牵扯到ibatis和struts的整合】
- <!-- action -->
- <bean name="/login" class="com.leadtone.web.struts.action.LoginAction" abstract="false"
- lazy-init="default" autowire="default" dependency-check="default">
- <property name="userLoginService" ref="userLoginService"></property>
- </bean>
十、测试
这里的测试 包括单元测试。例如对dao层、service层、action层编写完成后都要进行junit4单元测试(Jmock或easyMock等)测试,这里就不添加了。
发表评论
-
eclipselink-DDL Schema Generation的四种方式
2016-10-12 00:17 589persistence.xml文件配置: < ... -
Java开发中的23种设计模式
2016-09-28 00:40 569设计模式(Design Patterns) ... -
ManyToOne 双向一对多关系
2016-08-05 01:38 525双向一对多关系,一是关系维护端(owner side),多是 ... -
理解RESTful架构
2016-06-22 00:33 578原文:http://www.ruanyifen ... -
foreach循环
2016-05-31 22:23 495这种有冒号的for循环叫做foreach循环,foreach语 ... -
java几种常用设计模式简单示例
2016-05-19 23:02 538PART A:前言 平常我们都在敲代码,为了要实现一些我们 ... -
iText PdfPCell内容水平垂直居中
2016-01-14 00:13 11909先调用Cell.setUseAscender(true);再调 ... -
深入理解 hash 函数、HashMap
2015-12-15 00:52 651http://www.2cto.com/kf/201409/3 ... -
iText的showTextAligned方法
2015-12-06 16:47 5538java使用itext的showTextAligned方法给 ... -
iText PdfTemplate的使用
2015-12-06 02:32 1439在开发系统时,需要在PDF上写入总页数。于是在网上搜索到 ... -
iText表格 分页
2015-11-30 23:31 5247前言 在上一节中,通过listing 4.16产生的表格拥 ... -
iText生成PDF文档部分页面横置
2015-11-27 02:02 5570整个PDF文档页面设置 Rectangle rect ... -
iText生成PDF格式设置
2015-11-27 00:52 2552import java.io.ByteArrayOutputS ... -
Spring中的IOC和AOP
2015-11-19 00:47 522IOC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要 ... -
【转载】纯Java获得本地MAC地址
2015-07-29 21:18 6071 import java.net.*; 2 3 clas ... -
Java笔试题
2014-05-25 21:53 5781. float型float f=3.4是否正 ... -
单例模式的常见应用场景
2014-05-25 21:30 881单例模式(Singleton)也叫单态模式,是设计模式中最 ... -
深入Java单例模式
2014-05-25 21:29 588在GoF的23种设计模式中,单例模式是比较简单的一种。然而 ... -
java 异常捕捉 ( try catch finally )
2014-05-25 21:15 589前言:java 中的异常处理机制你真的理解了吗?掌握了吗?c ... -
多线程的实现
2014-05-15 02:11 529http://www.cnblogs.com/rollenho ...
相关推荐
本实例关注的是“ibatis+Spring+struts2”的整合,这是一个经典的Java Web开发组合,用于实现数据访问、业务逻辑控制和用户界面交互。下面我们将深入探讨这三个组件及其整合的关键知识点。 1. **iBATIS**:iBATIS...
在Java Web开发中,"ibatis+spring+struts2"是一种常见的技术栈组合,用于构建功能丰富的、灵活的企业级应用程序。这个整合开发例子旨在帮助开发者理解和掌握这三种技术的协同工作方式。以下是对这三个核心组件及其...
在整合 iBatis 和 Struts2 的过程中,Spring 可以作为容器管理它们的生命周期,实现服务的解耦和统一管理。 3. **Struts2**: Struts2 是一个基于MVC设计模式的Web应用框架,它继承了Struts1的优点并吸收了其他...
Struts1(2)+Spring+Ibatis+jQuery是一个经典的Java Web开发框架组合,它们各自在Web应用的不同层面上发挥着关键作用。这个整合实例旨在展示如何将这四个技术有效地结合在一起,创建一个高效、可维护的Web应用程序...
struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+...
struts2 + spring + ibatis 实例 struts2 + spring + ibatis 实例 struts2 + spring + ibatis 实例 struts2 + spring + ibatis 实例 struts2 + spring + ibatis 实例
Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...
Struts2、iBatis和Spring是Java Web开发中非常重要的三个框架,它们共同构建了一个高效、灵活的应用架构。这个实例结合了这三个框架,旨在帮助开发者理解如何将它们整合在一起,提升开发效率。 Struts2作为MVC...
Struts2、iBatis和Spring的整合是一个常见的企业级应用框架组合,它们各自负责不同的职责,协同工作以实现高效且灵活的Java Web应用程序。以下将详细解释这些知识点: 1. **Struts2**:Struts2是一个基于MVC设计...
Struts、Spring、Ibatis和Mysql是Java Web开发中常用的四大框架,它们组合在一起可以构建出高效、灵活的企业级应用程序。本示例是专为新手设计的一个整合教程,通过详细注解帮助初学者理解这四个组件如何协同工作。 ...
struts spring ibatis mysql 分页,增删改查,以及导出excle
Struts、iBATIS和Spring是Java开发中常用的三大框架,它们各自负责不同的职责,而将它们整合在一起,可以构建出高效、灵活的企业级应用程序。本文将深入探讨这三者的核心概念、整合过程以及实际应用。 **Struts** ...
Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、业务逻辑层和服务数据访问层。本文将详细介绍这三个框架如何整合,以及在实际项目中如何运用。 首先,Struts2作为表现...
这个"struts1+ibatis+Spring demo"是一个示例项目,展示了如何将这三个框架集成到一起,实现一个完整的Web应用。 Struts1是Apache组织开发的一个开源MVC框架,它主要负责控制应用程序的流程,通过Action类处理用户...
Struts2、Spring和iBatis是Java Web开发中常用的三个开源框架,它们各自负责不同的职责,协同工作可以构建出高效、松耦合的Web应用。这个整合项目实例旨在展示如何将这三个框架集成到一起,以实现更强大的功能。 1....
总结来说,"struts2+spring+ibatis+oracle整合的登陆系统"是一个综合性的Web应用示例,它展示了如何利用Struts2处理用户交互,Spring管理依赖和事务,iBatis执行数据库操作,以及Oracle存储数据。这样的整合方案为...
Struts+spring+ibatsi框架整合实例
Struts2+ibatis+spring 整合开发是企业级Java应用中常见的技术栈组合,这种架构可以有效地实现MVC模式,提高代码的可维护性和可扩展性。以下是对这个整合开发的详细解释: 1. **Struts2**: Struts2是一个基于MVC...
综上所述,这个实例展示了如何整合Struts2、Spring、iBatis和Oracle来构建一个完整的Web应用,实现了动态分页搜索和附件上传功能。这种架构具有良好的可扩展性和可维护性,适用于各种中大型企业级项目。开发者可以...