account表的uid字段不建立外键关联也能得出一样结果
一、数据库表结构
account表
user表
二、新建工程
目录结构
2.pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cmdzz</groupId> <artifactId>mybatis_day03_oneToMany</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql连接--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
3.sqlMapConfig.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"> <!-- mybatis的主配置文件 --> <configuration> <!--引入配置文件--> <properties resource="jdbcConfig.properties"></properties> <!--配置别名 映射文件里可以直接用domain里的类名 不区分大小写--> <typeAliases> <package name="com.cmdzz.domain"></package> </typeAliases> <!--配置环境 default="mysql" 随便写 当时下面的 environment id 要一致 --> <environments default="mysql"> <!--配置mysql的环境--> <environment id="mysql"> <!--配置事务类型--> <transactionManager type="JDBC"></transactionManager> <!--配置数据源(连接池)--> <dataSource type="POOLED"> <!-- 配置连接数据库的4个基本信息 --> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --> <!-- <mappers> <mapper resource="com/cmdzz/dao/IUserDao.xml"/> </mappers> --> <!--直接扫描包--> <mappers> <package name="com.cmdzz.dao"></package> </mappers> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 如果是用注解来配置的话,此处应该使用class属性指定被注解的dao全限定类名 --> <!-- <mappers> <mapper class="com.cmdzz.dao.IUserDao"/> </mappers>--> </configuration>
4.jdbcConfig.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis57plage
jdbc.username=root
jdbc.password=123456
5.IAccountDao.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="com.cmdzz.dao.IAccountDao"> <!--定义封装account和user的resultMap--> <resultMap id="accountUserMap" type="account"> <id property="id" column="aid"></id> <result property="uid" column="uid"></result> <result property="money" column="money"></result> <!--一对一的关系映射 column是数据库字段名--> <association property="user" column="uid" javaType="user"> <id property="id" column="id"></id> <result column="username" property="userName"></result> <result column="address" property="address"></result> <result column="sex" property="sex"></result> <result column="birthday" property="birthday"></result> </association> </resultMap> <!--配置查询所有 id="findAll" 是UserDao方法名 要一致 --> <!-- <select id="findAll" resultType="account"> select * from account </select> --> <select id="findAll" resultMap="accountUserMap"> SELECT u.*,a.id AS aid,a.uid,a.money FROM account a,USER u WHERE u.`id`=a.`UID` </select> </mapper>
6.IAccountDao.java
package com.cmdzz.dao; import com.cmdzz.domain.Account; import java.util.List; /** * @author cmdzz * @date 2019/7/1 - 16:17 */ public interface IAccountDao { /** * 查询所有账户 * @return */ List<Account> findAll(); }
7.User.java
package com.cmdzz.domain; import java.io.Serializable; import java.util.Date; /** * @author cmdzz * @date 2019/6/26 - 12:01 */ public class User implements Serializable { /** * 属性要和表的列名一样 */ private Integer id; private String userName; private Date birthday; private String sex; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", userName=‘" + userName + ‘\‘‘ + ", birthday=" + birthday + ", sex=‘" + sex + ‘\‘‘ + ", address=‘" + address + ‘\‘‘ + ‘}‘; } }
8.Account.java
package com.cmdzz.domain; import java.io.Serializable; /** * @author cmdzz * @date 2019/7/1 - 16:15 */ public class Account implements Serializable { private Integer id; private Integer uid; private Double money; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } 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; } @Override public String toString() { return "Account{" + "id=" + id + ", uid=" + uid + ", money=" + money + ‘}‘; } }
9.AccountTest.java
package com.cmdzz.test; import com.cmdzz.dao.IAccountDao; import com.cmdzz.dao.IUserDao; import com.cmdzz.domain.Account; import com.cmdzz.domain.User; 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.ArrayList; import java.util.List; /** * @author cmdzz * @date 2019/6/26 - 17:21 */ public class AccountTest { private InputStream in; private SqlSession sqlSession; private IAccountDao accountDao; @Before//用于在测试方法执行之前执行 public void init()throws Exception{ //1.读取配置文件,生成字节输入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.获取SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.获取SqlSession对象 sqlSession = factory.openSession(); //4.获取dao的代理对象 accountDao = sqlSession.getMapper(IAccountDao.class); } @After//用于在测试方法执行之后执行 public void destroy()throws Exception{ //提交事务 sqlSession.commit(); //6.释放资源 sqlSession.close(); in.close(); } /** * 测试查询所有 */ @Test public void testFindAll() { //5.执行查询所有方法 List<Account> accounts = accountDao.findAll(); for(Account account:accounts){ System.out.println("用户信息===================="); System.out.println(account); System.out.println(account.getUser()); } } }
8.执行结果
原文:https://www.cnblogs.com/cmdzhizhu/p/11115616.html