mybatis--增删改查

上一篇博客我们将了mybatis项目的原理和搭建一个查询的小demo,今天我们就对mybatis的增删该查做一下介绍,具体的环境我就不说了,大家需要的话可以参考博客:mybatis环境搭建,上一篇博客我们讲了其实mapper.xml中我们主要需要写的就是mapped statement,今天我们就讲一下User.xml文件的编写和客户端的调用。所以我下边的xml就是mapper.xml中的mapped statement。

查询

根据ID查询单个实体

<select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
        SELECT * FROM USER WHERE ID=#{id}
    </select>

id表示mapped statement的id,传入参数(parameterType)是int类型,mybatis的输出类型是User(pojo),#{id}表示我们平时写java语言的时候的占位符“?”。

客户端

// 根据id查询用户信息
    @Test
    public void findUserById() throws IOException {

        // mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 1.创建会话工厂,传入mybatis的配置文件的信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 2.通过工厂得到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 3.通过sqlSession操作数据库
        // 第一个参数:映射文件中的statement的id,等于命名空间(ps:test)——satatementId(ps:findUserById)
        // 第二个参数:置顶和映射文件中匹配的parameterType的参数
        User user = sqlSession.selectOne("test.findUserById", 1);
        System.out.println("user.name" + user.getUsername());

        // 释放资源
        sqlSession.close();

    }

根据名称模糊查询

<!-- 根据用户名模糊查询用户信息,可能返回多条记录
        resultType:指定的就是单挑记录锁映射的java对象类型
        ${}表示拼接字符串,将接收的内容,不加任何修饰的凭借到sql中
        使用${}凭借sql,会引起sql注入 
        ${}:接受输入的内容,如果传入的是简单类型,${}只能使用value
     -->
    <select id="findUserByName" parameterType="String" resultType="cn.itcast.mybatis.po.User">
        SELECT * FROM USER WHERE USERNAME LIKE '%${value}%'
    </select>

上边的代码中’% value {value}就是我们java中的OGNL表达式,而他的作用就是传入我们是什么,在这个sql中就表示什么信息

模糊查询客户端调用

// mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        // 1.创建会话工厂,传入mybatis的配置文件的信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 2.通过工厂得到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 3.通过sqlSession操作数据库
        // 第一个参数:映射文件中的statement的id,等于命名空间(ps:test)——satatementId(ps:findUserById)
        // 第二个参数:置顶和映射文件中匹配的parameterType的参数
        List<User> list = sqlSession.selectList("test.findUserByName", "王");
        System.out.println("user.name");
        System.out.println(list);
        // 释放资源
        sqlSession.close();

添加信息

添加用户,返回用户实体

<!-- 添加用户
    parameterType:指定输入的参数类型(包括用户信息)
    #{}中指定pojo的属性名,接受到pojo对象的属性值
    mybatis也是通过OGNL来获取属性的值
 -->
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User" >
    <!--select LAST_INSERT_ID() :得到刚刚在insert进去记录的主键值,值适用于自增列 -->
    <!-- keyProperty:将查询到的主键值设置到parameterType置顶的对象的哪个属性 -->
    <!-- order="AFTER":select LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序 -->
<!--        resultType:指定结果的类型 -->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            select LAST_INSERT_ID()
        </selectKey>
        insert into User(username,birthday,sex,address) value (#{username},#{birthday},#{sex},#{address})
</insert>

因为我的mybatis用的数据库是mysql,而主键用的是自增列,所以我在插入之间获取一下插入的主键信息,这样返回的实体就会是含有主键信息。

客户端调用

        // mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        // 1.创建会话工厂,传入mybatis的配置文件的信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 2.通过工厂得到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 3.通过sqlSession操作数据库
        User user = new User();
        user.setUsername("孟海滨");
        user.setBirthday(new Date());
        user.setAddress("万达广场");
        user.setSex("1");
        sqlSession.insert("test.updateUser",user);
        //提交事务
        sqlSession.commit();
        // 关闭会话,释放资源
        sqlSession.close();

删除

根据id查询某个信息

    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id=#{id}

    </delete>

客户端调用

// mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        // 1.创建会话工厂,传入mybatis的配置文件的信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);
        // 2.通过工厂得到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 3.通过sqlSession操作数据库
        sqlSession.delete("test.deleteUser",30);
        //提交事务
        sqlSession.commit();
        // 关闭会话,释放资源
        sqlSession.close();

    }

更新

更新实体

<!-- 更新用户
    需要用户的id和用户信息
    #{id}:从传入的user实体中获取对应属性的值
 -->
<update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}  where id=#{id}
</update>

更新实体客户端

// mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        // 1.创建会话工厂,传入mybatis的配置文件的信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 2.通过工厂得到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 3.通过sqlSession操作数据库
        User user = new User();
        user.setId(32);
        user.setUsername("孟海滨是个大帅哥11");
        user.setBirthday(new Date());
        user.setAddress("万达广场");
        user.setSex("1");
        sqlSession.insert("test.updateUser",user);
        //提交事务
        sqlSession.commit();
        // 关闭会话,释放资源
        sqlSession.close();

小结

是不是非常的方便,当我们吧xml写好以后,就可以按照传统的ROM框架的思想来写代码了,而且客户端因为是小Demo,所以代码难免会有重复,当我们在以后的博客把他们来封装起来以后,就会发现其实mybatis是非常的简单。而且因为sql的问题,对于不太熟悉ORM框架的人,也是相对比较容易进行代码优化。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值