MyBatis操作数据库的方式(api+注解)

目录

一.原生的 API&注解的方式

1. MyBatis-原生的 API 调用

二.注解的方式

使用注解的方式来配置接口方法

注意事项和说明


一.原生的 API&注解的方式

1. MyBatis-原生的 API 调用

在前面项目的基础上,将增删改查,使用 MyBatis 原生的 API 完成,就是直接通过
SqlSession 接口的方法来完成
1. 增加
2. 删除
3. 修改
4. 查询

/**
 * @author 海绵hong
 * @version 1.0
 * MyBatisNativeTest: 演示使用MyBatis原生API操作
 */
public class MyBatisNativeTest {

    //属性
    private SqlSession sqlSession;

    //编写方法完成初始化
    @Before
    public void init() {
        //获取到sqlSession
        sqlSession = MyBatisUtils.getSqlSession();
        //sqlSession 返回的对象是 DefaultSqlSession
        System.out.println("sqlSession--" + sqlSession.getClass());

    }

    //使用sqlSession原生的API调用我们编写的方法[了解]
    @Test
    public void myBatisNativeCrud() {

        //添加
        /**
         *
         *  @Override
         *   public int insert(String statement, Object parameter) {
         *     return update(statement, parameter);
         *   }
         *
         *   statement: 就是接口方法-完整声明
         *   parameter: 入参
         */

        Monster monster = new Monster();
        monster.setAge(100);
        monster.setBirthday(new Date());
        monster.setEmail("kate2@qq.com");
        monster.setGender(0);
        monster.setName("大象精-100");
        monster.setSalary(10000);

        int insert =
                sqlSession.insert("com.hong.mapper.MonsterMapper.addMonster", monster);

        System.out.println("insert---" + insert);
        //删除

        int delete = sqlSession.delete("com.hong.mapper.MonsterMapper.delMonster", 11);
        System.out.println("delete--" + delete);

        //修改

        Monster monster = new Monster();
        monster.setAge(20);
        monster.setBirthday(new Date());
        monster.setEmail("kate3@qq.com");
        monster.setGender(1);
        monster.setName("牛魔王-100");
        monster.setSalary(1000);
        monster.setId(10);//这个一定要有,如果没有就不知道修改哪个对象
        int update =
                sqlSession.update("com.hong.mapper.MonsterMapper.updateMonster", monster);
        System.out.println("update--" + update);

        //查询

        List<Monster> monsters =
                sqlSession.selectList("com.hong.mapper.MonsterMapper.findAllMonster");

        for (Monster monster : monsters) {
            System.out.println("monster--" + monster);
        }

        //如果是增删改, 需要提交事务
        if(sqlSession != null) {
            sqlSession.commit();
            sqlSession.close();
        }

        System.out.println("操作成功...");
    }
}

原生的api调用就是会去找你的MonsterMapper.xml配置的语句

二.注解的方式

我们不去使用xml配置方法去操作数据库,那么我们就可以使用注解的方式操作

首先我们需要去创建一个接口:

使用注解的方式来配置接口方法


/**
 * @author 海绵hong
 * @version 1.0
 * MonsterAnnotation: 使用注解的方式来配置接口方法
 */
public interface MonsterAnnotation {

