一个用户有多个账户
用户所对于的账户是一对多
账户对用户是一对一
实现:查账户信息时,同时出现用户信息
代码部分
com.qingruan.bean目录下创建Account.java和AccountUser.java
1、Account.java
package com.qingruan.bean; public class Account { private Integer aid; private Integer uid; private double money; public Integer getAid() { return aid; } public void setAid(Integer aid) { this.aid = aid; } public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } }
2、AccountUser.java
package com.qingruan.bean; public class AccountUser extends Account{ //同时包含用户信息以及账户信息 private String username; private String sex; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "aid:"+this.getAid()+",money:"+this.getMoney()+",username:" +this.getUsername()+",sex:"+this.getSex(); } }
IAccountDao.java
package com.qingruan.dao; import com.qingruan.bean.AccountUser; import java.util.List; public interface IAccountDao { /** * 查询所有用户,同时获得账户的所属用户信息以及用户名称和性别 */ List<AccountUser> findAll(); }
4、AccountDao.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"> <!--namespace 命名空间 包的全限定名 包名+类名 --> <mapper namespace="com.qingruan.dao.IAccountDao"> <select id="findAll" resultType="accountUser"> SELECT a.*,u.`username`,u.`sex` FROM t_account a,t_user u WHERE a.`uid`=u.`id` </select> </mapper>
5、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> <!-- 指定日志引用的是log4j--> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <!--给实体类配置别名--> <typeAliases> <!--批量定义别名,扫描整个包下的所有的类,别名为类名,首字母大小写都可以--> <package name="com.qingruan.bean"/> </typeAliases> <!--可以设置多个运行环境,满足不同需要,例如 开发、测试、生产环境上有不同一配置 --> <environments default="mysql"> <environment id="mysql"> <!--事务管理类型主要有jdbc和managed,前者依赖于数据源获得的连接,后者依赖于容器 --> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <!-- 如果数据库设置为UTF-8,则URL参数连接需要添加?useUnicode=true&characterEncoding=UTF-8,如下 --> <property name="url" value="jdbc:mysql://localhost:3306/mydata1?useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments> <!-- 告知mybaties映射配置的位置--> <mappers> <mapper resource="com/qingruan/dao/AccountDao.xml"></mapper> </mappers> </configuration>
6、MyBatisTest.java
package com.qingruan.test; import com.qingruan.bean.AccountUser; import com.qingruan.dao.IAccountDao; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.InputStream; import java.util.List; public class MyBatisTest { private InputStream is; private SqlSessionFactoryBuilder builder; private SqlSessionFactory sessionFactory; private SqlSession session; private IAccountDao dao; @Before //在测试方法执行之前执行 public void init() throws Exception{ is=Resources.getResourceAsStream("mybatis-config.xml"); //创建sqlSessionFacotory的构建着对象 builder=new SqlSessionFactoryBuilder(); //通过构建着对象创建工厂对象 sessionFactory = builder.build(is); //获得session对象 session = sessionFactory.openSession(); //使用session创建dao接口的代理对象 dao = session.getMapper(IAccountDao.class); } @After //在测试方法执行完成之后执行 public void destroy() throws Exception{ //提交事务 增删改后一定要控制事物的提交 session.commit(); //方式资源 session.close(); is.close(); } /** * 查账户的同时,显示用户信息,包括姓名和性别 */ @Test public void testFindAll(){ List<AccountUser> list = dao.findAll(); for (AccountUser accountUser : list) { System.out.println(accountUser); } } }