1 MyBatis原生API
1.1 原生API 快速入门需求
在笔记一案例的基础上将增删改查,使用 MyBatis 原生的 API 完成,就是直接通过SqlSession 接口的方法来完成
1.2 原生API 快速入门-代码实现
创建 src\test\java\com\hspedu\mapper\MyBatisNativeTest.java
package com.mapper;import com.entity.Monster;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;import java.util.Date;
import java.util.List;/*** MyBatisNativeTest: 演示使用MyBatis原生API操作*/
public class MyBatisNativeTest {//属性private SqlSession sqlSession;//编写方法完成初始化@Beforepublic void init() {//获取到sqlSessionsqlSession = MyBatisUtils.getSqlSession();//sqlSession 返回的对象是 DefaultSqlSessionSystem.out.println("sqlSession--" + sqlSession.getClass());}//使用sqlSession原生的API调用我们编写的方法[了解]@Testpublic 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.mapper.MonsterMapper.addMonster", monster);////System.out.println("insert---" + insert);//删除//int delete = sqlSession.delete("com.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.mapper.MonsterMapper.updateMonster", monster);//System.out.println("update--" + update);//查询List<Monster> monsters =sqlSession.selectList("com.mapper.MonsterMapper.findAllMonster");for (Monster monster : monsters) {System.out.println("monster--" + monster);}//如果是增删改, 需要提交事务if(sqlSession != null) {sqlSession.commit();sqlSession.close();}System.out.println("操作成功...");}
}
2 MyBatis注解的使用
2.1 注解方式快速入门需求
在前面项目的基础上,将增删改查,使用 MyBatis 的注解的方式完成
2.2 注解快速入门-代码实现
(1)创 建 src\main\java\com\mapper\MonsterAnnotation.java
package com.mapper;import com.entity.Monster;
import org.apache.ibatis.annotations.*;import java.util.List;/*** MonsterAnnotation: 使用注解的方式来配置接口方法*/
public interface MonsterAnnotation {//添加monster/*1. 使用注解方式配置接口方法addMonster2. 回顾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();
}
(2)修改 mybatis-config.xml , 对 MonsterAnnotaion 进行注册
<mappers><mapper class="com.mapper.MonsterAnnotation"/>
</mappers>
(3)创建 src\test\java\com\hspedu\mapper\MonsterAnnotationTest.java , 完成测试
package com.mapper;import com.entity.Monster;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;import java.util.Date;
import java.util.List;public class MonsterAnnotationTest {//属性private SqlSession sqlSession;private MonsterAnnotation monsterAnnotation;@Beforepublic void init() {//获取到sqlSessionsqlSession = MyBatisUtils.getSqlSession();monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);//返回的依然是一个接口的代理对象System.out.println("monsterAnnotation--" + monsterAnnotation.getClass());}@Testpublic 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("保存成功...");}@Testpublic void findAllMonster() {//使用接口配置注解的方式操作DBList<Monster> allMonster = monsterAnnotation.findAllMonster();for (Monster monster : allMonster) {System.out.println("monster--" + monster);}if(sqlSession != null) {sqlSession.close();}System.out.println("查询成功...");}
}
测试结果如下
2.3 注意事项和说明
(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);