User.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="User"> <resultMap id="result" class="com.tq365.vo.User"> <result property="uid" column="uid"></result> <result property="uname" column="uname"></result> <result property="upwd" column="upwd"></result> <result property="addressList" column="uid" select="address.findByUid"></result> </resultMap> <resultMap id="address_result" class="com.tq365.vo.Address"> <result property="id" column="id"></result> <result property="address" column="address"></result> <result property="code" column="code"></result> <result property="user" column="uid" select="findUserByID"></result> </resultMap> <!-- 根据ID删除一个用户--> <delete id="deleteUserByID" parameterClass="int"> delete from t_user where uid=#uid# </delete> <!--修改一个用户--> <update id="updateUserByUser" parameterClass="com.tq365.vo.User"> update t_user set uname=#uname#,upwd=#upwd# where uid=#uid# </update> <!--插入一个用户--> <insert id="insertUser" parameterClass="com.tq365.vo.User"> insert into t_user(uname, upwd) VALUES (#uname#, #upwd#) </insert> <!--根据ID查询--> <select id="findUserByID" parameterClass="int" resultMap="result"> select * from t_user where uid=#uid# </select> <!--根据用户名和密码 查询--> <select id="selectByUnameAndUpwd" parameterClass="com.tq365.vo.User" resultMap="result"> select * from t_user where uname=#uname# and upwd=#upwd# </select> <!--查询全部--> <select id="findAllUser" resultClass="com.tq365.vo.User"> select u.* from t_user u </select> <!--分页查询部分 --> <select id="findAllUserCount" resultClass="int"> select count(*) from t_user </select> <!--resultMap="result"User resultMap="result"..... --> <select id="findPageUser" parameterClass="int" resultClass="com.tq365.vo.User"> select u.* from t_user u limit #start#,5 </select> <!-- 模糊查询getAllUserCountWithName --> <select id="getAllUserCountWithName" resultClass="int"> select count(*) from t_user <dynamic prepend="where"> <isNotEmpty prepend="or" property="uname"> uname like '%$uname$%' </isNotEmpty> </dynamic> </select> <!-- 模糊查询getAllUserCountWithName --> <select id="getUserByPageNoWithName" resultMap="result"> select * from t_user <dynamic prepend="where"> <isNotEmpty prepend="or" property="uname"> uname like '%$uname$%' limit #start#,5 </isNotEmpty> </dynamic> </select> <!-- resultMap直接映射,可以所结果集中的数据库安段与实体类中的属性一一对应(数据关联时必需使用该属性) resultClass隐式映射,select得到的是一条实体记录,但是如果数据库字段与类的属性名字不一致,映射就会出错 --> <!--关联查询 --> <select id="address.findByUid" resultMap="address_result" parameterClass="int"> select * from t_address where uid=#uid# </select> <!-- Address部分 --> <!--根据ID查询--> <select id="findAddressByID" parameterClass="int" resultMap="address_result"> select * from t_address where id=#id# </select> </sqlMap> UserDao.java package com.tq365.dao; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.ibatis.sqlmap.client.SqlMapClient; import com.tq365.util.Pages; import com.tq365.util.SqlMapUtil; import com.tq365.vo.Address; import com.tq365.vo.User; public class UserDao { /** * 添加一个用户 * @param user * @return */ public boolean addUser(User user){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); try { sqlMapClient.startTransaction(); sqlMapClient.insert("insertUser", user); sqlMapClient.commitTransaction(); return true; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return false; } /** * 删除一个用户 * @param uid * @return */ public boolean deleteUser(int uid){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); try { sqlMapClient.startTransaction(); sqlMapClient.delete("deleteUserByID", uid); sqlMapClient.commitTransaction(); return true; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return false; } /** * 根据ID查询一个用户 * @param uid * @return */ public User getUserByUid(int uid){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); User user=null; try { sqlMapClient.startTransaction(); user=(User) sqlMapClient.queryForObject("findUserByID", uid); sqlMapClient.commitTransaction(); return user; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return null; } /** * 查询所有用户 * @return */ @SuppressWarnings("unchecked") public List<User> getAllUsers(){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); List<User> userList=null; try { sqlMapClient.startTransaction(); userList=sqlMapClient.queryForList("findAllUser", null); sqlMapClient.commitTransaction(); return userList; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return null; } /** * 修改一个用户 * @param user * @return */ public boolean updateUser(User user){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); try { sqlMapClient.startTransaction(); sqlMapClient.update("updateUserByUser", user); sqlMapClient.commitTransaction(); return true; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return false; } /** * 查询指定User对象的所有地址 * @param uid * @return */ @SuppressWarnings("unchecked") public List<Address> getAddresssByUid(int uid){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); List<Address> addressList=null; try { sqlMapClient.startTransaction(); addressList=sqlMapClient.queryForList("address.findByUid", uid); sqlMapClient.commitTransaction(); return addressList; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return null; } /** * 根据用户名密码查询 * @param user * @return */ public User getUserByUnameUpwd(User user){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); User userAll=null; try { sqlMapClient.startTransaction(); userAll=(User) sqlMapClient.queryForObject("selectByUnameAndUpwd", user); sqlMapClient.commitTransaction(); return userAll; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return null; } /** * 获得用户记录总条数 * @return */ public int getAllUserCount(){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); int rows=0; try { sqlMapClient.startTransaction(); rows=(Integer) sqlMapClient.queryForObject("findAllUserCount", null); sqlMapClient.commitTransaction(); return rows; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return 0; } /** * 用户分页 * @param pageNo * @return */ @SuppressWarnings("unchecked") public Pages<User> getUserByPageNo(int pageNo){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); Pages<User> pages=new Pages<User>(getAllUserCount()); //pages.setPageSize(5); List<User> userList=new ArrayList<User>(); try { sqlMapClient.startTransaction(); userList=sqlMapClient.queryForList("findPageUser", pages.getStart(pageNo)); pages.setPageList(userList); sqlMapClient.commitTransaction(); return pages; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return null; } /** * 模糊查询获得用户记录总条数 * @return */ public int getAllUserCountWithName(User user){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); int rows=0; try { sqlMapClient.startTransaction(); rows=(Integer) sqlMapClient.queryForObject("getAllUserCountWithName", user); sqlMapClient.commitTransaction(); return rows; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return 0; } /** * 模糊查询用户分页 * @param pageNo * @return */ @SuppressWarnings("unchecked") public Pages<User> getUserByPageNoWithName(int pageNo,User user){ SqlMapClient sqlMapClient=SqlMapUtil.getSqlMapClient(); Pages<User> pages=new Pages<User>(getAllUserCountWithName(user)); //pages.setPageSize(5); List<User> userList=new ArrayList<User>(); //查询条件 Map<String, Object> map=new HashMap<String, Object>(); map.put("start", pages.getStart(pageNo)); map.put("uname", user.getUname()); try { sqlMapClient.startTransaction(); userList=sqlMapClient.queryForList("getUserByPageNoWithName", map); pages.setPageList(userList); sqlMapClient.commitTransaction(); return pages; } catch (SQLException e) { e.printStackTrace(); }finally{ try { sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return null; } public static void main(String[] args) { UserDao userDao=new UserDao(); User user=userDao.getUserByUid(1); System.out.println(user.getUname()); System.out.println(user.getAddressList().get(0).getAddress()); } } 但在实际开发中应尽理避免级联查询,将级联的实体类集中到一个个模块, 再在sql中利用联接查询.