ITPub博客

首页 > 应用开发 > Java > ibatis+spring+struts整合应用实例

ibatis+spring+struts整合应用实例

Java 作者:dawn009 时间:2014-06-12 23:15:51 0 删除 编辑
步骤:
一、新建工程,添加ibatis、spring和struts的jars; 
二、数据库设计. 
三、POJO类. 
四、pojo类配置文件编写 
五、ibatis主配置文件编写【主配置文件只剩下sqlMap了】 
六、dao接口和接口实现 
七、service接口和接口实现 
八、struts action实现及struts-config.xml配置 
九、spring配置文件的内容【牵扯到ibatis和struts的整合】 
十、测试

 

 

一、新建工程,添加ibatis、spring和struts的jars;

二、数据库设计.

      mysql数据库:

Sql代码  收藏代码
  1. use ibatis;  
  2. drop table if exists user;  
  3.   
  4. create table if not exists  user(  
  5.        ID tinyint primary key auto_increment,  
  6.        LOGIN_NAME varchar(10) not null,  
  7.        PASS_WORD varchar(15) not null,         
  8.        QX varchar(10) default 'guest' not null ,  
  9.        MEMO text                
  10.       )  
  11. type=innodb  
  12. comment="user info";  
  13.   
  14. insert into user(LOGIN_NAME,PASS_WORD,QX) values('leh','888','admin');  
  15. insert into user(LOGIN_NAME,PASS_WORD) values('lek','888');  
  16.   
  17. commit;  

 数据源的配置

1)、配置文件db.properties (位置:resources/properties/db.properties,这里resources和src是一类文件)

Xml代码  收藏代码
  1. driver=com.mysql.jdbc.Driver  
  2. url=jdbc\:mysql\://localhost\:3306/ibatis  
  3. username=root  
  4. password=54321  

 

2)、注册数据源到spring

Xml代码  收藏代码
  1. !-- spring load dataSource configuration property file -->  
  2. <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  3.         <property name="locations">  
  4.             <list>  
  5.                 <value>properties/database.propertiesvalue>  
  6.             list>  
  7.         property>  
  8.     bean>  
  9.       
  10. <!-- dataSource -->  
  11.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  12.         <property name="driverClassName" value="${driver}" />  
  13.         <property name="url" value="${url}" />  
  14.         <property name="username" value="${username}" />  
  15.         <property name="password" value="${password}" />  
  16.     bean>  

 

 

三、POJO类.

      本例是User实例类:

