day04-原生的API&注解方式

[复制链接]
发表于 2023-2-25 19:48:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
原生的API&注解方式

1.MyBatis原生的API调用

1.1原生API快速入门

需求:在前面的项目基础上,使用MyBatis原生的API完成,即直接通过SqlSession接口的方法来完成操作
1.2代码实现

MyBatisNativeTest.java,演示原生的API操作
其实底层还是使用的映射的xml文件的sql语句
  1. package com.li.mapper;
  2. import com.li.entity.Monster;
  3. import com.li.util.MybatisUtils;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. import java.util.Date;
  8. import java.util.List;
  9. /**
  10. * @author 李
  11. * @version 1.0
  12. * 演示使用 Mybatis原生API操作
  13. */
  14. public class MyBatisNativeTest {
  15.     private SqlSession sqlSession;
  16.     //初始化方法
  17.     @Before
  18.     public void init() {
  19.         sqlSession = MybatisUtils.getSqlSession();
  20.         //sqlSession的运行类型是DefaultSqlSession
  21.         System.out.println("sqlSession运行类型--" + sqlSession.getClass());
  22.     }
  23.     //使用sqlSession原生的API调用编写的方法
  24.     //其实还是去找映射的Mapper.xml文件的sql语句
  25.     @Test
  26.     public void myBatisNativeCrud() {
  27.         //添加
  28.         /*
  29.          *   @Override
  30.          *   public int insert(String statement, Object parameter) {
  31.          *     return update(statement, parameter);
  32.          *   }
  33.          *  statement-接口方法的完整路径
  34.          *  parameter-接口方法的入参
  35.          */
  36.         Monster monster = new Monster();
  37.         monster.setAge(100);
  38.         monster.setBirthday(new Date());
  39.         monster.setEmail("[email protected]");
  40.         monster.setGender(0);
  41.         monster.setName("猫精-999");
  42.         monster.setSalary(1000);
  43.         int insert =
  44. <mappers>
  45.    
  46.    
  47.     <mapper />
  48. </mappers>    sqlSession.insert("com.li.mapper.MonsterMapper.addMonster", monster);
  49.         System.out.println("insert--" + insert);
  50.         //删除
  51.         int delete =
  52. <mappers>
  53.    
  54.    
  55.     <mapper />
  56. </mappers>    sqlSession.delete("com.li.mapper.MonsterMapper.delMonster", 6);
  57.         System.out.println("delete--" + delete);
  58.         //修改
  59.         Monster monster2 = new Monster();
  60.         monster2.setAge(22);
  61.         monster2.setBirthday(new Date());
  62.         monster2.setEmail("[email protected]");
  63.         monster2.setGender(0);
  64.         monster2.setName("牛魔王");
  65.         monster2.setSalary(8888);
  66.         monster2.setId(3);//要带上id,如果没有就不知道修改哪个对象了
  67.         int update =
  68. <mappers>
  69.    
  70.    
  71.     <mapper />
  72. </mappers>    sqlSession.update("com.li.mapper.MonsterMapper.updateMonster", monster2);
  73.         System.out.println("update--" + update);
  74.         //查询--除了查询,其他的都要使用事务提交
  75.         List<Monster> monsters =
  76. <mappers>
  77.    
  78.    
  79.     <mapper />
  80. </mappers>    sqlSession.selectList("com.li.mapper.MonsterMapper.findAllMonster");
  81.         for (Monster monster3 : monsters) {
  82. <mappers>
  83.    
  84.    
  85.     <mapper />
  86. </mappers>System.out.println("monster--" + monster3);
  87.         }
  88.         if (sqlSession != null) {
  89. <mappers>
  90.    
  91.    
  92.     <mapper />
  93. </mappers>sqlSession.commit();
  94. <mappers>
  95.    
  96.    
  97.     <mapper />
  98. </mappers>sqlSession.close();
  99.         }
  100.         System.out.println("操作成功!");
  101.     }
  102. }
复制代码
2.MyBatis注解方式操作

2.1注解方式快速入门

