当前位置: 首页 > article >正文

Mybatis——sql映射文件中的增删查改

映射文件内的增删查改

准备工作

  1. 准备一张数据表,用于进行数据库的相关操作。
  2. 新建maven工程, 导入mysql-connector-java和mybatis依赖。
  3. 新建一个实体类,类的字段要和数据表的数据对应
  4. 编写接口
  5. 编写mybatis主配置文件
public class User {
    private String name;
    private String gender;
    private int age;
    private String address;
    private String email;
    private String qq;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }
}
<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>

            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>

        </environment>
    </environments>
</configuration>
    public class Main {
        public static void main(String[] args) throws IOException {
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
            SqlSession sqlSession = new SqlSessionFactoryBuilder().build(resourceAsStream).openSession();
        }
    }

        后续只需在接口内添加相关方法,编写mapper映射文件进行测试,后面仅展示mapper映射文件。

    新增数据

        插入数据的方法sqlSession.insert("mapper映射文件内insert标签的id","传入的参数"),并且例如增删改的方法需要调用commit方法进行提交。

        编写sql语句时,如果输入的参数为java对象类型,#{}表示接收java对象的属性名 

    <insert id="add" parameterType="com.cc.UserMapper" >
    insert into tb_userinfo (name,gender,age,address,email,qq) values (#{name},#{gender},#{age},#{address},#{email},#{qq});
    </insert>

    这里将user对象作为参数传入。 

            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
            SqlSession sqlSession = new SqlSessionFactoryBuilder().build(resourceAsStream).openSession();
            //插入数据
            User user = new User("张四丰","女",25,"宁夏","1212@qq.com","987654");
            sqlSession.insert("add",user);
            sqlSession.commit();

    删除数据

    根据姓名删除数据:调用sqlSession.delete方法,同时传入一个字符串。

    sqlSession.delete("delete","张大2");

        <delete id="delete" parameterType="String">
            delete from tb_userinfo where name = #{na}
        </delete>

    修改数据

        当要传入多个参数时,除了使用类将数据封装起来,还能使用map集合作为参数传入,注意map的key值要和#{}内的值一致。

        <update id="update" parameterType="map">
            update tb_userinfo set gender=#{gender},address=#{address} where name=#{nam}
        </update>
            Map<String,String> map = new HashMap<>();
            map.put("gender","女");
            map.put("nam","李思思");
            map.put("address","四川");
            sqlSession.update("update",map);
    

    查询数据

    查询所有

        <select id="seleteAll" resultType="com.cc.User">
            select * from tb_userinfo;
        </select>
            List<User> users = sqlSession.selectList("seleteAll");
            for(User u : users){
                System.out.print(u.getName());
                System.out.println(u.getAge());
            }

    条件查询

        <select id="seleteByName" resultType="com.cc.User" parameterType="String">
            select * from tb_userinfo where name = #{name}
        </select>
            User user = sqlSession.selectOne("seleteByName", "李思思");
            System.out.println(user.getGender());
            System.out.println(user.getAddress());

    模糊查询

        <select id="seleteLike" resultType="com.cc.User" parameterType="String">
            select * from tb_userinfo where name like #{name}
        </select>
            User o = sqlSession.selectOne("seleteLike", "%大%");
            System.out.println(o.getName());

    映射文件的相关补充

    #{}与${}

        #{}与${}都能够接收输入的参数,区别是#{}表示一个占位符号,${}表示一个拼接符号,这样会导致sql注入,因此不建议使用${}

    parameterType和resultType

    parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。

    resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。


    http://www.kler.cn/a/521464.html

    相关文章:

  1. Maven运行任何命令都报错“Internal error: java.lang.ArrayIndexOutOfBoundsException”
  2. 作业四:简述mysql 主从复制原理及其工作过程,配置一主两从并验证。
  3. 科普篇 | “机架、塔式、刀片”三类服务器对比
  4. 理解离散傅里叶变换(三.复数) 2025 1 26
  5. leetcode 2412. 完成所有交易的初始最少钱数
  6. 【前端】Electron入门开发教程,从介绍Electron到基础引用以及部分深度使用,附带常见的十个报错问题的解决方案和代码优化。
  7. 【自然语言处理(NLP)】从零实现循环神经网络RNN、Pytorch实现循环神经网络RNN
  8. 消息队列篇--通信协议篇--MQTT(通配式主题,消息服务质量Qos,EMQX的Broker,MqttClient示例,MQTT报文等)
  9. 强化学习 - 基于策略搜索和策略优化: 高斯策略
  10. 【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
  11. RKNN_C++版本-YOLOV5
  12. UE求职Demo开发日志#12 完善击杀获得物品逻辑和UI
  13. 论文阅读 AlphaFold 2
  14. 高效流式大语言模型(StreamingLLM)——基于“注意力汇聚点”的突破性研究
  15. 25_.NET控制台服务器配置
  16. 人物轮廓提取与人脸识别:原理、实现与应用
  17. 论文阅读(五):乳腺癌中的高斯图模型和扩展网络推理
  18. 广东某海水取排水管线工程边坡自动化监测
  19. LeetCode | 不同路径
  20. Java:初识Java