Java代码  收藏代码
  1. package com.leadtone.ibatis.domain;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class User implements Serializable{  
  6.       
  7.     private int id;  
  8.     private String name;  
  9.     private String password;  
  10.     private String qx;  
  11.     private String memo;  
  12.       
  13.     public int getId() {  
  14.         return id;  
  15.     }  
  16.                /** 
  17.      *setter和getter方法省略  
  18.            */  

  

四、pojo类配置文件编写

      本例是User.xml:(位置:com.leadtone.sqlmap.User.xml)

Xml代码  收藏代码
  1. xml version="1.0" encoding="UTF-8" ?>    
  2.     
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"           
  4.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">    
  5.     
  6. <sqlMap namespace="User">    
  7.     
  8.     <typeAlias alias="user" type="com.leadtone.ibatis.domain.User"/>    
  9.     
  10.     <resultMap class="user" id="UserResult">    
  11.         <result property="id" column="ID"/>        
  12.         <result property="name" column="LOGIN_NAME"/>      
  13.         <result property="password" column="PASS_WORD"/>       
  14.         <result property="qx" column="QX"/>        
  15.         <result property="memo" column="MEMO"/>        
  16.     resultMap>    
  17.          
  18.     <!-- query all Users -->    
  19.     <select id="selectAllUsers" resultMap="UserResult">    
  20.         select * from user     
  21.     select>    
  22.          
  23.     <!-- query user by id -->    
  24.     <select id="selectUserById" parameterClass="int" resultMap="UserResult">    
  25.         select ID,LOGIN_NAME,PASS_WORD,QX,MEMO from user where ID=#id#     
  26.     select>    
  27.          
  28.     <!-- query user by user -->    
  29.     <select id="selectUserByUser2" parameterClass="map" resultMap="UserResult">    
  30.         select ID,LOGIN_NAME,PASS_WORD,QX,MEMO   
  31.         from user   
  32.         <dynamic prepend="where">  
  33.             <isNotEmpty prepend="and" property="name">  
  34.                 LOGIN_NAME=#name#  
  35.             isNotEmpty>  
  36.             <isNotEmpty prepend="and" property="password">  
  37.                 PASS_WORD=#password#  
  38.             isNotEmpty>  
  39.         dynamic>  
  40.     select>    
  41.          
  42.          
  43.     <select id="selectUserByUser" parameterClass="user" resultMap="UserResult">    
  44.         select ID,LOGIN_NAME,PASS_WORD,QX,MEMO   
  45.         from user   
  46.         <dynamic prepend="where">  
  47.             <isNotEmpty prepend="and" property="name">  
  48.                 LOGIN_NAME=#name#  
  49.             isNotEmpty>  
  50.             <isNotEmpty prepend="and" property="password">  
  51.                 PASS_WORD=#password#  
  52.             isNotEmpty>  
  53.         dynamic>  
  54.     select>    
  55.          
  56.     <select id="selectUsersByName" parameterClass="String" resultMap="UserResult">    
  57.         select ID,LOGIN_NAME,PASS_WORD,QX,MEMO   
  58.         from user   
  59.          <dynamic prepend="where">  
  60.             <isNotEmpty prepend="and" property="value">  
  61.                 sname like '%$value$%'  
  62.             isNotEmpty>  
  63.         dynamic>  
  64.     select>    
  65.       
  66.     <!--       
  67.     <insert id="addUser" parameterClass="User">    
  68.         insert into user(LOGIN_NAME,PASS_WORD,QX,MEMO )   
  69.         values(#name#,#birth#,#score#)     
  70.         <selectKey keyProperty="id" resultClass="int">  
  71.              select last_insert_id()  
  72.         selectKey>  
  73.     insert>   
  74.      <!-- 注意这里的keyProperty="id" 中的id就是User中的id属性,resultClass就是查询的的返回值 -->  
  75.     -->    
  76.          
  77.     <update id="updateUser" parameterClass="User">    
  78.         update user set LOGIN_NAME=#name#,PASS_WORD=#password#,QX=#qx#,memo=#memo# where  ID=#id#     
  79.     update>    
  80.          
  81.     <delete id="deleteUser" parameterClass="int">    
  82.         delete from user where ID=#id#     
  83.     delete>    
  84.     
  85. sqlMap>   

  

【补充:】动态sql:

一般来说,拼接动态sql是在查询时,指定多个查询条件的情况下用的,所以用到parameterClass= (map或具体类),

但对于传递过来的参数就一个时,若如下代码就会出错:

Xml代码  收藏代码
  1. <select id="selectUserById" parameterClass="int"  resultMap="UserResult">  
  2.       select sid,sname,smajor,sbirth,score from users   
  3.                 <dynamic prepend="where">  
  4.         <isNotEmpty prepend="and" property="id">  
  5.         sid=#id#  
  6.         isNotEmpty>  
  7.     dynamic>  
  8. 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代码  收藏代码
  1. xml version="1.0" encoding="UTF-8" ?>    
  2.     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"           
  3.     "<a href="http://ibatis.apache.org/dtd/sql-map-config-2.dtd">http://ibatis.apache.org/dtd/sql-map-config-2.dtda>">    
  4. <sqlMapConfig>    
  5.      <sqlMap resource="com/leadtone/ibatis/sqlmap/User.xml"/>    
  6.        
  7.      <!--   
  8.      <sqlMap resource="com/leadtone/ibatis/sqlmap/User1.xml"/>    
  9.      <sqlMap resource="com/leadtone/ibatis/sqlmap/User2.xml"/>    
  10.        
  11.      <sqlMap resource="com/leadtone/ibatis/sqlmap/Usern.xml"/>   
  12.       -->  
  13. sqlMapConfig>  

 六、dao接口和接口实现

    1)、本例为UserDao:

Java代码  收藏代码
  1. package com.leadtone.ibatis.dao;  
  2.   
  3. import java.util.List;  
  4. import com.leadtone.ibatis.domain.User;  
  5.   
  6. public interface IUserDao {  
  7.     public List queryAllUsers();  
  8.     public User queryUserById(int id);  
  9.     public User queryUserByUser(User user);   
  10.     public List queryUserByName(String name);  
  11.       
  12.     public void addUser(User user);  
  13.     public void addUserBySequence(User user);  
  14.       
  15.     public void updateUser(User user);  
  16.       
  17.     public void deleteUser(int id);  
  18. }  

 

2)、实现类UserDaoImpl:

