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,一经查实,立即删除!

相关文章

织梦标签大全

关键描述调用标签&#xff1a; <meta name"keywords" content"{dede:field namekeywords/}"> <meta name"description" content"{dede:field namedescription functionhtml2text(me)/}"> -------------------------------…

spring的注入

1、构造函数注入的是设计到的标签&#xff1a;constructor-arg属性&#xff1a;index:指定参数在构造函数参数列表的索引位置type:指定参数在构造函数中的数据类型name:指定参数在构造函数中的名称上面三个都是找谁 &#xff0c;给谁赋值&#xff0c;下面两个指的是赋什么值 va…

.Net中堆栈和堆的区别

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

spring的IOC注解

1、创建对象的注解 含义&#xff1a;使用注解的形式创建对象&#xff0c;交给Spring容器管理(需要配置在类上) Component:组件 Controller:web层 Service:service层 Repository:Dao层默认&#xff1a;创建对象的唯一标识&#xff0c;当前类名首字母小写value属性&#xff1a;指…

PowerDesigner 逆向工程 从SQL文件转换成PDM 从PDM转成CDM

从SQL文件逆向工程到PDM&#xff1a; ①选择file -> Reverse Engineer - > Database ②在General选项卡中选择MySQL数据库&#xff0c;点击确定。 ③using script file 选择你的sql文件&#xff0c;最后选择确定。 从PDM转成CDM&#xff1a; ①选择工具 -> General CD…

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;研究内容包括对词法、句法、语义和语用等信息的识别、分类、提取、转换和生成等各种处理方法和实现技…

Eclipse中弹出OLE Exception窗口

楼主事故原因&#xff1a;首先打开一个类&#xff0c;然后因为手速太快&#xff0c;在该类的编辑窗口中右键&#xff0c;单击&#xff0c;不要问我点了啥&#xff0c;我也不知。后面发现该类的编辑器没有显示任何内容&#xff0c;但是可以发现代码依然存在只是没有显示。 关闭…

HDOJ-3790-最短路径问题 解题报告

一道最短路问题。普通最短路问题的边只有一种权值&#xff0c;而此题的边要考虑两种权值。因为节点n<1000&#xff0c;所以不能够使用Floyd算法&#xff0c;时间复杂度较高&#xff0c;这里使用Dijkstra算法解决。 中文描述&#xff0c;题意不再赘述。只是要注意每条边都有距…

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

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

问题之JS中传递数值过大或前置有零时

1、JS中传递数值多大数值会变 var number 00161213313254545433 turnToDetail(number); function turnToDetail(queryNumber){ queryNumber ! 00161213313254545433(true) } 应将数值转换为字符串 var number 00161213313254545433 turn…

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条数据

问题之mybatis-plus中的TableField、Tableld的区别

Tableld&#xff1a;属性与主键的映射关系。 TableField:列与属性的映射关系。

浅蓝色设计类网站模板

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

html5中的一些标签学习总结

html5 contenteditable"true" html5内容可编辑属性 html5 hgroup hgroup字面意思是头部的组&#xff0c;可以将其分拆为h和group来理解。在html5中的作用是用于对网页和区块的标题进行组合。&#xff08;网页是一个最大的区块&#xff0c;所以可以认为hgroup是区块的…

总结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…

Leetcode::Subsets

Given a set of distinct integers, S, return all possible subsets. 分析&#xff1a;题目就是给一个整数集合&#xff0c;给出所以的子集。 基本思想是递归或者说是迭代的方法。用前面得到的集合来构造 后面的。但是怎样高效、方便的构造集合是关键点。比如&#xff0c;开始…

总结2:上传图片至指定服务器

1.前段页面以及JS <!-- HTML --> <section class"content"><div class"row"><div class"col-xs-12"><div class"box box-success"><div class"row" style"margin-top: 1%;margin-bu…