(1)新建一个maven项目,引入mybatis依赖
(2)配置mybatis-config.xml文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <package name="edu.nf.ch03.entity"/> </typeAliases> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?useSSL=true&useUnicode=true&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UsersMapper.xml"/> <mapper resource="mapper/IdCardMapper.xml"/> </mappers> </configuration>
(3)实体类
Addres:
package edu.nf.ch03.entity; import java.util.ArrayList; import java.util.List; /** * @author lance * @date 2018/9/13 */ public class Address { private Integer aid; private String address; /** * 多对多关联用户 */ //private List<Users> users = new ArrayList<>(); public Integer getAid() { return aid; } public void setAid(Integer aid) { this.aid = aid; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
IdCard实体类:
package edu.nf.ch03.entity; /** * @author lance * @date 2018/9/13 */ public class IdCard { private Integer id; private String cardNum; /** * 关联用户 */ private Users user; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCardNum() { return cardNum; } public void setCardNum(String cardNum) { this.cardNum = cardNum; } public Users getUser() { return user; } public void setUser(Users user) { this.user = user; } }
Tel实体类:
package edu.nf.ch03.entity; /** * @author lance * @date 2018/9/13 */ public class Tel { private Integer tid; private String tel; public Integer getTid() { return tid; } public void setTid(Integer tid) { this.tid = tid; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } }
Users实体类:
package edu.nf.ch03.entity; import java.util.ArrayList; import java.util.List; /** * @author lance * @date 2018/9/13 */ public class Users { private Integer uid; private String userName; /** * 关联身份证 */ private IdCard card; /** * 一对多关联联系方式 * @return */ private List<Tel> tels = new ArrayList<>(); /** * 多对多关联地址 */ private List<Address> addrs = new ArrayList<>(); public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public IdCard getCard() { return card; } public void setCard(IdCard card) { this.card = card; } public List<Tel> getTels() { return tels; } public void setTels(List<Tel> tels) { this.tels = tels; } public List<Address> getAddrs() { return addrs; } public void setAddrs(List<Address> addrs) { this.addrs = addrs; } }
(4)接口实现类:
package edu.nf.ch03.dao.impl; import edu.nf.ch03.commons.MyBatisUtil; import edu.nf.ch03.dao.UserDao; import edu.nf.ch03.entity.Users; import org.apache.ibatis.session.SqlSession; import java.util.List; /** * @author lance * @date 2018/9/13 */ public class UserDaoImpl implements UserDao { @Override public Users findUserById(int uid) { SqlSession session = MyBatisUtil.getSession(); Users user = null; try { UserDao dao = session.getMapper(UserDao.class); user = dao.findUserById(uid); } finally { session.close(); } return user; } @Override public List<Users> listUsers() { SqlSession session = MyBatisUtil.getSession(); List<Users> list = null; try { UserDao dao = session.getMapper(UserDao.class); list = dao.listUsers(); } finally { session.close(); } return list; } }
(5)UserMapper.xml配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="edu.nf.ch03.dao.UserDao"> <!-- userMap --> <resultMap id="userMap" type="users"> <id property="uid" column="u_id"/> <result property="userName" column="u_name"/> <!-- 一对一关联身份证, 一对一或者多对一使用association, property指定实体中关联对象的字段名 ,resultMap属性指定其他resultMap的id--> <association property="card" resultMap="cardMap"/> <!-- 一对多关联电话, 一对多或者多对多使用collection, property和resultMap属性同上--> <collection property="tels" resultMap="telMap"/> <!-- 多对多关联地址--> <collection property="addrs" resultMap="addrMap"/> </resultMap> <!-- cardMap --> <resultMap id="cardMap" type="idCard"> <id property="id" column="c_id"/> <result property="cardNum" column="c_number"/> </resultMap> <!-- telMap--> <resultMap id="telMap" type="tel"> <id property="tid" column="t_id"/> <result property="tel" column="t_number"/> </resultMap> <!-- addrMap --> <resultMap id="addrMap" type="address"> <id property="aid" column="a_id"/> <result property="address" column="address"/> </resultMap> <!-- 关联查询 --> <select id="findUserById" resultMap="userMap"> select u.u_id, u.u_name, c.c_number, t.t_number, a.address from user_info u join card_info c on u.u_id = c.u_id join tel_info t on u.u_id = t.u_id join user_addr ua on u.u_id = ua.u_id join addr_info a on a.a_id = ua.a_id where u.u_id = #{uid} </select> </mapper>
(6)测试:
package edu.nf.ch03.test; import edu.nf.ch03.dao.impl.UserDaoImpl; import edu.nf.ch03.entity.Address; import edu.nf.ch03.entity.Tel; import edu.nf.ch03.entity.Users; import org.junit.Test; /** * @author lance * @date 2018/9/13 */ public class UserDaoTest { @Test public void testFindUserById(){ Users user = new UserDaoImpl().findUserById(1); //用户名 System.out.println(user.getUserName()); //身份证 System.out.println(user.getCard().getCardNum()); //联系方式 for (Tel tel : user.getTels()) { System.out.println(tel.getTel()); } //住址 for (Address addr : user.getAddrs()) { System.out.println(addr.getAddress()); } } }