Java代码  收藏代码
  1. package com.leadtone.ibatis.dao.ibatis;  
  2.   
  3. import java.util.List;  
  4. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
  5. import com.leadtone.ibatis.dao.IUserDao;  
  6. import com.leadtone.ibatis.domain.User;  
  7.   
  8. public class UserDaoImpl extends SqlMapClientDaoSupport implements IUserDao {  
  9.   
  10.     //注意这里的SqlMapClient接口的声明和下面的static静态代码都不需要了,  
  11.   
  12.   
  13.   
  14.                 // 因为这里继承了spring提供的ibatis模板template类SqlMapClientDaoSupport,不是用原生的SqlMapClient  
  15.   
  16.   
  17.                   
  18.                  //private static SqlMapClient sqlMapClient=null;  
  19.     /* 
  20.     static{ 
  21.         Reader reader=null; 
  22.         try { 
  23.             reader=Resources.getResourceAsReader("com/leadtone/ibatis/sqlmap/SqlMapConfig.xml"); 
  24.             sqlMapClient=SqlMapClientBuilder.buildSqlMapClient(reader); 
  25.              
  26.             reader.close(); 
  27.         } catch (IOException e) { 
  28.             e.printStackTrace(); 
  29.         } 
  30.          
  31.     } 
  32.     */  
  33.     public void addUser(User user) {  
  34.         getSqlMapClientTemplate().insert("addUser", user);  
  35.     }  
  36.   
  37.     public User queryUserByUser(User user) {  
  38.         System.out.println("---UserDaoImpl---");  
  39.         return (User) this.getSqlMapClientTemplate().queryForObject("selectUserByUser", user);  
  40.           
  41.     }  
  42. /* 
  43. * 这里主要演示一个模拟用户登录系统验证的操作,主要用了queryUserByUser(User user)方法 
  44. */  
  45. }  

 3)、在spring配置文件中配置这个bean

 

Xml代码  收藏代码
  1. <!--sqlMapClient  -->  
  2.     <bean id="sqlMapClient"  class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  3.         <property name="configLocation" value="sqlmap/sql-map-config.xml"/>  
  4.         <property name="dataSource" ref="dataSource" />  
  5.     bean>  
  6.   
  7. <!-- validate loginUser -->  
  8.     <!-- dao -->  
  9.     <bean id="userDao" class="com.leadtone.ibatis.dao.ibatis.UserDaoImpl">  
  10.           <property name="sqlMapClient" ref="<span style="color: #000000;">sqlMapClient span>">property>  
  11.     bean>  

 

七、service接口和接口实现

 1)IUserLoginService接口

Java代码  收藏代码
  1. package com.leadtone.ibatis.service;  
  2.   
  3. import com.leadtone.ibatis.domain.User;  
  4.   
  5. public interface IUserLoginService {  
  6.     public boolean isLoginUser(User user);  
  7. }  

 

 2)UserLoginSerivceImpl实现类

Java代码  收藏代码
  1. package com.leadtone.ibatis.service.impl;  
  2.   
  3. import com.leadtone.ibatis.dao.IUserDao;  
  4. import com.leadtone.ibatis.domain.User;  
  5. import com.leadtone.ibatis.service.IUserLoginService;  
  6.   
  7. public class UserLoginServiceImpl implements IUserLoginService {  
  8.   
  9.     private IUserDao userDao;  
  10.   
  11.     public IUserDao getUserDao() {  
  12.         return userDao;  
  13.     }  
  14.       
  15.     public void setUserDao(IUserDao userDao) {  
  16.         this.userDao = userDao;  
  17.     }  
  18.     public boolean isLoginUser(User user) {  
  19.         return null!=userDao.queryUserByUser(user)?true:false;  
  20.     }  
  21.   
  22. }  

 

 3)在spring中注册这个bean

