原生的API&注解的方式
MyBatis-原生的API 调用
应用实例
需求
感兴趣的可以看一下博主前面的项目----自己实现MyBatis 底层机制–抽丝剥茧(上).
在前面项目的基础上,将增删改查,使用MyBatis 原生的API 完成,就是直接通过SqlSession 接口的方法来完成。
1.增加 2. 删除
3.修改 4. 查询
代码实现
- 创建src\test\java\com\nlc\mapper\MyBatisNativeTest.java, 完成添加数据
public class MyBatisNativeTest { //这个是Sql 会话,通过它可以发出sql 语句 private SqlSession sqlSession; private MonsterMapper monsterMapper; @Before public void init() throws Exception { //通过SqlSessionFactory 对象获取一个SqlSession 会话 sqlSession = MyBatisUtils.getSqlSession(); //获取MonsterMapper 接口对象, 该对象实现了MonsterMapper monsterMapper = sqlSession.getMapper(MonsterMapper.class); System.out.println(monsterMapper.getClass()); } //使用sqlSession 原生的API 调用我们编写的方法 @Test public void myBatisNativeCrud() { //=============add start================== Monster monster = new Monster(); monster.setAge(200); monster.setBirthday(new Date()); monster.setEmail("nlc100@sohu.com"); monster.setGender(2); monster.setName("白骨精"); monster.setSalary(9234.89); sqlSession.insert("com.nlc.mapper.MonsterMapper.addMonster", monster); //=============add end=================== if (sqlSession != null) { sqlSession.commit(); sqlSession.close(); } System.out.println("操作成功!"); } }
- 修改src\test\java\com\nlc\mapper\MyBatisNativeTest.java, 完成删除/修改/查询数据.
//使用sqlSession 原生的API 调用我们编写的方法 @Test public void myBatisNativeCrud() { //===========删除start====================== sqlSession.delete("com.nlc.mapper.MonsterMapper.delMonster", 3); //===========删除end====================== //===========update start====================== Monster monster = new Monster(); monster.setAge(300); monster.setBirthday(new Date()); monster.setEmail("tn100@sohu.com"); monster.setGender(2); monster.setName("狮驼国妖精"); monster.setSalary(9234.89); monster.setId(7); sqlSession.update("com.nlc.mapper.MonsterMapper.updateMonster", monster); //===========update end====================== //=========select start================= List<Monster> monsterList = sqlSession.selectList ("com.nlc.mapper.MonsterMapper.findAllMonster"); for (Monster monster : monsterList) { System.out.println(monster); } //=========select end================= if (sqlSession != null) { sqlSession.commit(); sqlSession.close(); } System.out.println("操作成功!"); }
- 完成测试
MyBatis-注解的方式操作
需求
在前面项目的基础上,将增删改查,使用MyBatis 的注解的方式完成
1.增加 2.删除
3.修改 4.查询
代码实现
- 创建src\main\java\com\nlc\mapper\MonsterAnnotation.java
public interface MonsterAnnotation { //添加方法,将我们的sql 语句直接写在@Insert 注解即可 @Insert("INSERT INTO monster (age,birthday,email,gender,name,salary) " + "VALUES(#{age},#{birthday},#{email},#{gender},#{name},#{salary})") public void addMonster(Monster monster); //根据id 删除一个Monster @Delete("DELETE FROM monster " + "WHERE id=#{id}") public void delMonster(Integer id); //修改Monster @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 @Select("SELECT * FROM monster WHERE " + "id = #{id}") public Monster getMonsterById(Integer id); //查询所有的Monster @Select("SELECT * FROM monster ") public List<Monster> findAllMonster(); }
- 修改mybatis-config.xml , 对MonsterAnnotaion 进行注册
<!-- 这里会引入(注册)我们的Mapper.xml 文件--> <mapper resource="com/nlc/mapper/MonsterMapper.xml"/> <!-- 1. 如果是通过注解的方式,可不再使用MonsterMapper.xml 2. 但是需要在mybatis-config.xml 注册含注解的类 --> <mapper class="com.nlc.mapper.MonsterAnnotation"/>
- 创建com\nlc\mapper\MonsterAnnotationTest.java , 完成测试
public class MonsterAnnotationTest { //这个是Sql 会话,通过它可以发出sql 语句 private SqlSession sqlSession; @Before public void init() throws Exception { //通过SqlSessionFactory 对象获取一个SqlSession 会话 sqlSession = MyBatisUtils.getSqlSession(); } //测试通过注解的方式来完成接口中方法的实现 //其它的删除,修改,查询是一样一样,自己测试即可 @Test public void addMonster() { Monster monster = new Monster(); monster.setAge(500); monster.setBirthday(new Date()); monster.setEmail("nlc@sohu.com"); monster.setGender(2); monster.setName("白虎精"); monster.setSalary(9234.89); MonsterAnnotation monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class); monsterAnnotation.addMonster(monster); //增删改,需要提交事务 if (sqlSession != null) { sqlSession.commit(); sqlSession.close(); } System.out.println("操作成功"); } }
注意事项和说明
- 如果是通过注解的方式, 就不再使用MonsterMapper.xml 文件, 但是需要在mybatis-config.xml 文件中注册含注解的类/接口。
- 使用注解方式,添加时, 如果要返回自增长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);
- 在Junit 进行添加/查询测试即可。
😄总结
- 原生API的使用方法有很多,我们在使用时要弄清楚自己需要使用的是哪一个。
- 不清楚用哪一个的时候可以尝试去猜一下,猜它的参数、猜它的类型,看看哪个符合条件。
- 使用注解时需要在mybatis-config.xml 注册含注解的类,否则无法使用。
- SQL语句最好先在Navicat上测试一下,否则SQL语句不正确。
文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