首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

ibatis+spring+struts调整应用实例

2012-08-27 
ibatis+spring+struts整合应用实例use?ibatis?? drop?table?if?exists?user?? ?? create?table?if?not?e

ibatis+spring+struts整合应用实例

  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代码??ibatis+spring+struts调整应用实例
  1. driver=com.mysql.jdbc.Driver??
  2. url=jdbc\:mysql\://localhost\:3306/ibatis??
  3. username=root??
  4. password=54321??

?

2)、注册数据源到spring

Xml代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  1. <body>??
  2. ??welcome?${username},?<br>??
  3. ??login?successfully!??
  4. </body>??

?

?falure.jsp?

Html代码??ibatis+spring+struts调整应用实例
  1. <body>??
  2. ????sorry,login?error<a?href="login.jsp">relogin</a>??
  3. </body>??

5)web.xml

Xml代码??ibatis+spring+struts调整应用实例
  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代码??ibatis+spring+struts调整应用实例
  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等)测试,这里就不添加了。?

?

热点排行