Xml代码  收藏代码
  1. <!-- service -->  
  2. <bean id="userLoginService" class="com.leadtone.ibatis.service.impl.UserLoginServiceImpl">  
  3.         <property name="userDao" ref="userDao">property>  
  4. bean>  

  

八、struts action实现及struts-config.xml配置(牵扯到struts和spring的整合)

1)action:

Java代码  收藏代码
  1. package com.leadtone.web.struts.action;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.apache.struts.action.Action;  
  7. import org.apache.struts.action.ActionForm;  
  8. import org.apache.struts.action.ActionForward;  
  9. import org.apache.struts.action.ActionMapping;  
  10.   
  11. import com.leadtone.ibatis.domain.User;  
  12. import com.leadtone.ibatis.service.IUserLoginService;  
  13. import com.leadtone.web.struts.form.LoginForm;  
  14.   
  15. public class LoginAction extends Action {  
  16.   
  17.     private IUserLoginService userLoginService;  
  18.   
  19.     public IUserLoginService getUserLoginService() {  
  20.         return userLoginService;  
  21.     }  
  22.   
  23.     public void setUserLoginService(IUserLoginService userLoginService) {  
  24.         this.userLoginService = userLoginService;  
  25.     }  
  26.       
  27.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  28.             HttpServletRequest request, HttpServletResponse response) {  
  29.         LoginForm loginForm = (LoginForm) form;  
  30.         String name=loginForm.getUsername();  
  31.         String password=loginForm.getPassword();  
  32.           
  33.         User user=new User();  
  34.         user.setName(name);  
  35.         user.setPassword(password);  
  36.         boolean isLogin=false;  
  37.         isLogin = userLoginService.isLoginUser(user);  
  38.         System.out.println(isLogin);  
  39.         if(isLogin){  
  40.             request.setAttribute("username", name);  
  41.             return mapping.findForward("success");  
  42.         }  
  43.         else  
  44.             return mapping.findForward("failure");  
  45.     }  
  46. }  

 2)actionForm:

Java代码  收藏代码
  1. public class LoginForm extends ActionForm {  
  2.       
  3.     private String username;  
  4.     private String password;  
  5.     private String grade;  
  6.   
  7.     public ActionErrors validate(ActionMapping mapping,  
  8.             HttpServletRequest request) {  
  9.         return null;  
  10.     }  
  11.   
  12.     public void reset(ActionMapping mapping, HttpServletRequest request) {  
  13.     }  
  14.   
  15.     public String getPassword() {  
  16.         return password;  
  17.     }  
  18.   
  19.     public void setPassword(String password) {  
  20.         this.password = password;  
  21.     }  
  22.   
  23.     public String getGrade() {  
  24.         return grade;  
  25.     }  
  26.     public void setGrade(String grade) {  
  27.         this.grade = grade;  
  28.     }  
  29.   
  30.     public String getUsername() {  
  31.         return username;  
  32.     }  
  33.   
  34.     public void setUsername(String username) {  
  35.         this.username = username;  
  36.     }  
  37. }  

 

3)xml:

Xml代码  收藏代码
  1. <struts-config>  
  2.   <data-sources />  
  3.   <form-beans >  
  4.     <form-bean name="loginForm" type="com.leadtone.web.struts.form.LoginForm" />  
  5.   
  6.   form-beans>  
  7.   
  8.   <global-exceptions />  
  9.   <global-forwards />  
  10.   <action-mappings >  
  11.     <action  
  12.       attribute="loginForm"  
  13.       input="/login.jsp"  
  14.       name="loginForm"  
  15.       path="/login"  
  16.       scope="request"  
  17.       type="org.springframework.web.struts.DelegatingActionProxy">  
  18.         
  19.       <forward name="failure" path="/failure.jsp" />  
  20.       <forward name="success" path="/succ.jsp" />  
  21.     action>  
  22.   
  23.   
  24.   action-mappings>  
  25.     
  26.   <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor">controller>  
  27.     
  28.   <message-resources parameter="com.leadtone.web.struts.ApplicationResources" />  
  29.     
  30.   <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
  31.     <set-property property="contextConfigLocation" value="classpath:applicationContext.xml" />  
  32.   plug-in>  
  33. struts-config>  

 4)页面:

