mybatis增删改查以及用注解实现

接着上一篇说,上篇写了怎么把它跑起来,并且只写了一个查询所有的语句。
这篇写增删改查、注解实现增删改查、映射器 (mappers)

上篇链接:mybatis入门之跑起来

实现增删改查

默认是跑起来了mybatis。那实现增删改查,就只需要在UserMapper中添加接口,在UserMapper.xml中写标签和sql语句,然后在测试类中添加测试方法进行测试。

你也可以练习一下,先把接口写上,UserMapper.xml中的内容先自己写。

1、UserMapper类:

public interface UserMapper {
    
    

    // 查询所有用户
    List<User> findAll();

    //根据id查询用户
    User getUserById(int id);

    //插入用户
    int addUser(User user);

    //更新用户
    int updateUser(User user);

    //删除用户
    int deleteUser(int id);

}

2、UserMapper.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 namespace="com.lu.mapper.UserMapper">

    <!--查询所有用户,resulType后要写全,只有命名别名之后才可不写全-->
    <select id="findAll" resultType="com.lu.pojo.User">
        select * from user
    </select>

    <select id="getUserById" parameterType="int"  resultType="com.lu.pojo.User">
        select * from user where id = #{id}
    </select>

    <insert id="addUser" parameterType="com.lu.pojo.User" >
        insert into user (id,username, pwd) values(#{id},#{username}, #{pwd})
    </insert>

    <update id="updateUser" parameterType="com.lu.pojo.User">
        update user set username = #{username}, pwd=#{pwd} where id=#{id}
    </update>

    <insert id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </insert>

</mapper>

3、编写测试方法

在这里插入图片描述
在测试类中,因为导入了juint的依赖,就可以用@Test注解了。
@Test注解下边的方法可以点击左边的绿色那个,就可以单独运行此方法。

    @Test
    public void getUserByIdTest(){
        //创建sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //使用SqlSession创建UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //根据id查询,输入数字
        User getuser = userMapper.getUserById(2);
        System.out.println(getuser);
        //关闭sqlSession
        sqlSession.close();
    }

使用注解实现增删改查

使用注解的话,会更加简介。
把要写在UserMapper.xml中的sql语句直接通过注解写到UserMapper接口中,就可以直接删掉对应的xml了。
还有要改的地方就是在核心配置文件中, 添加SQL 映射语句。

UserMapper接口中添加注解后代码

public interface UserMapper {
    
    

    // 查询所有用户
    @Select("select * from user")
    List<User> findAll();

    //根据id查询用户
    @Select("select * from user where id = #{id}")
    User getUserById(int id);

    //插入用户
    @Insert("insert into user (id, username, pwd ) values(#{id}, #{username}, #{pwd} )")
    int addUser(User user);

    //更新用户
    @Update("update user set username=#{username}, pwd=#{pwd} where id = #{id}")
    int updateUser(User user);

    //删除用户
    @Delete("delete from user where id = #{id}")
    int deleteUser(int id);

}

核心配置文件中添加映射

代码:

    <mappers>
        <mapper class="com.lu.mapper.UserMapper"/>
    </mappers>

添加位置如下图

在这里插入图片描述

XML 映射器

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。
SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):
cache – 该命名空间的缓存配置。
cache-ref – 引用其它命名空间的缓存配置。
resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
sql – 可被其它语句引用的可重用语句块。
insert – 映射插入语句。
update – 映射更新语句。
delete – 映射删除语句。
select – 映射查询语句。

Select 元素的属性

属性 描述
id 在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType 将会传入这条语句的参数的类全限定名或别名
resultType 期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。
resultMap 对外部 resultMap 的命名引用。结果映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。 resultType 和 resultMap 之间只能同时使用一个。

谈谈 映射器(mappers)

以下来自官方文档:
定义 SQL 映射语句。 首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。例如:

<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了。
官方文档有四种,这里给出两种常用的。

猜你喜欢

转载自blog.csdn.net/qq_42524288/article/details/108583066