简单使用MyBatis的增删改查

通过id查找到一个用户

<select id="findUserById" parameterType="int" resultType="cn.hd.pojo.User" >
    SELECT * FROM t_user WHERE id =  #{id}
</select>

测试代码

//读取配置文件 以流的形式

InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");


SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);

SqlSession sqlSession = sessionFactory.openSession();

User user = sqlSession.selectOne("test.findUserById", 1);

System.out.println(user);
sqlSession.close();

通过名字模糊查找用户

<!--     #占位符
         $ 字符串拼接 sql注入(不建议使用)
         也是使用占位符  1.直接将 整个当成是参数在代码中传递时手动拼接
         2. sql 提供了 SELECT * FROM t_user WHERE name LIKE  "%"#{name}"%"
         $  # 区别 #号里面的变量名随意 ${变量名} 不能随意写如果是常用类型 必须用value
      
-->
        <select id="findByName" parameterType="String" resultType="cn.hd.pojo.User">
            SELECT * FROM t_user WHERE name LIKE  "%"#{name}"%"
        </select>

测试代码

List<User> user = sqlSession.selectList("test.findByName", "");

添加一个用户

<!--
   如果参数是引用类型  占位符的赋值方式为  ognl表达式的方式
   #{属性名}
 -->
<insert id="addUser" parameterType="cn.hd.pojo.User" >
    INSERT INTO t_user(name,sex,address,balance) VALUES (#{name},#{sex},#{address},#{balance})
</insert>

这种操作并不把新生成的主键保存到对象当中,但是有一种需求,再保存用户的同时,要利用用户主键去保存一条新的纪录。为了满足该需求,提供了新的标签。

<selectKey keyProperty="id" resultType="int" order="AFTER">
    SELECT  LAST_INSERT_ID()
</selectKey>

keyProperty 对应的是对象当中的属性名 keyCloumn 对应的是数据库中的字段名

ResultType 对应的返回结果的类型(int string)分别对应数据库生成代理主键的策略 int 对应自动递增 String uuid

order 顺序 和数据库底层有关 自动自增默认先添加数据在生成主键。但是uuid就是先生成id在去添加数据。

查询语法:SELECT  LAST_INSERT_ID() 适用于自动递增

         SELECT uuid() 适用于uuid

<selectKey keyProperty="id" resultType="int" order="AFTER">
    SELECT  LAST_INSERT_ID()
</selectKey>

测试代码

User user = new User();
user.setName("张三");
user.setSex("");
user.setAddress("中国");
user.setBalance(1000);
int insert = sqlSession.insert("test.addUser", user);
sqlSession.commit();

 如果是增删改,必须要提交事务才能 持久化到数据库

通过id删除用户

<delete id="deleteUserById" parameterType="int">
    DELETE  FROM t_user WHERE id = #{id}
</delete>

测试代码

int insert = sqlSession.delete("test.deleteUserById",5);
sqlSession.commit();

通过id修改用户

<update id="updateUser" parameterType="cn.hd.pojo.User">
    UPDATE t_user SET name = #{name},sex =#{sex},address=#{address},balance=#{balance} WHERE id=#{id}
</update>

测试代码

User user = new User();
user.setId(6);
user.setName("张三");
user.setSex("");
user.setAddress("中国");
user.setBalance(1000);
int row= sqlSession.update("test.updateUser",user);
sqlSession.commit();

猜你喜欢

转载自blog.csdn.net/zyz0225/article/details/80992511