Mybatis框架整合详解(从数据库创建—到—框架搭建—再到—输出) 3

简介: Mybatis框架整合详解(从数据库创建—到—框架搭建—再到—输出)

连表查询

连表查询分为一对多、多对一和多对多,连表查询的话就只能使用resultMap属性来查询。

子表多对一

要先在子表的bean层添加主表对象并且进行封装

private Grade grade=new Grade();
    public Grade getGrade() {
        return grade;
    }
    public void setGrade(Grade grade) {
        this.grade = grade;
    }
多对一MapperXML层

resultMap标签的        id属性下面用自己命名,type属性映射子表实体类的地址

resultMap标签的        id标签要和数据库id对应,property是和实体类对应column和数据库对应,

result标签也一样

association标签        property属性对应刚才实体类添加的主表实体类的名称,javaType属性映射父表实体类的地址

<?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.xinxi2.dao.StudentMapper">
    <resultMap id="StudentMap" type="com.xinxi2.bean.Student">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="bigname" column="bigname"></result>
        <result property="riqi" column="riqi"></result>
        <result property="age" column="age"></result>
        <association property="grade" javaType="com.xinxi2.bean.Grade">
            <id property="gradeID" column="GradeID"></id>
            <result property="gradeName" column="GradeName"></result>
        </association>
    </resultMap>
    <select id="getList"  resultMap="StudentMap">
        SELECT s.id,name,bigname,age,g.GradeName FROM `student` s,grade g
        where s.GradeID=g.GradeID
    </select>
</mapper>
多对一测试类
StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
            List<Student> list=studentMapper.getList();
            for (Student student1:list){
                //getGrade()是父类对象的get方法后面的getGradeName()方法是父类的班级名称的get方法
                System.out.println(student1.getName()+student1.getGrade().getGradeName());
            }

父表一对多

要先在父表的bean层添加子表列表方法并且进行封装,因为一个班级有多个学生

private List<Student> studentList=new ArrayList<>();
    public List<Student> getStudentList() {
        return studentList;
    }
    public void setStudentList(List<Student> studentList) {
        StudentList = studentList;
    }
一对多MapperXML层

一对多和多对一的sql语句都不用动,resultMap标签type属性和下面的互换一下

collection标签        property属性对应刚才实体类添加的子表实体类列表的名称,ofType属性映射子表实体类的地址

<?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.xinxi2.dao.GradeMapper">
    <resultMap id="GradeMap" type="com.xinxi2.bean.Grade">
        <id property="gradeID" column="GradeID"></id>
        <result property="gradeName" column="GradeName"></result>
        <collection property="studentList" ofType="com.xinxi2.bean.Student">
            <id property="id" column="id"></id>
            <result property="name" column="name"></result>
            <result property="bigname" column="bigname"></result>
            <result property="riqi" column="riqi"></result>
            <result property="age" column="age"></result>
        </collection>
    </resultMap>
    <select id="getGradeList" resultMap="GradeMap">
        SELECT s.id,name,bigname,age,g.GradeName FROM `student` s,grade g
        where s.GradeID=g.GradeID
    </select>
</mapper>
多对一测试类
GradeMapper gradeMapper=sqlSession.getMapper(GradeMapper.class);
            List<Grade> list=gradeMapper.getGradeList();
            for (Grade grade:list){
                System.out.println(grade.getGradeName());//输出班级name
                for (Student student1:grade.getStudentList()){
                    System.out.println(student1.getName()+student1.getBigname());
                }
            }

动态Sql

动态Sql更方便业务实现,mybatis提供了许多标签来使用,使代码更加的简便

where标签
<select id="getListbyStudent" resultType="com.xinxi2.bean.Student" parameterType="com.xinxi2.bean.Student">
        select * form student
        <where>
            <if test="name!=null">
                and name=#{name}
            </if>
            <if test="bigname!=null">
                and bigname=#{bigname}
            </if>
        </where>
    </select>

and一定要加在条件前面,mybatis会自动添加where 和 and,带#{}的name是实体类里面的,不带的是数据库的

set标签
<update id="updateStudent" parameterType="com.xinxi2.bean.Student">
    update student
    <set>
        <if test="name!=null">
            name=#{name},
        </if>
        <if test="bigname!=null">
            bigname=#{bigname},
        </if>
    </set>
    where id=#{id}
</update>

set标签多数用于修改,而set标签是在条件后面加英语符号的”,“。

foreach标签

接口:

List<Student> getListbyList(List<String> list);//参数是列表

实现类:

<select id="getListbyNames" resultType="com.xinxi2.bean.TSysUser">
        SELECT * FROM `t_sys_user` where realName in
        <foreach collection="list" open="(" separator="," close=")" item="goods">
            #{goods}
        </foreach>
    </select>

foreach标签 collection属性对应接口的参数列表,open列表遍历完的开头,separator是列表中格格元素之间的分隔符,open列表遍历完的结尾,item集合中元素迭代时的别名。

trim标签

trim标签说白了就是可以自定义动态sql,前面的where标签和set标签都可以使用trim来自定义。

自定义where
<select id="getListbyStudent01" resultType="com.xinxi2.bean.Student" parameterType="com.xinxi2.bean.Student">
        select * form student
        <trim prefix="where" prefixOverrides="or|and">
            <if test="name!=null">
                and name=#{name}
            </if>
            <if test="bigname!=null">
                and bigname=#{bigname}
            </if>
        </trim>
    </select>

自定义update

<update id="updateListbyStudent02" parameterType="com.xinxi2.bean.Student">
        update student
        <trim prefix="set" suffixOverrides="," suffix="where id=#{id}">
            <if test="name!=null">
                and name=#{name},
            </if>
            <if test="bigname!=null">
                and bigname=#{bigname},
            </if>
        </trim>
    </update>

trim属性

prefix 给sql语句拼接的前缀
suffix 给sql语句拼接的后缀
prefixOverrides 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"
suffixOverrides 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定

(完)

相关文章
|
15天前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
96 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
14天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
32 1
持久层框架MyBatisPlus
|
20天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
13 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
75 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
45 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
28天前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
28 0
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
47 1
|
3月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
3月前
|
SQL Java 数据库连接
【Java 第十三篇章】MyBatis 框架介绍
MyBatis 原名 iBATIS,2001 年由 Clinton Begin 创建,以其简易灵活著称。2010 年更名以重塑品牌形象。MyBatis 通过 SQL 映射文件将 SQL 语句与 Java 代码分离,支持编写原生 SQL 并与方法映射。具备对象关系映射功能,简化数据库记录处理。支持动态 SQL 构建,灵活应对不同查询条件。内置缓存机制,提升查询效率。相比全功能 ORM,MyBatis 提供更高 SQL 控制度和更好的维护性,并易于与 Spring 等框架集成,广泛应用于 Java 数据访问层。
38 0