MyBatis——MyBatis的CRUD(增删改查)

news/2024/7/23 11:05:07 标签: mybatis

1.MyBatis的CRUD

创建工程:

在这里插入图片描述

1.1.查询

1.1.1.单个参数绑定

    //单个参数传递
    public User findUserById(Integer id);
    <!--
        parameterType:指定输入参数的类型
        resultType:指定数据结果封装的数据类型
		#{id}:它代表占位符,相当于原来 jdbc 部分所学的?,都是用于替换实际的数据。
    -->
    <select id="findUserById" parameterType="java.lang.Integer" 
            				  resultType="com.wt.pojo.User" >
        select * from user where id=#{id}<!--只有一个参数时,#{任意书写}-->
    </select>
    @Test
    public void testFindUserById(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User user = userDao.findUserById(41);
        System.out.println(user);
    }

1.1.2.序号参数绑定

    //传递多个参数
    public User findUserByIdAndName(Integer id, String username);
     <select id="findUserByIdAndName" resultType="com.wt.pojo.User" >
        SELECT * FROM user
        WHERE id = #{arg0} AND username = #{arg1} <!--arg0 arg1 arg2 ...-->
    </select>
	<select id="findUserByIdAndName" resultType="com.wt.pojo.User" >
        SELECT * FROM user
        WHERE id = #{param1} AND username = #{param2} <!--param1 param2 param3 ...-->
    </select>
    @Test
    public void testFindUserByIdAndName(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User user = userDao.findUserByIdAndName(41,"张三丰");
        System.out.println(user);
    }

1.1.3.注解参数绑定(推荐)

    //传递多个参数
    public User findUserByIdAndName2(@Param("id") Integer id,
                                     @Param("username")String username);
    <select id="findUserByIdAndName2" resultType="com.wt.pojo.User" >
        SELECT * FROM user
        WHERE id = #{id} AND username = #{username}
    </select>
    @Test
    public void testFindUserByIdAndName2(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User user = userDao.findUserByIdAndName2(41,"张三丰");
        System.out.println(user);
    }

1.1.4.对象参数绑定(推荐)

    //使用对象属性进行参数绑定
    public User findUserByUserInfo(User user);
    <select id="findUserByUserInfo" parameterType="com.wt.pojo.User" 
            									resultType="com.wt.pojo.User">
        SELECT * FROM user
        WHERE id = #{id} AND username = #{username}<!--参数为对象时,#{属性名}-->
    </select>
    @Test
    public void testFindUserByName(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User userInfo = new User();
        userInfo.setId(41);
        userInfo.setUsername("张三丰");
        User user = userDao.findUserByUserInfo(userInfo);
        System.out.println(user);
    }

1.1.5.Map参数绑定

	//使用Map进行参数绑定
	public User findUserByMap(Map<String, Object> map);
    <select id="findUserByMap" 
            parameterMap="java.util.Map" resultType="com.wt.pojo.User">
        SELECT * FROM user
        WHERE id = #{id} AND username = #{username}
    </select>
    @Test
    public void testFindUserByMap(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("id",41);
        map.put("username","张三丰");
        User user = userDao.findUserByMap(map);
        System.out.println(user);
    }

