zoukankan      html  css  js  c++  java
  • 14mybatis一对一关系映射

    mybatis one2one

    mybatis 3.4.1 one2one
    --------------------------------------------------
    建立表
    create table db_member(
    id int unsigned auto_increment,
    account varchar(20) not null,
    pass varchar(32) not null,
    name varchar(20),
    aid int unsigned,
    primary key(id)
    )engine=innodb charset=utf8;

    create table db_address(
    aid int unsigned auto_increment,
    aname varchar(20) not null,
    aphone varchar(11) not null,
    primary key(aid)
    )engine=innodb auto_increment=100 charset=utf8;

    drop table db_address;
    truncate db_address;

    insert into db_address values(null,'河南省郑州市','13014577032');
    insert into db_address values(null,'北京市朝阳区','11000242424');

    select * from db_address;

    insert into db_member values(null,'admin','123','李四',100);
    insert into db_member values(null,'aa','aa','赵六',101);
    insert into db_member(account,pass,name) values('abc','abc','王五');


    select * from db_member;

    maven 依赖相关的jar包
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.1</version>
    </dependency>

    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.40</version>
    </dependency>

    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.2</version>
    </dependency>


    maven 项目资源build
    <build>
    <finalName>${project.artifactId}</finalName>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
    <resource>
    <directory>src/main/java</directory>
    <includes>
    <include>**/*.xml</include>
    </includes>
    </resource>
    <resource>
    <directory>src/main/resources</directory>
    <includes>
    <include>**/*.xml</include>
    <include>**/*.properties</include>
    </includes>
    </resource>
    </resources>
    </build>

    jdbc参数配置文件 src/db.properties 文件
    db.driver=com.mysql.jdbc.Driver
    db.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&useSSL=true
    db.username=root
    db.password=

    核心配置文件 src/conf.xml 文件
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <properties resource="db.properties"/>

    <typeAliases>
    <package name="com.fz.model"></package>
    </typeAliases>
    <environments default="development">
    <environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
    <property name="driver" value="${db.driver}"/>
    <property name="url" value="${db.url}"/>
    <property name="username" value="${db.username}"/>
    <property name="password" value="${db.password}"/>
    </dataSource>
    </environment>
    </environments>
    <mappers>
    <package name="com.fz.mapper"/>
    </mappers>
    </configuration>

    实体类 com.fz.model.Address 类
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    public class Address {
    private int id;
    private String name;
    private String phone;
    }


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    public class Member {
    private int id;
    private String account;
    private String pass;
    private String name;
    private Address address;
    }


    接口及配置文件
    com.fz.mapper.MemberMapper 接口映射
    public interface MemberMapper {
    public Member queryById(int id);
    public List<Map<String,Object>> query();
    public List<Map<String,Object>> queryAll();
    }

    com.fz.mapper.MemberMapper.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.fz.mapper.MemberMapper">

    <resultMap id="mem" type="member">
    <id column="id" property="id"></id>
    <result property="account" column="account"></result>
    <result property="pass" column="pass"></result>
    <result property="name" column="name"></result>
    <association property="address" javaType="address">
    <id property="id" column="aid"></id>
    <result property="name" column="aname"/>
    <result property="phone" column="aphone"/>
    </association>
    </resultMap>

    <resultMap id="m2" type="member">
    <id column="id" property="id"/>
    <result property="account" column="account"/>
    <result property="pass" column="pass"/>
    <result property="name" column="name"/>
    <result property="address.id" column="aid"/>
    <result property="address.name" column="aname"/>
    <result property="address.phone" column="aphone"/>
    </resultMap>

    <resultMap id="aaa" type="address">
    <result property="id" column="aid"/>
    <result property="name" column="aname"/>
    <result property="phone" column="aphone"/>
    </resultMap>

    <resultMap id="m3" type="member">
    <id column="id" property="id"/>
    <result property="account" column="account"/>
    <result property="pass" column="pass"/>
    <result property="name" column="name"/>
    <association property="address" column="aid" resultMap="aaa" />
    </resultMap>

    <resultMap id="m4" type="member">
    <id column="id" property="id"/>
    <result property="account" column="account" />
    <result property="name" column="name" />
    <result property="pass" column="pass" />
    <association property="address" column="aid" select="com.fz.mapper.AddressMapper.queryById" />
    </resultMap>

    <select id="queryById" parameterType="int" resultMap="m4">
    select * from db_member m,db_address a where m.id=#{id} and m.aid=a.aid
    </select>

    <select id="query" resultType="HashMap">
    select m.name,a.aname from db_member m,db_address a where m.aid=a.aid
    </select>

    <select id="queryAll" resultType="HashMap">
    select m.name,a.aname from db_member m left JOIN db_address a on m.aid = a.aid
    </select>
    </mapper>


    com.fz.mapper.AddressMapper 接口映射
    public interface AddressMapper {
    public Address queryById(int id);
    }

    com.fz.mapper.AddressMapper.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.fz.mapper.AddressMapper">
    <resultMap id="aa" type="address">
    <result property="id" column="aid"/>
    <result property="name" column="aname"/>
    <result property="phone" column="aphone"/>
    </resultMap>
    <select id="queryById" parameterType="int" resultMap="aa">
    select * from db_address where aid = #{id}
    </select>
    </mapper>


    -- 数据库准备
    -- db_user
    create table db_user(
    account varchar(50) primary key,
    pwd varchar(32)
    )engine=innodb charset=utf8;

    -- db_userinfo
    create table db_userinfo(
    name varchar(32),
    phone varchar(11),
    gender enum('男','女','保密'),
    address varchar(150),
    account varchar(50) unique,
    constraint ufk foreign key(account) references db_user(account) on delete cascade on update cascade
    )engine=innodb charset=utf8;


    insert into db_user values('admin','admin');

    insert into db_userinfo values('李四','13014577068','男','河南省郑州市','admin');

    select * from db_user;
    select * from db_userinfo;

    建立实体类
    src/main/java/com/fz/entity/User.java
    src/main/java/com/fz/entity/UserInfo.java

    延迟加载
    1)、在mybatis-config.xml
    <settings> 全局配置
    <!-- 全局配置参数 -->
    <settings>
    <!-- 延迟加载总开关 -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!-- 设置按需加载 -->
    <setting name="aggressiveLazyLoading" value="false"/>

    <setting name="logPrefix" value="dao."/>
    </settings>


    2)、mapper.xml
    <resultMap id="m4" type="member">
    <id column="id" property="id"/>
    <result property="account" column="account" />
    <result property="name" column="name" />
    <result property="pass" column="pass" />
    <association property="address" column="aid" select="com.fz.mapper.AddressMapper.queryById" />
    </resultMap>

    <select id="queryById" parameterType="int" resultMap="m4">
    select * from db_member m where m.id=#{id}
    </select>

    3)、测试代码

    Member m = mdao.queryById(1);
    System.out.println(m.getAccount());
    System.out.println(m.getName());
    只查询db_member表信息

    System.out.println(m.getAddress().getName()); 开始查询db_address信息

    怕什么真理无穷,进一步有一步的欢喜
  • 相关阅读:
    iOS----------弹窗动画
    书单
    如何屏蔽垃圾短信
    2018年IOS/Android UI设计规范
    关于Keychain
    OpenUDID 和 IDFA 比较
    iOS-----------关于UDID
    iOS-----------设置自定义字体
    【2020Python修炼记】前端开发之 JavaScript 基础
    【2020Python修炼记】前端开发之 CSS基础布局
  • 原文地址:https://www.cnblogs.com/Mkady/p/7122212.html
Copyright © 2011-2022 走看看