3、Mybatis的CRUD实现

 


------------恢复内容开始------------

1、实体类配置文件解释:

复制代码
<?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">

<!--命名空间:绑定UserDao相当于实现这个接口-->
<mapper namespace="com.zhixi.dao.IUserDao">
    
    <!--不需要再写接口的实现类,在配置文件里写sql即可-->
    <select id="getUserList" resultType="com.zhixi.pojo.User">
        select * from mybatis.user;
    </select>
    <insert id=""></insert>
</mapper>
复制代码

在配置文件中写CRUD代码即可

1、namespace
namespace中的包名要和Dao/mapper接口的包名- -致!
2、select
选择,查询语句;

  • id:就是对应的namespace中的方法名;
  • resultType: Sq|语句执行的返回值类型!
  • parameterType :参数类型!

 

2、编写代码

1、根据id查询用户

  1、在dao层接口编写业务类型

public interface IUserDao {/**
     * 根据用户id查询用户
     */ User getUserById(int id);
}

  2、编写实现类(.xml)中的配置

复制代码
<?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">

<!--命名空间:绑定UserDao相当于实现这个接口-->
<mapper namespace="com.zhixi.dao.IUserDao">

    <!--不需要再写接口的实现类,在配置文件里写sql即可-->
    <select id="getUserById" resultType="com.zhixi.pojo.User" parameterType="int">
        select * from mybatis.user where id = #{id}
    </select>
</mapper>
复制代码

  3、测试类

复制代码
package com.zhixi.Dao;

import com.zhixi.dao.IUserDao;
import com.zhixi.pojo.User;
import com.zhixi.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class IUserDaoTest {

    @Test
    public void getUserByIdTest(){
        //1、获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2、获取映射器接口
        IUserDao mapper = sqlSession.getMapper(IUserDao.class);

        //3、调用接口中根据id查询用户的方法
        User user = mapper.getUserById(1);
        System.out.println(user);

        sqlSession.close();
    }
}
复制代码

 2、增删改查:增删改需要提交事务

IUserDao:编写业务功能

复制代码
package com.zhixi.dao;

import com.zhixi.pojo.User;

import java.util.List;

/**
 * @author zhangzhixi
 */
public interface IUserDao {
    /**
     * 查询所有的用户
     */
    List<User> getUserList();

    /**
     * 根据用户id查询用户
     */
    User getUserById(int id);

    /**
     * 添加用户
     */
    int addUser(User user);

    /**
     * 删除用户
     */
    int delUser(int id);

    /**
     * 修改用户
     */
    int updateUser(User user);
}
复制代码

UserMapper.xml:接口的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?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">
 
<!--命名空间:绑定UserDao相当于实现这个接口-->
<mapper namespace="com.zhixi.dao.IUserDao">
 
    <!--不需要再写接口的实现类,在配置文件里写sql即可-->
          id是接口中的方法名                   
 
    <select id="getUserList" resultType="com.zhixi.pojo.User">
        /*查询所有用户*/
        select * from mybatis.user;
    </select>
 
    <select id="getUserById" resultType="com.zhixi.pojo.User" parameterType="int">
        /*根据id查询用户*/
        select * from mybatis.user where id = #{id};
    </select>
 
    <!--对象中的属性可以直接取出来-->
    <insert id="addUser" parameterType="com.zhixi.pojo.User">
        /*插入用户*/
        insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd});
    </insert>
 
    <delete id="delUser" parameterType="int">
        /*删除用户*/
        delete from mybatis.user where id = #{id};
    </delete>
 
    <update id="updateUser" parameterType="com.zhixi.pojo.User">
        /*修改用户*/
        update mybatis.user set name=#{name},pwd=#{pwd}  where id = #{id};
    </update>
</mapper>

测试类:添加背景的就是固定代码

复制代码
package com.zhixi.Dao;

import com.zhixi.dao.IUserDao;
import com.zhixi.pojo.User;
import com.zhixi.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class IUserDaoTest {
    @Test
    public void test() {
        //1、获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        IUserDao userDao = sqlSession.getMapper(IUserDao.class);
        List<User> userList = userDao.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        //关闭流
        sqlSession.close();
    }

    @Test
    public void getUserByIdTest() {
        //1、获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2、获取映射器接口
        IUserDao mapper = sqlSession.getMapper(IUserDao.class);

        //3、调用接口中根据id查询用户的方法
        User user = mapper.getUserById(1);
        System.out.println(user);

        sqlSession.close();
    }

    @Test
    public void addUserTest() {
        //1、获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2、获取映射器接口
        IUserDao mapper = sqlSession.getMapper(IUserDao.class);
        //3、插入
        int demo = mapper.addUser(new User(6, "demo", "123"));
        sqlSession.commit();
        if (demo > 0) {
            System.out.println("插入用户成功!");
        }

        sqlSession.close();
    }

    @Test
    public void delUserTest() {
        //1、获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2、获取映射器接口
        IUserDao mapper = sqlSession.getMapper(IUserDao.class);
        //3、插入
        int i = mapper.delUser(6);
        //提交事务
        sqlSession.commit();

        if (i > 0) {
            System.out.println("删除用户成功!");
        }
        sqlSession.close();
    }

    @Test
    public void updateUserTest() {
        //1、获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2、获取映射器接口
        IUserDao mapper = sqlSession.getMapper(IUserDao.class);
        //3、修改
        int i = mapper.updateUser(new User(4, "zhangzhixi", "zhixi158"));
        if (i > 0) {
            System.out.println("修改数据成功!");
        }
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }
}
复制代码

 3、模糊查询

IUserDao:

public interface IUserDao {
    /**
     * 模糊查询
     */
    List<User> getUserLike(String value);
}

UserMapper:

复制代码
<?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">

<!--命名空间:绑定UserDao相当于实现这个接口-->
<mapper namespace="com.zhixi.dao.IUserDao">

    <select id="getUserLike" resultType="com.zhixi.pojo.User" parameterType="String">
        /*模糊查询*/
        select * from mybatis.user where name like "%"#{value}"%";
    </select>

</mapper>
复制代码

测试:

复制代码
public void selUserLikeTest() {
        //1、获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2、获取映射器接口
        IUserDao mapper = sqlSession.getMapper(IUserDao.class);

        List<User> userLike = mapper.getUserLike("z");
        for (User user : userLike) {
            System.out.println(user);
        }

        sqlSession.close();
    }
复制代码

找到名字中带有z的人、这种字符串拼接的方式容易造成SQL注入,需要注意,在使用时候常用:

/*模糊查询*/
select * from mybatis.user where name like #{value};
List<User> userLike = mapper.getUserLike("%z%");  
posted @   Java小白的搬砖路  阅读(141)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示