Mybatis一对一结果映射

落日映苍穹つ 2023-07-03 06:04 252阅读 0赞

目录结构

目录结构

创建数据库相应的表

一个账户对应一个用户
accout

  1. CREATE TABLE `account` (
  2. `aid` int(11) NOT NULL AUTO_INCREMENT,
  3. `accountname` varchar(20) DEFAULT NULL,
  4. `money` float(10,2) DEFAULT NULL,
  5. `userId` int(11) DEFAULT NULL,
  6. PRIMARY KEY (`aid`),
  7. KEY `userId` (`userId`),
  8. CONSTRAINT `account_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`id`)
  9. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

user

  1. CREATE TABLE `user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `username` varchar(20) DEFAULT NULL,
  4. `PASSWORD` varchar(20) DEFAULT NULL,
  5. `sex` varchar(2) DEFAULT NULL,
  6. `birthday` date DEFAULT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8;

domain 实体类

Account

  1. package com.william.domain;
  2. /**
  3. * @author :lijunxuan
  4. * @date :Created in 2020/2/2 20:35
  5. * @description :
  6. * @version: 1.0
  7. */
  8. public class Account {
  9. Integer aid;
  10. String accountname;
  11. Float money;
  12. Integer userId;
  13. User user;
  14. @Override
  15. public String toString() {
  16. return "Account{" +
  17. "aid=" + aid +
  18. ", accountname='" + accountname + '\'' +
  19. ", money=" + money +
  20. ", userId=" + userId +
  21. ", user=" + user +
  22. '}';
  23. }
  24. public Integer getAid() {
  25. return aid;
  26. }
  27. public void setAid(Integer aid) {
  28. this.aid = aid;
  29. }
  30. public String getAccountname() {
  31. return accountname;
  32. }
  33. public void setAccountname(String accountname) {
  34. this.accountname = accountname;
  35. }
  36. public Float getMoney() {
  37. return money;
  38. }
  39. public void setMoney(Float money) {
  40. this.money = money;
  41. }
  42. public Integer getUserId() {
  43. return userId;
  44. }
  45. public void setUserId(Integer userId) {
  46. this.userId = userId;
  47. }
  48. public User getUser() {
  49. return user;
  50. }
  51. public void setUser(User user) {
  52. this.user = user;
  53. }
  54. }

User

  1. package com.william.domain;
  2. /**
  3. * @author :lijunxuan
  4. * @date :Created in 2020/2/2 20:37
  5. * @description :
  6. * @version: 1.0
  7. */
  8. public class User {
  9. Integer id;
  10. String username;
  11. String PASSWORD;
  12. String sex;
  13. String birthday;
  14. @Override
  15. public String toString() {
  16. return "User{" +
  17. "id=" + id +
  18. ", username='" + username + '\'' +
  19. ", PASSWORD='" + PASSWORD + '\'' +
  20. ", sex='" + sex + '\'' +
  21. ", birthday='" + birthday + '\'' +
  22. '}';
  23. }
  24. public Integer getId() {
  25. return id;
  26. }
  27. public void setId(Integer id) {
  28. this.id = id;
  29. }
  30. public String getUsername() {
  31. return username;
  32. }
  33. public void setUsername(String username) {
  34. this.username = username;
  35. }
  36. public String getPASSWORD() {
  37. return PASSWORD;
  38. }
  39. public void setPASSWORD(String PASSWORD) {
  40. this.PASSWORD = PASSWORD;
  41. }
  42. public String getSex() {
  43. return sex;
  44. }
  45. public void setSex(String sex) {
  46. this.sex = sex;
  47. }
  48. public String getBirthday() {
  49. return birthday;
  50. }
  51. public void setBirthday(String birthday) {
  52. this.birthday = birthday;
  53. }
  54. }

mapper Dao

  1. package com.william.mapper;
  2. import com.william.domain.Account;
  3. import com.william.domain.QueryVo;
  4. import com.william.domain.Usert;
  5. import org.apache.ibatis.annotations.Param;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. public interface Usermapper {
  9. List<Account> findByhaha();
  10. }

mapper.xml 映射文件

可以有两种配置方式:

方式一:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.william.mapper.Usermapper">
  6. <resultMap id="accoutMap" type="account">
  7. <id property="aid" column="aid"></id>
  8. <result property="accountname" column="accountname"></result>
  9. <result property="money" column="money"></result>
  10. <result property="userId" column="userId"></result>
  11. <result property="user.id" column="id"></result>
  12. <result property="user.username" column="username"></result>
  13. <result property="user.PASSWORD" column="PASSWORD"></result>
  14. <result property="user.sex" column="sex"></result>
  15. <result property="user.birthday" column="birthday"></result>
  16. </resultMap>
  17. <select id="findByhaha" resultMap="accoutMap">
  18. select * from account a ,user u where a.userId=u.id;
  19. </select>
  20. </mapper>

方式二:使用association标签

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.william.dao.AccountDao">
  6. <resultMap id="resultMap" type="account">
  7. <id column="aid" property="aid"></id>
  8. <result column="accountname" property="accountname"></result>
  9. <result column="money" property="money"></result>
  10. <result column="userId" property="userId"></result>
  11. <!--association ; 关联 联想 配置一对一映射-->
  12. <!--
  13. property :属性名
  14. javaType : 属性的类型
  15. -->
  16. <association property="user" javaType="user">
  17. <id column="id" property="id"></id>
  18. <result column="username" property="username"></result>
  19. <result column="PASSWORD" property="PASSWORD"></result>
  20. <result column="sex" property="sex"></result>
  21. <result column="birthday" property="birthday"></result>
  22. </association>
  23. </resultMap>
  24. <select id="findAll" resultMap="resultMap">
  25. select * from account a,user u where a.userId=u.id;
  26. </select>
  27. </mapper>

配置文件

1.db.properties 数据库配置文件

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/web02
  3. jdbc.user=root
  4. jdbc.password=root

2.log4j.properties日志文件

  1. # Set root category priority to INFO and its only appender to CONSOLE.
  2. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
  3. log4j.rootCategory=debug, CONSOLE, LOGFILE, info
  4. # Set the enterprise logger category to FATAL and its only appender to CONSOLE.
  5. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
  6. # CONSOLE is set to be a ConsoleAppender using a PatternLayout.
  7. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
  8. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
  9. log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
  10. # LOGFILE is set to be a File appender using a PatternLayout.
  11. log4j.appender.LOGFILE=org.apache.log4j.FileAppender
  12. log4j.appender.LOGFILE.File=d:\axis.log
  13. log4j.appender.LOGFILE.Append=true
  14. log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
  15. log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

3.核心配置文件Mybatis-config.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <properties resource="db.properties"></properties>
  7. <typeAliases>
  8. <package name="com.william.domain"></package>
  9. </typeAliases>
  10. <environments default="develoment">
  11. <environment id="develoment">
  12. <transactionManager type="JDBC"/>
  13. <dataSource type="POOLED">
  14. <property name="driver" value="${jdbc.driver}"></property>
  15. <property name="url" value="${jdbc.url}"></property>
  16. <property name="username" value="${jdbc.user}"></property>
  17. <property name="password" value="${jdbc.password}"></property>
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <mappers>
  22. <!--<mapper resource="com/william/Mapper.xml"></mapper>-->
  23. <package name="com.william.mapper"></package>
  24. </mappers>
  25. </configuration>

test测试类

  1. package com.william.test;
  2. import com.william.domain.Account;
  3. import com.william.domain.QueryVo;
  4. import com.william.domain.Usert;
  5. import com.william.mapper.Usermapper;
  6. import org.apache.ibatis.io.Resources;
  7. import org.apache.ibatis.session.SqlSession;
  8. import org.apache.ibatis.session.SqlSessionFactory;
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  10. import org.junit.Test;
  11. import java.io.IOException;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. /**
  15. * @author :lijunxuan
  16. * @date :Created in 2020/2/2 13:28
  17. * @description :
  18. * @version: 1.0
  19. */
  20. public class TestMyBatis {
  21. /**
  22. * 查询所有的账户相同的
  23. */
  24. @Test
  25. public void selectAll(){
  26. try {
  27. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("Mybatis-config.xml"));
  28. SqlSession sqlSession = sqlSessionFactory.openSession(true);
  29. Usermapper mapper = sqlSession.getMapper(Usermapper.class);
  30. List<Account> list = mapper.findByhaha();
  31. for (Account account : list) {
  32. System.out.println(account.getAid());
  33. System.out.println(account);
  34. }
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. }

测试结果

测试结果

发表评论

表情:
评论列表 (有 0 条评论,252人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MyBatis一对一映射

    一对一映射其实就是我们常说的一对一查询。在生活中,到处充斥着一对一、一对多的例子。我们之前说过的那个用户-角色-权限的系统就是一个活生生的案例。当存在比较复杂的对应关系时,我们