login.jsp

Html代码  收藏代码
  1. <body >  
  2.     <center>  
  3.     <html:form action="${Pagecontext.request.contextPath}/login" method="post">  
  4.         <table border="1px" cellspacing="1px" cellpadding="1px" >  
  5.             <tr>  
  6.                 <td>username : td>  
  7.                 <td><html:text property="username"/>td>  
  8.                 <td><html:errors property="username"/>td>  
  9.             tr>  
  10.             <tr>  
  11.                 <td>password : td>  
  12.                 <td><html:password property="password"/>td>  
  13.                 <td><html:errors property="password"/>td>  
  14.             tr>  
  15.                 <tr>  
  16.                 <td>grade:  td>  
  17.                 <td> <html:select property="grade">  
  18.                         <html:option value="guest">guesthtml:option>  
  19.                         <html:option value="admin">adminhtml:option>  
  20.                     html:select>  
  21.                 td>  
  22.                 <td><html:errors property="grade"/>td>  
  23.             tr>  
  24.             <tr >  
  25.                 <td colspan="3" valign="middle" align="center"><html:submit/> <html:cancel/>td>  
  26.                   
  27.             tr>  
  28.         table>  
  29.         html:form>  
  30.         center>  
  31.     body>  

 succ.jsp

Html代码  收藏代码
  1. <body>  
  2.   welcome ${username}, <br>  
  3.   login successfully!  
  4. body>  

 

 falure.jsp 

Html代码  收藏代码
  1. <body>  
  2.     sorry,login error<a href="login.jsp">relogina>  
  3. body>  

5)web.xml

Xml代码  收藏代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <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">  
  3.   <servlet>  
  4.     <servlet-name>actionservlet-name>  
  5.     <servlet-class>org.apache.struts.action.ActionServletservlet-class>  
  6.     <init-param>  
  7.       <param-name>configparam-name>  
  8.       <param-value>/WEB-INF/struts-config.xmlparam-value>  
  9.     init-param>      
  10.     <init-param>  
  11.       <param-name>debugparam-name>  
  12.       <param-value>3param-value>  
  13.     init-param>  
  14.     <init-param>  
  15.       <param-name>detailparam-name>  
  16.       <param-value>3param-value>  
  17.     init-param>  
  18.     <load-on-startup>0load-on-startup>  
  19.   servlet>  
  20.     
  21.   <servlet-mapping>  
  22.     <servlet-name>actionservlet-name>  
  23.     <url-pattern>*.dourl-pattern>  
  24.   servlet-mapping>  
  25.   <welcome-file-list>  
  26.     <welcome-file>login.jspwelcome-file>  
  27.   welcome-file-list>  
  28. web-app>  

 

 九、spring配置文件的内容【牵扯到ibatis和struts的整合】

 

Xml代码  收藏代码
  1. <!-- action -->  
  2. <bean name="/login" class="com.leadtone.web.struts.action.LoginAction" abstract="false"  
  3.         lazy-init="default" autowire="default" dependency-check="default">  
  4. <property name="userLoginService" ref="userLoginService">property>  
  5. bean>  

 

十、测试

这里的测试 包括单元测试。例如对dao层、service层、action层编写完成后都要进行junit4单元测试(Jmock或easyMock等)测试,这里就不添加了。

 

另外补充一点:

就是spring的配置文件中对事物拦截器的配置,也是必须的,这里没有配置,有兴趣的可以搜索一下添加上。

------>>转载于:http://lehsyh.iteye.com/blog/582510

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29119536/viewspace-1181811/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-08-15

  • 博文量
    595
  • 访问量
    4989247