😀前言
本篇博文是关于MyBatis原生API&注解的使用,希望能够帮助到你😊
🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊
文章目录
- 原生的API&注解的方式
- MyBatis-原生的API 调用
- 应用实例
- 需求
- 代码实现
- MyBatis-注解的方式操作
- 需求
- 代码实现
- 注意事项和说明
- 😄总结
原生的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语句不正确。
😁热门专栏推荐
手写底层机制篇–
自己实现MyBatis 底层机制–抽丝剥茧(上).
揭开神秘的面纱–自己实现MyBatis 底层机制[下]
文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