之前我们是使用xml文件的方式来实现接口声明的方法,现在使用注解方式来完成增删改查
(1)创建接口 MonsterAnnotation.java,添加注解
  1. package com.li.mapper;
  2. import com.li.entity.Monster;
  3. import org.apache.ibatis.annotations.Delete;
  4. import org.apache.ibatis.annotations.Insert;
  5. import org.apache.ibatis.annotations.Select;
  6. import org.apache.ibatis.annotations.Update;
  7. import java.util.List;
  8. /**
  9. * @author 李
  10. * @version 1.0
  11. * MonsterAnnotation:使用注解的方式来配置我们的接口方法
  12. */
  13. public interface MonsterAnnotation {
  14.     //添加 monster
  15.     /**
  16.      * xml文件的配置方式:
  17.      * <insert id="addMonster" parameterType="Monster"
  18.      * useGeneratedKeys="true" keyProperty="id">
  19.      * INSERT INTO `monster`
  20.      * (`age`,`birthday`,`email`,`gender`,`name`,`salary`)
  21.      * VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})
  22.      * </insert>
  23.      */
  24.     @Insert(value = "INSERT INTO `monster` " +
  25. <mappers>
  26.    
  27.    
  28.     <mapper />
  29. </mappers>"(`age`,`birthday`,`email`,`gender`,`name`,`salary`) " +
  30. <mappers>
  31.    
  32.    
  33.     <mapper />
  34. </mappers>"VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})")
  35.     public void addMonster(Monster monster);
  36.     //根据id删除一个Monster
  37.     @Delete(value = "DELETE FROM `monster` WHERE `id`=#{id}")
  38.     public void delMonster(Integer id);
  39.     //修改Monster
  40.     //注解配置时value可以省略
  41.     @Update("UPDATE `monster` " +
  42. <mappers>
  43.    
  44.    
  45.     <mapper />
  46. </mappers>"SET `age`=#{age},`birthday`=#{birthday},`email`=#{email}," +
  47. <mappers>
  48.    
  49.    
  50.     <mapper />
  51. </mappers>"gender`=#{gender},`name`=#{name},`salary`=#{salary} " +
  52. <mappers>
  53.    
  54.    
  55.     <mapper />
  56. </mappers>"WHERE `id`=#{id};")
  57.     public void updateMonster(Monster monster);
  58.     //查询-根据id
  59.     @Select("SELECT * FROM `monster` WHERE id=#{id}")
  60.     public Monster getMonsterById(Integer id);
  61.     //查询所有的Monster
  62.     @Select("SELECT * FROM `monster`")
  63.     public List<Monster> findAllMonster();
  64. }
复制代码
(2)修改mybatis-config.xml,对MonsterAnnotation 进行注册
  1. <mappers>
  2.    
  3.    
  4.     <mapper />
  5. </mappers>
复制代码
(3)测试
  1. package com.li.mapper;import com.li.entity.Monster;import com.li.util.MybatisUtils;import org.apache.ibatis.session.SqlSession;import org.junit.Before;import org.junit.Test;import java.util.Date;import java.util.List;/** * @author 李 * @version 1.0 */public class MonsterAnnotationTest {    private SqlSession sqlSession;    private MonsterAnnotation monsterAnnotation;    @Before    public void init() {        sqlSession = MybatisUtils.getSqlSession();        monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);        //class com.sun.proxy.$Proxy11        System.out.println("monsterAnnotation的运行类型=" + monsterAnnotation.getClass());    }    @Test    public void addMonster() {        Monster monster = new Monster();        monster.setAge(99);        monster.setBirthday(new Date());        monster.setEmail("[email protected]");        monster.setGender(0);        monster.setName("狐狸精");        monster.setSalary(3000);        //使用在接口方法配置注解的方式完成对DB的操作        monsterAnnotation.addMonster(monster);        //如果是增删改,需要提交事务        if (sqlSession != null) {<mappers>
  2.    
  3.    
  4.     <mapper />
  5. </mappers>sqlSession.commit();<mappers>
  6.    
  7.    
  8.     <mapper />
  9. </mappers>sqlSession.close();        }    }    @Test    public void findAllMonster() {        //使用接口方法配置注解的方式完成操作        List allMonster = monsterAnnotation.findAllMonster();        for (Monster monster : allMonster) {<mappers>
  10.    
  11.    
  12.     <mapper />
  13. </mappers>System.out.println("monster=" + monster);        }        if (sqlSession != null) {<mappers>
  14.    
  15.    
  16.     <mapper />
  17. </mappers>sqlSession.close();        }    }}
复制代码
2.2注意事项和使用细节


  • 如果是通过注解的方式,就不再使用MonsterMapper.xml文件,但是需要在mybatis的配置文件中引入含注解的类/接口
  • 添加时,如果要返回自增长的id值,可以使用@Option注解,组合使用
    1. /**
    2. *  1.useGeneratedKeys = true 返回自增的值
    3. *  2.keyProperty = "id" 自增对应的对象属性
    4. *  3.keyColumn = "id" 自增的表字段
    5. *  4.如果 keyProperty 和 keyColumn 的值相同,可以省略 keyColumn
    6. */
    7. @Insert(value = "INSERT INTO `monster` " +
    8.         "(`age`,`birthday`,`email`,`gender`,`name`,`salary`) " +
    9.         "VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})")
    10. @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
    11. public void addMonster(Monster monster);
    复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表