    //添加monster
    /*

           解读
           1. 使用注解方式配置接口方法addMonster
           2. 回顾xml如何配置
           <insert id="addMonster" parameterType="Monster" useGeneratedKeys="true" keyProperty="id">
                INSERT INTO `monster`
                (`age`, `birthday`, `email`, `gender`, `name`, `salary`)
                VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
            </insert>

            解读
            1. useGeneratedKeys = true 返回自增的值
            2. keyProperty = "id" 自增值对应的对象属性
            3. keyColumn = "id" 自增值对应的表的字段


     */
    @Insert("INSERT INTO `monster` (`age`, `birthday`, `email`, `gender`, `name`, `salary`) " +
            "VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    public void addMonster(Monster monster);

    //根据id删除一个Monster
    /*
        xml文件中的配置
        <delete id="delMonster" parameterType="Integer">
            DELETE FROM `monster` WHERE id = #{id}
        </delete>
     */
    @Delete("DELETE FROM `monster` WHERE id = #{id}")
    public void delMonster(Integer id);

    //修改Monster
    /*
         <update id="updateMonster" parameterType="Monster">
            UPDATE `monster`
            SET `age`=#{age} , `birthday`= #{birthday}, `email` = #{email},
            `gender` = #{gender} , `name`= #{name}, `salary` = #{salary}
            WHERE id = #{id}
        </update>
     */
    @Update("UPDATE `monster` " +
            "SET `age`=#{age} , `birthday`= #{birthday}, `email` = #{email}, " +
            "`gender` = #{gender} , `name`= #{name}, `salary` = #{salary} " +
            "WHERE id = #{id}")
    public void updateMonster(Monster monster);

    //查询-根据id
    /*
        xml配置
        <select id="getMonsterById" resultType="Monster">
            SELECT * FROM `monster` WHERE id = #{id}
        </select>
     */
    @Select("SELECT * FROM `monster` WHERE id = #{id}")
    public Monster getMonsterById(Integer id);

    //查询所有的Monster
    /*
        xml配置
        <select id="findAllMonster" resultType="Monster">
            SELECT * FROM `monster`
        </select>
     */
    @Select("SELECT * FROM `monster`")
    public List<Monster> findAllMonster();
}

这样就是将一个MonsterMapper接口和MonsterMapper.xml配置文件和到一起

当然我们不使用xml文件配置,那么也需要改一下mybatis-config.xml(有数据库配置文件,和需要的jdbc包)

    <mappers>
<!--        <mapper resource="com/hong/mapper/MonsterMapper.xml"/>-->

        <!--解读
           1. 如果是通过注解的方式,可不再使用 MonsterMapper.xml
           2. 但是需要在mybatis-config.xml注册/引入含注解的类
           3. 如果没有引入,不能使用
        -->
        <mapper class="com.hong.mapper.MonsterAnnotation"/>


    </mappers>

测试文件


/**
 * @author 海绵hong
 * @version 1.0
 */
public class MonsterAnnotationTest {

    //属性
    private SqlSession sqlSession;
    private MonsterAnnotation monsterAnnotation;

    @Before
    public void init() {
        //获取到sqlSession
        sqlSession = MyBatisUtils.getSqlSession();
        monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);
        //返回的依然是一个接口的代理对象
        System.out.println("monsterAnnotation--" + monsterAnnotation.getClass());
    }

    @Test
    public void addMonster() {

        Monster monster = new Monster();
        monster.setAge(30);
        monster.setBirthday(new Date());
        monster.setEmail("kate6@qq.com");
        monster.setGender(1);
        monster.setName("狐狸精-100");
        monster.setSalary(1000);
        //使用在接口方法配置注解方式完成对DB操作
        monsterAnnotation.addMonster(monster);
        System.out.println("添加后monster-id-" + monster.getId());

        //如果是增删改, 需要提交事务
        if(sqlSession != null) {
            sqlSession.commit();
            sqlSession.close();
        }

        System.out.println("保存成功...");

    }

    @Test
    public void findAllMonster() {

        //使用接口配置注解的方式操作DB
        List<Monster> allMonster = monsterAnnotation.findAllMonster();
        for (Monster monster : allMonster) {
            System.out.println("monster--" + monster);
        }


        if(sqlSession != null) {
            sqlSession.close();
        }

        System.out.println("查询成功...");
    }
}

注意事项和说明

1. 如 果 是 通 过 注 解 的 方 式 , 就 不 再 使 用 MonsterMapper.xml 文 件 , 但 是 需 要 在
mybatis-config.xml 文件中注册含注解的类 / 接口
2. 使用注解方式 , 添加时 , 如果要返回自增长 id , 可以使用 @Option 注解 , 组合使用
@Insert(value = "INSERT INTO `monster` (`age`, `birthday`, `email`, `gender`, `name`,
`salary`) " +
"VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
public void addMonster(Monster monster)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵hong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值