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

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

创建dao层——重中之重

基础sql

先创建一个Mapper接口,再简单的写个增、删、改、查接口

package com.xinxi2.dao;
import com.xinxi2.bean.Student;
import java.util.List;
public interface StudentMapper {
    List<Student> getList();
    int addStudent(Student student);
    int updateStudent(Student student);
    int deleteStudentbyId(int id);
}

再创建一个Mapper的XML配置文件来实现这个接口

映射规则

mapper标签中的namespace属性映射的是你刚刚创建的Mapper接口,映射的是你刚刚创建的Mapper接口的地址,映射完毕后Mapper接口和MapperXML配置文件的图标会变为一直蓝鸟和一直红鸟如果没有去网上搜索一下,下载一个idea中的Mybatis插件就好了,巨简单,我就不教了。

SpringXMl实现接口

<?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">
    <select id="getList" resultType="com.xinxi2.bean.Student">
        SELECT id,name,bigname,riqi,GradeID,age FROM student
    </select>
    <insert id="addStudent" parameterType="com.xinxi2.bean.Student" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
        insert into student(id,name,bigname,riqi,GradeID,age)
        values (#{id},#{name},#{bigname},#{riqi},#{gradeid},#{age})
    </insert>
    <update id="updateStudent" parameterType="com.xinxi2.bean.Student">
        update student
        set name=#{name},bigname={bigname},riqi=#{riqi},GradeID=#{gradeid},age=#{age}
        where id=#{id}
    </update>
    <delete id="deleteStudentbyId" parameterType="int">
        delete from student where id=#{id}
    </delete>
</mapper>

你们应该也发现了每个标签都有大差不差的属性,下面是我认为常用的一些属性

常用属性

id (都能用)与namespace接口中对应的方法作的映射
parameterType (都能用)传入的参数格式
resultType (用于查询)返回的数据类型,当返回多个参数的时候,建议使用 resultMap
resultMap (用于查询)返回的数据类型,相当于对 resultType的封装。resultType、resultMap两者只能存在一个如果使用resultMap的话要把查询出来的几列数据都要声明一下。

image.png

基础sql测试

测试的漏洞

在测试之前我们要先把dao层的MapperXML配置文件放在target里面的dao层中


测试时是运行target里面的代码,我们这样写现在是有一点问题因为还没有学spring框架,这样写方便学习(注意)每次编写完一次MapperXML的文件都要复制进来一次

开始测试

package com.xinxi2;
import com.xinxi2.bean.Student;
import com.xinxi2.dao.StudentMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class Test {
    public static void main(String[] args) {
        //声明mybatis配置文件
        String resources="mybatis.xml";
        InputStream inputStream=null;
        SqlSessionFactory sqlSessionFactory=null;
        //获得sqlSession对象
        SqlSession sqlSession=null;
        try {
            inputStream= Resources.getResourceAsStream(resources);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            sqlSession=sqlSessionFactory.openSession();
            //创建StudentDao层对象
            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
            List<Student> list=studentMapper.getList();
            for (Student student:list){
                System.out.println(student.getName());//输出name
            }
            Student student=new Student();
            student.setName("牛牛");
            student.setBigname("牛圈");
            student.setRiqi(new Date());
            student.setGradeid(1);
            student.setAge(18);
            studentMapper.addStudent(student);
            //新镇修改删除都要有提交事务
            sqlSession.commit();
            //新增后获取的自增id
            System.out.println(student.getId());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭sqlSession
            sqlSession.close();
        }
    }
}

修改和删除就先省略了,我相信你会

进阶带参sql查询

单参数方式

一个参数的情况下但是两个参数呐?这时候就需要用到我们的@Param()注解了

@Param()注解方式


如果有两个及以上参数并且使用了@Param()注解就不需要parameterType属性了

Map方式

如果使用map方式的话在测试时,要把map当作数组来使用,sql中的#{name}要在创建map键值里要有一个k值是name

实体类方式

上面的三种方式是在特殊的情况下使用,真正常用的是实体类的方式

实体类方式测试
package com.xinxi2;
import com.xinxi2.bean.Student;
import com.xinxi2.dao.StudentMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class Test {
    public static void main(String[] args) {
        //声明mybatis配置文件
        String resources="mybatis.xml";
        InputStream inputStream=null;
        SqlSessionFactory sqlSessionFactory=null;
        //获得sqlSession对象
        SqlSession sqlSession=null;
        try {
            inputStream= Resources.getResourceAsStream(resources);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            sqlSession=sqlSessionFactory.openSession();
            //创建StudentDao层对象
            Student student=new Student();
            student.setName("牛牛");
            student.setBigname("牛圈");
            student.setId(1);
            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
            List<Student> list=studentMapper.getListbyStudent(student);
            for (Student student1:list){
                System.out.println(student1.getName());//输出name
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭sqlSession
            sqlSession.close();
        }
    }
}


相关文章
SQL XML Java
32 0
|
29天前
|
SQL Java 数据库连接
区分iBatis与MyBatis:两个Java数据库框架的比较
总结起来:虽然从技术角度看,iBATIS已经停止更新但仍然可用;然而考虑到长期项目健康度及未来可能需求变化情况下MYBATISS无疑会是一个更佳选择因其具备良好生命周期管理机制同时也因为社区力量背书确保问题修复新特征添加速度快捷有效.
70 12
|
2月前
|
SQL XML Java
MyBatis框架如何处理字符串相等的判断条件。
总的来说,MyBatis框架提供了灵活而强大的机制来处理SQL语句中的字符串相等判断条件。无论是简单的等值判断,还是复杂的条件逻辑,MyBatis都能通过其标签和属性来实现,使得动态SQL的编写既安全又高效。
152 0
|
3月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
276 0
|
5月前
|
人工智能 数据挖掘 API
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
546 21
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
|
5月前
|
Java 数据库 Docker
基于neo4j数据库和dify大模型框架的rag模型搭建
基于neo4j数据库和dify大模型框架的rag模型搭建
1159 35
|
6月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
302 14
|
7月前
|
Oracle 关系型数据库 Java
|
7月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
8月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
796 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