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属性指定

(完)

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