Java MyBatis增删改查

User.xml配置文件

    <!-- 添加用户 -->
    <insert id="saveUser" parameterType="cn.zdfy.User">
        <!-- selectKey 标签实现主键返回 -->
        <!-- keyColumn:主键对应的表中的哪一列 -->
        <!-- keyProperty:主键对应的pojo中的哪一个属性 -->
        <!-- order:设置在执行insert语句前执行查询id的sql,还是在执行insert语句之后执行查询id的sql -->
        <!-- resultType:设置返回的id的类型 -->
        <selectKey keyColumn="id" keyProperty="id" order="AFTER"
            resultType="int">
            select last_insert_id()
        </selectKey>
        insert into user(username,birthday,sex,address) values
        (#{username},#{birthday},#{sex},#{address})
    </insert>

测试代码

// 保存用户
    @Test
    public void fun3() {
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 5. 执行SqlSession对象执行保存
        User user = new User();
        user.setUsername("张大佛爷33333333333");
        user.setSex("1");
        user.setBirthday(new Date());
        user.setAddress("中国33333333333");
        sqlSession.insert("saveUser", user);
        // 6. 打印结果
        System.out.println(user);
        // 事务提交
        sqlSession.commit();
        // 7. 释放资源
        sqlSession.close();
    }

User.xml配置文件

<!-- 删除用户 -->
<delete id="deleteUserById" parameterType="int">
    delete from user where id=#{id}
</delete>

测试代码

// 删除用户
@Test
public void fun5() {
    // 4. 创建SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 5. 执行SqlSession对象执行删除
    sqlSession.delete("deleteUserById", 28);
    // 事务提交
    sqlSession.commit();
    // 7. 释放资源
    sqlSession.close();
}

User.xml配置文件

<!-- 更新用户 -->
<update id="updateUser" parameterType="cn.zdfy.User">
    update user set username = #{username} where id = #{id}
</update>

测试代码

// 更新用户
    @Test
    public void fun4() {
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = new User();
        user.setId(27);
        user.setUsername("张大佛爷update");
        user.setSex("1");
        user.setBirthday(new Date());
        user.setAddress("中国update");
        // 5. 执行SqlSession对象执行更新
        sqlSession.update("updateUser", user);
        // 6. 打印结果
        System.out.println(user);
        // 事务提交
        sqlSession.commit();
        // 7. 释放资源
        sqlSession.close();
    }

User.xml配置文件

<!-- id:statement的id 或者叫做sql的id -->
<!-- parameterType:声明输入参数的类型 -->
<!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
<!-- #{}:输入参数的占位符,相当于jdbc的? -->
<select id="queryUserById" parameterType="Integer" resultType="cn.zdfy.User">
    select * from user where id = #{id}
</select>

//=====================================================//
<!-- 根据用户名称模糊查询用户列表 
#{value} select * from user where id = ? 占位符 ? == '五' 
${value} select * from user where username like 字符串拼接 ? == 五 -->

<select id="findUserByUsername" parameterType="String"
    resultType="cn.zdfy.User">
    select * from `user` where username like "%"#{value}"%"
</select>

#{}和${}

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

parameterType和resultType

parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List

selectOne和selectList

selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
selectList可以查询一条或多条记录。

猜你喜欢

转载自blog.csdn.net/qg_zhang/article/details/79534124