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 auto_increment,
- LOGIN_NAME varchar(10) not null,
- PASS_WORD varchar(15) not null,
- QX varchar(10) default 'guest' not null ,
- MEMO text,
- primary key (ID)
- )
- 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;
use ibatis;
drop table if exists user;
create table if not exists user(
ID tinyint auto_increment,
LOGIN_NAME varchar(10) not null,
PASS_WORD varchar(15) not null,
QX varchar(10) default 'guest' not null ,
MEMO text,
primary key (ID)
)
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
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>
!-- 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方法省略
- */
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 where LOGIN_NAME=#name# and PASS_WORD=#password#
- </select>
- <select id="selectUserByUser" parameterClass="user" resultMap="UserResult">
- select ID,LOGIN_NAME,PASS_WORD,QX,MEMO from user where LOGIN_NAME=#name# and PASS_WORD=#password#
- </select>
- <select id="selectUsersByName" parameterClass="String" resultMap="UserResult">
- select ID,LOGIN_NAME,PASS_WORD,QX,MEMO from user where sname like '%$name$%'
- </select>
- <!--
- <insert id="addUser" parameterClass="User">
- insert into user(ID,LOGIN_NAME,PASS_WORD,QX,MEMO ) values(#id#,#name#,#birth#,#score#)
- </insert>
- -->
- <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>
<?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 where LOGIN_NAME=#name# and PASS_WORD=#password# </select> <select id="selectUserByUser" parameterClass="user" resultMap="UserResult"> select ID,LOGIN_NAME,PASS_WORD,QX,MEMO from user where LOGIN_NAME=#name# and PASS_WORD=#password# </select> <select id="selectUsersByName" parameterClass="String" resultMap="UserResult"> select ID,LOGIN_NAME,PASS_WORD,QX,MEMO from user where sname like '%$name$%' </select> <!-- <insert id="addUser" parameterClass="User"> insert into user(ID,LOGIN_NAME,PASS_WORD,QX,MEMO ) values(#id#,#name#,#birth#,#score#) </insert> --> <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>
五、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"
- "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
- <sqlMapConfig>
- <sqlMap resource="com/leadtone/ibatis/sqlmap/User.xml"/>
- </sqlMapConfig>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <sqlMap resource="com/leadtone/ibatis/sqlmap/User.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);
- }
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)方法
- */
- }
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="<SPAN style="COLOR: #000000">sqlMapClient </SPAN>" 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>
<!--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="sqlMapClient "></property> </bean>
七、service接口和接口實現
1)IUserLoginService接口
- package com.leadtone.ibatis.service;
- import com.leadtone.ibatis.domain.User;
- public interface IUserLoginService {
- public boolean isLoginUser(User user);
- }
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;
- }
- }
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>
<!-- 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.