1.1.6.模糊查询(推荐使用${})

    //模糊查询
    public  List<User> findUserByName(String username);
    <select id="findUserByName" parameterType="string" resultType="com.wt.pojo.User">
        <!-- select * from user where username like concat('%',#{username},'%') -->
        select * from user where username like '%${value}%'<!--${}括号中只能是value-->
    </select>
    @Test
    public void testFindUserByName(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.findUserByName("张");
        for (User user : userList) {
            System.out.println(user);
        }
    }

1.1.7.sql注入

    //sql注入
    public User login(User user);
    <select id="login" parameterType="com.wt.pojo.User" resultType="com.wt.pojo.User">
        select * from user where username = '${username}' and password = '${password}'
    </select>
    @Test
    public void testLogin(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User userInfo = new User();
        //' #会使sql语句后面的内容被注释掉,此时无论密码输入什么都会成功
        userInfo.setUsername("张三丰' #");
        userInfo.setPassword("123");
        User user = userDao.login(userInfo);
        System.out.println(user);
    }

#{} 和${}的区别:

  • #{}符
    1. #{}表示一个占位符号 通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换
    2. #{}可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类 型值,#{}括号中可以是 value 或其它名称。
    3. #{}可以有效防止 sql 注入。
  • ${}符
    1. 表示拼接 s q l 串通过 {}表示拼接 sql 串 通过 表示拼接sql串通过{}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换
    2. 可以接收简单类型值或 p o j o 属性值,如果 p a r a m e t e r T y p e 传输单个简单类型值, {}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值, 可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,{}括号中只能是 value

1.1.8.聚合函数查询

//聚合函数查询
public Integer getTotal();
<!--聚合函数查询-->
<select id="getTotal" resultType="int">
    SELECT COUNT(id) FROM user
</select>
@Test
public void testGetTotal(){
    Integer total = userDao.getTotal();
    System.out.println(total);
}

1.2.删除

    //删除
    public void deleteUserById(Integer id);
    <delete id="deleteUserById" parameterType="Integer">
        DELETE FROM user
        WHERE id = #{id}
    </delete>
    @Test
    public void testDeleteUserById(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        userDao.deleteUserById(41);
        sqlSession.commit();
    }

1.3.修改

    //修改
    public void updateUserById(User user);
    <update id="updateUserById" parameterType="com.wt.pojo.User">
        update user set username=#{username},password=#{password},
        birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
    </update>
    @Test
    public void testUpdateUserById(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User user = new User();
        user.setUsername("马德华");
        user.setPassword("111");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("高老庄");
        user.setId(42);
        userDao.updateUserById(user);
        sqlSession.commit();
    }

1.4.添加

    //添加
    public void insertUser(User user);
<insert id="insertUser" parameterType="com.wt.pojo.User">
        <!--
            主键回填:新增之后,获取新增记录的id值
            keyProperty="id":主键对应实体类的属性
            order="AFTER":先执行插入语句,之后再执行查询语句
            resultType="java.lang.Integer":主键的数据类型
        -->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            /*查询出刚刚插入的记录自增长id*/
            select last_insert_id();
        </selectKey>
        insert into user(username,password,birthday,sex,address)
        values(#{username},#{password},#{birthday},#{sex},#{address});
</insert>

或者

	<!--
        useGeneratedKeys=“true”:获取数据库生成的主键
        keyProperty=“id”:主键对应实体类的属性
    -->
    <insert id="insertUser" useGeneratedKeys="true" 
            keyProperty="id" parameterType="com.wt.pojo.User">
        <!--
            主键回填:新增之后,获取新增记录的id值
            keyProperty="id":主键对应实体类的属性
            order="AFTER":先执行插入语句,之后再执行查询语句
            resultType="java.lang.Integer":主键的数据类型

            <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
                /*查询出刚刚插入的记录自增长id*/
                select last_insert_id();
            </selectKey>
         -->
        insert into user(username,password,birthday,sex,address)
        values(#{username},#{password},#{birthday},#{sex},#{address})
    </insert>
    @Test
    public void testInsertUser(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User user = new User();
        user.setUsername("刘德华");
        user.setPassword("111");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("香港");
        userDao.insertUser(user);
        System.out.println("新增记录的id值:"+user.getId());
        sqlSession.commit();
    }

http://www.niftyadmin.cn/n/5275899.html

相关文章

“image.save(image_path)“和“cv2.imwrite(image_path , image)”的区别

两者是保存图像的两种不同方式&#xff0c;分别适用于不同的图像库。 image.save(image_path)是PIL&#xff08;Python Imaging Library&#xff09;库中用于保存图像的方法。它需要将图像对象&#xff08;Image对象&#xff09;保存到指定的文件路径中。PIL库支持多种图像格式…

Zookeeper-快速开始

Zookeeper介绍 简介&#xff1a;ZooKeeper 是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要用来解决分布式集群中应用系统的一致性问题。 设计目标&#xff1a;将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高效…

【matlab】Matlab矩阵计算和示例基础

介绍创建矩阵矩阵运算 3.1 加法和减法3.2 乘法3.3 转置3.4 逆矩阵常用函数 4.1 矩阵乘法4.2 元素级运算4.3 矩阵求和示例 5.1

第二章:垃圾回收

:::info 什么是垃圾回收 ::: 垃圾回收是一种自动管理内存的机制&#xff0c;用于检测和释放程序中不再被引用的内存对象&#xff0c;以避免内存泄漏和提高程序性能。 对象的生命周期&#xff1a;在程序中&#xff0c;对象在被创建时分配内存空间&#xff0c;然后在不再被引用时…

.locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

尊敬的读者&#xff1a; .locked1、locked勒索病毒&#xff0c;一股数字时代的黑暗势力&#xff0c;以其狡猾手法而令人闻风丧胆。这种勒索软件通过各种途径悄悄渗透用户计算机&#xff0c;随后迅速将重要的数据文件加密&#xff0c;使其变成数字迷宫的密码锁。随后&#xff0…

Golang(壹)

爱情不需要华丽的言语&#xff0c;只需要默默的行动。 简介 应用领域&#xff1a; 下载vscode 使用vscode Go下载 - Go语言中文网 - Golang中文社区 下载sdk 解压到文件中&#xff0c;打开sdk解压文件 穿插dos操作系统知识点&#xff1a; 测试go语言环境 看到vscode 的目录结…

溢出以及判断溢出的两种方法(单符号位和双符号位)

先让我们看一道题目 设X-110011,Y100011,用补码求ZX-Y。 解&#xff1a; [X]补1 001101 [Y]补0 100011 [-Y]补1 011101 [X-Y]补 [X]补[-Y]补 1 0011011 0111010 101010 那这时候ZXY101010 结果居然是正值&#xff0c;这很明显就是错误的&#xff08;负数减正数结果应该还是负数…

左右按钮实现滚动轮播Demo(js手搓版本)

提示&#xff1a;适用于当放置按钮空间区域有限&#xff0c;通过左右箭头实现有限空间放置更多的按钮的情形&#xff0c;自适应布局的简单Demo支持二次开发和改造 文章目录 效果图Demo源码解释说明总结 效果图 在该区域存在五个按钮&#xff0c;点击左边按钮向左边滚动&#xf…