day04-原生的API&注解方式
原生的API&注解方式
1.MyBatis原生的API调用
1.1原生API快速入门
需求:在前面的项目基础上,使用MyBatis原生的API完成,即直接通过SqlSession接口的方法来完成操作

1.2代码实现
MyBatisNativeTest.java,演示原生的API操作
其实底层还是使用的映射的xml文件的sql语句
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 * 演示使用 Mybatis原生API操作 */ public class MyBatisNativeTest { private SqlSession sqlSession; //初始化方法 @Before public void init() { sqlSession = MybatisUtils.getSqlSession(); //sqlSession的运行类型是DefaultSqlSession System.out.println("sqlSession运行类型--" + sqlSession.getClass()); } //使用sqlSession原生的API调用编写的方法 //其实还是去找映射的Mapper.xml文件的sql语句 @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("猫精-999"); monster.setSalary(1000); int insert = sqlSession.insert("com.li.mapper.MonsterMapper.addMonster", monster); System.out.println("insert--" + insert); //删除 int delete = sqlSession.delete("com.li.mapper.MonsterMapper.delMonster", 6); System.out.println("delete--" + delete); //修改 Monster monster2 = new Monster(); monster2.setAge(22); monster2.setBirthday(new Date()); monster2.setEmail("king789@qq.com"); monster2.setGender(0); monster2.setName("牛魔王"); monster2.setSalary(8888); monster2.setId(3);//要带上id,如果没有就不知道修改哪个对象了 int update = sqlSession.update("com.li.mapper.MonsterMapper.updateMonster", monster2); System.out.println("update--" + update); //查询--除了查询,其他的都要使用事务提交 List<Monster> monsters = sqlSession.selectList("com.li.mapper.MonsterMapper.findAllMonster"); for (Monster monster3 : monsters) { System.out.println("monster--" + monster3); } if (sqlSession != null) { sqlSession.commit(); sqlSession.close(); } System.out.println("操作成功!"); } }
2.MyBatis注解方式操作
2.1注解方式快速入门
之前我们是使用xml文件的方式来实现接口声明的方法,现在使用注解方式来完成增删改查
(1)创建接口 MonsterAnnotation.java,添加注解
package com.li.mapper; import com.li.entity.Monster; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; /** * @author 李 * @version 1.0 * MonsterAnnotation:使用注解的方式来配置我们的接口方法 */ public interface MonsterAnnotation { //添加 monster /** * 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> */ @Insert(value = "INSERT INTO `monster` " + "(`age`,`birthday`,`email`,`gender`,`name`,`salary`) " + "VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})") public void addMonster(Monster monster); //根据id删除一个Monster @Delete(value = "DELETE FROM `monster` WHERE `id`=#{id}") public void delMonster(Integer id); //修改Monster //注解配置时value可以省略 @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(); }
(2)修改mybatis-config.xml,对MonsterAnnotation 进行注册
<mappers> <!--<mapper resource="com/li/mapper/MonsterMapper.xml"/>--> <!--如果是通过注解的方式,可不再使用MonsterMapper.xml 但是需要在mybatis-config.xml中注册/引入含注解的类--> <mapper class="com.li.mapper.MonsterAnnotation"/> </mappers>
(3)测试
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("queen@qq.com"); monster.setGender(0); monster.setName("狐狸精"); monster.setSalary(3000); //使用在接口方法配置注解的方式完成对DB的操作 monsterAnnotation.addMonster(monster); //如果是增删改,需要提交事务 if (sqlSession != null) { sqlSession.commit(); sqlSession.close(); } } @Test public void findAllMonster() { //使用接口方法配置注解的方式完成操作 List<Monster> allMonster = monsterAnnotation.findAllMonster(); for (Monster monster : allMonster) { System.out.println("monster=" + monster); } if (sqlSession != null) { sqlSession.close(); } } }
2.2注意事项和使用细节
-
如果是通过注解的方式,就不再使用MonsterMapper.xml文件,但是需要在mybatis的配置文件中引入含注解的类/接口
-
添加时,如果要返回自增长的id值,可以使用@Option注解,组合使用
/** * 1.useGeneratedKeys = true 返回自增的值 * 2.keyProperty = "id" 自增对应的对象属性 * 3.keyColumn = "id" 自增的表字段 * 4.如果 keyProperty 和 keyColumn 的值相同,可以省略 keyColumn */ @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);
分类:
MyBatis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!