Mybatis、使用注解的方式编写用户和角色一对多关系,并使用延迟加载

1、数据库准备

CREATE TABLE `role` (

  `ID` INT(11) NOT NULL COMMENT '编号',
  `ROLE_NAME` VARCHAR(30) DEFAULT NULL COMMENT '角色名称',
  `ROLE_DESC` VARCHAR(60) DEFAULT NULL COMMENT '角色描述',
  PRIMARY KEY  (`ID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT  INTO `role`(`ID`,`ROLE_NAME`,`ROLE_DESC`) VALUES (1,'院长','管理整个学院'),(2,'总裁','管理整个公司'),(3,'校长','管理整个学校');
CREATE TABLE `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(32) NOT NULL COMMENT '用户名称',
  `birthday` DATETIME DEFAULT NULL COMMENT '生日',
  `sex` CHAR(1) DEFAULT NULL COMMENT '性别',
  `address` VARCHAR(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT  INTO `user`(`id`,`username`,`birthday`,`sex`,`address`) VALUES (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');

2、创建一个Maven项目

pom.xml引入约束:

<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>cn.wzq</groupId>
  <artifactId>MyBatis_day04_01_note_user_role_onetomany</artifactId>
  <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <!-- mybatis的坐标 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

2、创建数据库信息配置文件:jdbc.properties

jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf8

jdbc.driver=com.mysql.jdbc.Driver

3、配置核心配置文件

<?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>   
    <!-- 引入数据库配置信息 -->
    <properties resource="jdbc.properties"></properties>
    <!-- 别名配置 -->
   <typeAliases>
          <package name="cn.wzq.mybatis.domin"/>
   </typeAliases>
   <environments default="development">   
      <environment id="development">   
        <transactionManager type="JDBC" />   
        <dataSource type="POOLED">   
          <property name="driver" value="${jdbc.driver}" ></property>   
          <property name="url" value="${jdbc.url}" ></property>   
          <property name="username" value="${jdbc.username}"></property>
          <property name="password" value="${jdbc.password}"></property>
        </dataSource>   
     </environment>   
  </environments>
  <!-- sql映射配置 -->
  <mappers>
      <package name="cn.wzq.mybatis.dao"/>
  </mappers>
</configuration>  

4、创建user和role对象

public class User {

    private Integer id;
    private String username;
    private String sex;
    private String address;
    private Date birthday;

    private List<Role> list;

   //get/set/toString省略;

public class Role {
    private Integer id;
    private String ROLE_NAME;
    private String ROLE_DESC;
    //get/set/toString省略;

5、创建IRoleDao接口

public interface IRoleDao {

    //根据用户查询角色
    @Select(value="select * from role where id = #{id}")
    public Role findRole(int uid);
        
}

6、创建IUserDao接口

public interface IUserDao {
    
    //查询用户下的所有角色
    @Select(value="select * from user")
    @Results(value= {
            @Result(property="id",column="id",id=true),
            @Result(property="username",column="username"),
            @Result(property="sex",column="sex"),
            @Result(property="address",column="address"),
            @Result(property="birthday",column="birthday"),
            @Result(property="list",javaType=List.class,column="id",
                many=@Many(select="cn.wzq.mybatis.dao.IRoleDao.findRole",fetchType=FetchType.LAZY)
            )
    })
    public List<User> findAll();

}

7、测试

    //查询用户下所有角色
    @Test
    public void findAllTest() {
        SqlSession openSession = sqlSessionFactory.openSession();
        IUserDao userDao = openSession.getMapper(IUserDao.class);
        List<User> list = userDao.findAll();
        for (User user : list) {
            System.out.println(user.getId());
            //System.out.println(user.getList()); //需要使用时释放注解
        }

    }

整体目录结构


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net中堆栈和堆的区别

首先堆栈和堆&#xff08;托管堆&#xff09;都在进程的虚拟内存中。&#xff08;在32位处理器上每个进程的虚拟内存为4GB&#xff09; 堆栈stack 1、堆栈中存储值类型 2、堆栈实际上是向下填充&#xff0c;即由高内存地址指向低内存地址填充 3、堆栈的工作方式是先分配内存的变…

SpringMvc的执行过程

Tomcat启动 1、部署项目到Tomcat中 2、启动Tomcat加载Web.xml 3、初始化DispatcherServlet(执行的是init方法) 4、加载配置文件&#xff0c;创建对象交给Spring容器管理 5、通过处理器映射器解析RequestMappin配置&#xff0c;配置‘请求地址’和‘控制器类’的映射关系 小结&a…

自然语言理解——introduction

1.基本概念&#xff1a; NLP&#xff1a;自然语言处理是研究如何利用计算机技术对语言文本&#xff08;句子、篇章或话语等&#xff09;进行处理和加工的一门学科&#xff0c;研究内容包括对词法、句法、语义和语用等信息的识别、分类、提取、转换和生成等各种处理方法和实现技…

利用自定命令打开常用软件,小白秒变大神。

不多说&#xff0c;先来个效果&#xff0c;WIINR打开运行&#xff0c;输入qq(小编自定的命令)&#xff0c;就能打开。 实现步骤&#xff1a; 1、找到快捷方式(以腾讯QQ为例) 2、将腾讯QQ快捷方式复制粘贴到C:\Windows,并修改名称 3、测试&#xff0c;winr代开运行&#xff0c;…

rpm的用法 详解

Linux rpm 命令参数使用详解&#xff3b;介绍和应用&#xff3d; RPM是RedHat Package Manager&#xff08;RedHat软件包管理工具&#xff09;类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包&#xff08;Binary&#xff09;以及源代码包&#xff08;Source&#x…

Android与Libgdx环境配置

此处所说的是基于windows和android版本的libgdx环境配置。 1. 下载所需软件 JDK 1.7。 下载地址&#xff1a; window x86版本地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Android SDK。 在android官网上下载最新版…

问题之sqlyou的使用

当数据过大时一定要注意sqlyou每页只能显示1000条数据

浅蓝色设计类网站模板

浅蓝色设计类网站模板是一款高端大气的设计css3企业网站模板。 模板地址&#xff1a;http://www.huiyi8.com/sc/8673.html 转载于:https://www.cnblogs.com/xkzy/p/3765371.html

总结1:Ajax上传图片至阿里云服务器

1.页面效果以及JS <!-- HTML --> <div style"margin:30px;"><div class"form-horizontal rowt"><div class"control-label col-lg-1">标书分类</div><div class"col-lg-2"><select required&q…

总结4:input文本输入框自动提示

1、页面效果 2、引入CSS/JS <link rel"stylesheet" href"css/jquery-ui.min.css"><script src"https://code.jquery.com/jquery-1.12.4.js"></script><script src"https://code.jquery.com/ui/1.12.1/jquery-ui.js&qu…

MySql数据同步FEDERATED引擎

概要&#xff1a;FEDERATED存储引擎访问在远程数据库的表中的数据&#xff0c;而不是本地的表。这个特性给某些开发应用带来了便利&#xff0c;你可以直接在本地构建一个federated表来连接远程数据表&#xff0c;配置好了之后本地表的数据可以直接跟远程数据表同步。实际上这个…

SpringBoot 配置多数据源(Sql Server、MySql)

创建SpringBoot项目就不说了。(直接使用IDEA创建就好了) 整个目录结构如图&#xff1a;&#xff08;不用管图中报错&#xff0c;项目是在另一台电脑上写的。报错是没有jar包&#xff0c;因为网络比较慢。&#xff09; 1、主要pom.xml <dependencies><dependency>…

SpringBoot 记录操作日志

目录结构&#xff1a; 1、创建springboot项目&#xff0c;添加依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>…

py2.7+pyqt4开发端口检测工具

py2.7pyqt4开发端口检测工具 使用工具&#xff1a;python2.7,pyqt4,pyinstaller,pywin32 先贴代码 1 import sys2 from PyQt4 import QtGui,QtCore3 4 import threading5 import thread6 import os7 import re8 import urllib9 import socket10 import time11 12 13 global max…

opencv 和 parfor

一次遇到两个不熟悉的&#xff0c;因此在一起记一下。 OpenCV的全称是&#xff1a;Open Source Computer Vision Library。 OpenCv是一个基于&#xff08;开源&#xff09;发行的跨平台计算机视觉库&#xff0c;可以运行在Linux,Windows和Mac OS操作系统上。它轻量级而且高效—…

配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...

今天遇到了这个问题&#xff0c; 电脑系统&#xff1a;vs2010 win7系统 iis7 我运行在iis中配置的那个网站后&#xff0c;报错&#xff1a;错误代码 0x800700b7 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节 这个问题原因在于window7的II…

Base64 四种方式的编码和解码

base64与字符串String之间的相互转换 package com.wzq;import javax.xml.bind.DatatypeConverter; import java.io.UnsupportedEncodingException; import java.util.Base64;/*** ClassName Base64Utils* Description: TODO* Author wzq* CreateDate 2019/10/14* UpdateDate 2…

邮件服务器“单点登录”功能

现状分析&#xff1a; 相信我们每个人都有这样的经历&#xff0c;比方说银行卡多的人要具体记忆每张卡的密码挺麻烦&#xff1b;现代人兴 趣广泛&#xff0c;爱好多多&#xff0c;运动健身俱乐部、娱乐游戏休闲、购物理财等各种场合少不了获得入门的“通行证”&#xff0c;要输…

【kafka】 windows平台搭建及使用

一、安装 kafka 需要java环境&#xff1b;kafka 最新版本内置了 zookeeper&#xff0c;所以不需要安装zookeeper&#xff1b;下载kafka最新版本&#xff0c;因为下载的是tgz文件&#xff0c;所以不需要安装&#xff0c;解压到相应的地方就可以了。下载地址&#xff1a;http://…

Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建

1.Linux Mint由Linux Mint Team团队于2006年开始发行&#xff0c;是一份基于Debian和Ubuntu的Linux发行版。其目标是提供一种更完整的即刻可用体验&#xff0c;这包括提供浏览器插件、多媒体编解码器、对DVD播放的支持、Java和其他组件&#xff0c;它也增加了一套定制桌面及各种…