• Mybatis增删改查


    这里会沿用前面的一个文章的项目解构进行增删改查

    学习之前,先认识一下两个符号

    #{}这个是一个占位符,这里的占位符会会在参数上加上引号再替换

    //Java里面是这样写的
    String name = "peter";
    List<User> users = session.selectList("user.getUserByName", name);
    
    //mapper.xml里面是这样的写的,这里注意一点,#{}里面的名字,可以写任何名称都可以
    <select id="getUserByName" parameterType="java.lang.String" resultType="com.test.model.User">
        select * from users where name like #{test}
    </select>
    
    //最终执行的sql语句会变成
    select * from users where name like 'peter'

    ${}这个是字符串拼接符号,不会在参数中添加任何引号,这个符号的弱点是,容易产生sql注入,所以不建议使用除非在你本身的语句当中已经带有引号去防止sql注入

    //java代码是这样的
    String name = "a";
    List<User> users = session.selectList("user.getUserByName", name);
    
    //mapper.xml是这样的,这里需要注意${}里面的名称必须是value,如果是其它名称,会抛异常There is no getter for property named 'xxx' in 'class java.lang.String'
    <select id="getUserByName" parameterType="java.lang.String" resultType="com.test.model.User">
        select * from users where name like '%${value}%'
    </select>
    
    //最终执行代码的语句
    select * from users where name like '%a%'

    事务自动提交的问题:

    一般情况在openSession()的时候,默认是false,如果不加上true,做insert或者update,delete的时候,数据库就不会有真正的操作

    1.新增

    //Java代码部分
    User user = new User();
    user.setId(8);
    user.setName("Jack");
    user.setAge(13);
    
    int result = session.insert("user.insertUser", user);
    
    //mapping.xml部分
    <insert id="insertUser" parameterType="com.test.model.User">
        insert into users(id,name,age) values(#{id},#{name},#{age})
    </insert>

    2.删除

    //Java代码部分
    User user = new User();
    user.setId(2);
    
    int result = session.delete("user.deleteUser",user);
    
    //mapper.xml部分
    <delete id="deleteUser" parameterType="com.test.model.User">
        delete from users where id=#{id}
    </delete>

    3.修改

    //Java部分
    User user = new User();
    user.setId(3);
    user.setName("Kitty");
    user.setAge(78);
    
    int result = session.update("user.updateUser", user);
    
    //mapper.xml部分
    <update id="updateUser" parameterType="com.test.model.User">
        update users set name=#{name}, age=#{age} where id = #{id}
    </update>

    4.查询

    查询语句

    //Java里面是这样写的
    String name = "p";
    List<User> users = session.selectList("user.getUserByName", name);
    
    //mapper是这样写的
    <select id="getUserByName" parameterType="java.lang.String" resultType="com.test.model.User">
        select * from users where NAME like '%${value}%'
    </select>

    selectList 与 selectOne的区别

    selectList - 是查询返回的一个列表

    selectOne - 查询一个结果,查询的结果当中是有不止一个值,程序就会抛异常如Expected one result (or null) to be returned by selectOne(), but found: 3

  • 相关阅读:
    别逃避,是时候来给JVM一记重锤了
    从CAS讲起,真正高性能解决并发编程的原子操作
    深入理解typedef
    【Valse首发】CNN的近期进展与实用技巧(上)
    基于深度学习的目标检测研究进展
    全卷积网络:从图像级理解到像素级理解
    产生式与判别式模型
    游戏后台杂谈:后台的语言、系统与构架
    优化人脸检测网络
    最长的回文子序列
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/10744912.html
Copyright © 2020-2023  润新知