步骤:
一、新建工程,添加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.properties</value>  
  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. <!DOCTYPE sqlMap           
  4.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"           
  5.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">    
  6.     
  7. <sqlMap namespace="User">    
  8.     
  9.     <typeAlias alias="user" type="com.leadtone.ibatis.domain.User"/>    
  10.     
  11.     <resultMap class="user" id="UserResult">    
  12.         <result property="id" column="ID"/>        
  13.         <result property="name" column="LOGIN_NAME"/>      
  14.         <result property="password" column="PASS_WORD"/>       
  15.         <result property="qx" column="QX"/>        
  16.         <result property="memo" column="MEMO"/>        
  17.     </resultMap>    
  18.          
  19.     <!-- query all Users -->    
  20.     <select id="selectAllUsers" resultMap="UserResult">    
  21.         select * from user     
  22.     </select>    
  23.          
  24.     <!-- query user by id -->    
  25.     <select id="selectUserById" parameterClass="int" resultMap="UserResult">    
  26.         select ID,LOGIN_NAME,PASS_WORD,QX,MEMO from user where ID=#id#     
  27.     </select>    
  28.          
  29.     <!-- query user by user -->    
  30.     <select id="selectUserByUser2" parameterClass="map" resultMap="UserResult">    
  31.         select ID,LOGIN_NAME,PASS_WORD,QX,MEMO   
  32.         from user   
  33.         <dynamic prepend="where">  
  34.             <isNotEmpty prepend="and" property="name">  
  35.                 LOGIN_NAME=#name#  
  36.             </isNotEmpty>  
  37.             <isNotEmpty prepend="and" property="password">  
  38.                 PASS_WORD=#password#  
  39.             </isNotEmpty>  
  40.         </dynamic>  
  41.     </select>    
  42.          
  43.          
  44.     <select id="selectUserByUser" parameterClass="user" resultMap="UserResult">    
  45.         select ID,LOGIN_NAME,PASS_WORD,QX,MEMO   
  46.         from user   
  47.         <dynamic prepend="where">  
  48.             <isNotEmpty prepend="and" property="name">  
  49.                 LOGIN_NAME=#name#  
  50.             </isNotEmpty>  
  51.             <isNotEmpty prepend="and" property="password">  
  52.                 PASS_WORD=#password#  
  53.             </isNotEmpty>  
  54.         </dynamic>  
  55.     </select>    
  56.          
  57.     <select id="selectUsersByName" parameterClass="String" resultMap="UserResult">    
  58.         select ID,LOGIN_NAME,PASS_WORD,QX,MEMO   
  59.         from user   
  60.          <dynamic prepend="where">  
  61.             <isNotEmpty prepend="and" property="value">  
  62.                 sname like '%$value$%'  
  63.             </isNotEmpty>  
  64.         </dynamic>  
  65.     </select>    
  66.       
  67.     <!--       
  68.     <insert id="addUser" parameterClass="User">    
  69.         insert into user(LOGIN_NAME,PASS_WORD,QX,MEMO )   
  70.         values(#name#,#birth#,#score#)     
  71.         <selectKey keyProperty="id" resultClass="int">  
  72.              select last_insert_id()  
  73.         </selectKey>  
  74.     </insert>   
  75.      &lt;!-- 注意这里的keyProperty="id" 中的id就是User中的id属性,resultClass就是查询的的返回值 --&gt;  
  76.     -->    
  77.          
  78.     <update id="updateUser" parameterClass="User">    
  79.         update user set LOGIN_NAME=#name#,PASS_WORD=#password#,QX=#qx#,memo=#memo# where  ID=#id#     
  80.     </update>    
  81.          
  82.     <delete id="deleteUser" parameterClass="int">    
  83.         delete from user where ID=#id#     
  84.     </delete>    
  85.     
  86. </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. <!DOCTYPE sqlMapConfig           
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"           
  4.     "<a href="http://ibatis.apache.org/dtd/sql-map-config-2.dtd">http://ibatis.apache.org/dtd/sql-map-config-2.dtd</a>">    
  5. <sqlMapConfig>    
  6.      <sqlMap resource="com/leadtone/ibatis/sqlmap/User.xml"/>    
  7.        
  8.      <!--   
  9.      <sqlMap resource="com/leadtone/ibatis/sqlmap/User1.xml"/>    
  10.      <sqlMap resource="com/leadtone/ibatis/sqlmap/User2.xml"/>    
  11.        
  12.      <sqlMap resource="com/leadtone/ibatis/sqlmap/Usern.xml"/>   
  13.       -->  
  14. </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<User> queryAllUsers();  
  8.     public User queryUserById(int id);  
  9.     public User queryUserByUser(User user);   
  10.     public List<User> 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">guest</html:option>  
  19.                         <html:option value="admin">admin</html: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">relogin</a>  
  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>action</servlet-name>  
  5.     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  6.     <init-param>  
  7.       <param-name>config</param-name>  
  8.       <param-value>/WEB-INF/struts-config.xml</param-value>  
  9.     </init-param>      
  10.     <init-param>  
  11.       <param-name>debug</param-name>  
  12.       <param-value>3</param-value>  
  13.     </init-param>  
  14.     <init-param>  
  15.       <param-name>detail</param-name>  
  16.       <param-value>3</param-value>  
  17.     </init-param>  
  18.     <load-on-startup>0</load-on-startup>  
  19.   </servlet>  
  20.     
  21.   <servlet-mapping>  
  22.     <servlet-name>action</servlet-name>  
  23.     <url-pattern>*.do</url-pattern>  
  24.   </servlet-mapping>  
  25.   <welcome-file-list>  
  26.     <welcome-file>login.jsp</welcome-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等)测试,这里就不添加了。 

 

 

http://lehsyh.iteye.com/blog/582510 

posted on 2011-04-21 21:20  芝麻开门  阅读(9496)  评论(0编辑  收藏  举报