首页 > 其他分享 >MyBatis - 基础学习2 - CRUD

MyBatis - 基础学习2 - CRUD

时间:2022-11-15 18:00:41浏览次数:41  
标签:mapper map UserMapper CRUD 学习 mybatis sqlSession user MyBatis

1.namespace中的包名要和接口包名一致(namespace在xml文件中,接口包名,就是xml的实例化对象)

2.resultType:返回的参数类型(如果返回值是int,可以不用写)

3.parameterType:传入参数或对象类型

我们在配置好了项目的核心配置文件以后(mybatis-config.xml),以及编写好了我们的工具类(MybatisUtils)

完成了这些操作,我们的mybtis程序就只用写三步就可以操作数据库了

第一步:编写接口在我们的Dao包中

public interface UserMapper {
    //编写查询接口
    List<User> getUserList();
    //编写插入接口
    int insertuser(User user);
    //编写修改数据库记录接口
    int update(User user);
    //编写删除接口
    int delete(int id);
}

 

第二步:编写sql语句,在mapper.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">
<!--绑定一个mapper接口-->
<mapper namespace="top.lostyou.dao.UserMapper">
    <!--编写查询的sql代码  id=“那个方法可以使用这个sql” resultType=“返回值类型”-->
<select id="getUserList" resultType="top.lostyou.pojo.User">
    SELECT * from mybatis.user WHERE id=3
</select>
    <!--编写插入的sql语句,parameterType=“传入参数或对象的数据类型”-->
    <!--对象中的属性可以直接取出来,使用  #{}  取值-->
<insert id="insertuser" parameterType="top.lostyou.pojo.User">
    INSERT INTO mybatis.user(id, name, pwd) VALUE(#{id},#{name},#{pwd})
</insert>
    <!--编写修改的sql语句-->
    <update id="update" parameterType="top.lostyou.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id}
    </update>
    <!--编写删除的sql语句-->
    <delete id="delete" parameterType="int">
        DELETE FROM mybatis.user WHERE id=#{id}
    </delete>
</mapper>

 

第三步:测试

public class UserDaoTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //第一种执行sql方式:getMapper
        try {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }}catch (Exception e){
            System.out.println("出错了");
            e.fillInStackTrace();
        }finally {
            //关闭sqlsession
            sqlSession.close();
        }
    }
    //增删改都需要提交事务在mybatis中
    @Test
    public void testinsert(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int key = mapper.insertuser(new User(6,"马明","123789"));
        System.out.println("插入成功!"+key);
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testupdate(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int key = mapper.update(new User(4, "maming", "654321"));
        if (key>0)
        {
            System.out.println("修改成功!");
        }
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testdelete(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int key = mapper.delete(6);
        if(key>0)
        {
            System.out.println("删除成功!");
        }
        sqlSession.commit();
        sqlSession.close();
    }
}

 

二.强大的Map

  • Map传参,直接在sql中取出key
  • 对象传参,直接在sql中取对象的属性即可
  • 只有一个基本类型,可以直接在sql语句中拿到

相比与对象传参,map传参的优势在于它可以自定义传入的数据个数是多少,

如果是利用对象传参,我们使用查询语句时,where后面跟着的条件如果只需一个id,但是对象传参,必须要把其它的参数全部传入,相比于利用效率,非常的低

而map传参的自定义程度高,条件需要几个参数就可以只传入几个参数,提高代码的利用效率

三步举例map传参:

第一步:创建一个接口,但是传入参数是键值对

 User getuser(Map<String,Object> map);

 

第二步:编写sql语句,此时的传入对象类型就可以直接写map(parameterType="map"),然后调用的方法会自动去找到我们map.put的值

    <select id="getuser" resultType="top.lostyou.pojo.User" parameterType="map">
        SELECT * from mybatis.user WHERE id=#{hhh}
    </select>

 

第三步:测试,并且put健值对的值

 @Test
    public void testgetuser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("hhh",2);//与xml的sql语句中的,key名字对应,然后设置值
        User user = mapper.getuser(map);
        System.out.println(user);
        sqlSession.close();
    }

 

三.mybatis中的模糊查询的拓展

mybatis中也有 sql注入的问题,我们在使用LIKE这类关键字的时候,我们应该在xml中把这句sql写死,让用户可操作的,传入的只能是一个变量

以下是一种实现方式:

<select id="getuser" resultType="top.lostyou.pojo.User" parameterType="map">
        SELECT * from mybatis.user where name LIKE "%"#{name}"%"
    </select>

 

它的解决思路是把通配符写到了sql语句中,而不是在实现类中

 

标签:mapper,map,UserMapper,CRUD,学习,mybatis,sqlSession,user,MyBatis
From: https://www.cnblogs.com/5ran2yl/p/16893351.html

相关文章

  • 关于mybatis- SQL 语句中出现 < 的解决方案
    '<'符号和'<='符号不能直接在映射文件中使用。解决方法一字符转义  以上这张表就是MyBatis映射文件特殊字符转义表,'<'符号在XML映射文件中其实是特殊......
  • 学习JAVA如何更快高效的掌握
      作为一个新入门的小白,这部分的内容肯定是要学扎实的。如果Java基础的技术都学的不扎实,那就没办法继续学后面的内容。主要的内容包含:Java基础语法、Java的平台应用以......
  • 深度学习库 SynapseML for .NET 发布0.1 版本
    2021年11月微软开源一款简单的、多语言的、大规模并行的机器学习库SynapseML(以前称为MMLSpark),以帮助开发人员简化机器学习管道的创建。具体参见[1]​​微软深度学习库Sy......
  • 数据库独角兽SingleStore:没有HTAP,机器学习和人工智能都是不切实际的
    SingleStore(前身MemSQL)是一个为数据密集型应用设计的云原生数据库。它是一个分布式的关系型SQL数据库管理系统(RDBMS),具有ANSISQL支持,它以数据摄入、交易处理和查询处......
  • IT项目管理学习笔记4(项目成本管理)
    IT项目管理学习笔记4(项目成本管理)1.项目成本管理的重要性超支(overrun)是实际成本超过成本估算的附加比例或金额成本(cost)是实现一个特定目标而牺牲或者放弃的资源项......
  • 第十四章学习笔记
    第十四章MySQL数据库系统1.MySQL介绍MySQL是一个关系数据库系统在关系数据库中,数据存储在表中。每个表由多个行和列组成。表中的数据相互关联。表也可能与其他表有关......
  • [Python]学习笔记之-正则表达式
           在使用Python做文件处理时,经常需要使用到匹配、搜索功能,这就离不开一个核心的知识:正则表达式。正则表达式(RegularExpression)描述一种字符串匹配的模式(pat......
  • 隐私计算开源框架「隐语SecretFlow」分层拆解和联邦学习算法使用
    本文首发于微信公众号:隐语的小剧场一、“隐语”架构设计全貌1.隐语框架设计思想隐私计算是一个新兴的跨学科领域,涉及密码学、机器学习、数据库、硬件等多个领域。根据......
  • 常见编码的学习
    一:基本知识   1:bit最小的单元字节byte机器语言的单位1byte=8bits1KB=1024byte1MB=1024KB1GB=1024MB   2:二进制 binary八进制 octal十进制 decim......
  • python基础学习
     前言最近几年Python被吹的神乎其神,很多同学都不清楚Python到底能干什么?就盲目去学习Python,今天我就Python的应用领域来简单盘点一下,让想学习Python的同学找对方向不迷......