原生的API&注解的方式
2023年11月16日大约 5 分钟约 1053 字
MyBatis-原生的 API 调用
创建 MyBatisNativeTest.java
完成添加

package com.lzw.mapper;
import com.lzw.entity.Monster;
import com.lzw.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import java.util.Date;
/**
* @author LiAng
* 演示使用MyBatis原生API操作
*/
public class MyBatisNativeTest {
//属性
private SqlSession sqlSession;
//编写方法,完成初始化
@Before
public void init(){
//获取到 sqlSession
sqlSession = MyBatisUtils.getSqlSession();
//sqlSession 返回的对象 是 DefaultSqlSession
System.out.println("sqlSession:" + sqlSession.getClass());
}
@Test
public void myBatisNativeCrud(){
//添加
/**
*
* @Override
* public int insert(String statement, Object parameter) {
* return update(statement, parameter);
* }
*
* statement: 就是接口方法-完整声明
* parameter: 入参
*/
Monster monster = new Monster();
monster.setAge(10);
monster.setBirthday(new Date());
monster.setEmail("kate@sohu.com");
monster.setGender(1);
monster.setName("大象精100");
monster.setSalary(1000);
int insert = sqlSession.insert("com.lzw.mapper.MonsterMapper.addMonster", monster);
System.out.println("insert---" + insert);
//如果是增删改, 需要提交事务
if(sqlSession != null) {
sqlSession.commit();
sqlSession.close();
}
System.out.println("操作成功...");
}
}
修改 MyBatisNativeTest.java
完成删除/修改/查询
@Test
public void myBatisNativeCrud(){
//删除
//int delete = sqlSession.delete("com.lzw.mapper.MonsterMapper.delMonster", 5);
//System.out.println("delete---" + delete);
//修改
//Monster monster = new Monster();
//monster.setAge(50);
//monster.setBirthday(new Date());
//monster.setEmail("kate3@sohu.com");
//monster.setGender(1);
//monster.setName("大象精-999");
//monster.setSalary(2000);
//monster.setId(3);
//int update = sqlSession.update("com.lzw.mapper.MonsterMapper.updateMonster", monster);
//System.out.println("update---" + update);
//查询
List<Monster> monsters = sqlSession.selectList("com.lzw.mapper.MonsterMapper.findAllMonster");
for (Monster monster : monsters) {
System.out.println("monster:" + monster);
}
//如果是增删改, 需要提交事务
if(sqlSession != null) {
sqlSession.commit();
sqlSession.close();
}
System.out.println("操作成功...");
}
MyBatis-注解的方式操作
创建 MonsterAnnotation.java

package com.lzw.mapper;
import com.lzw.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 LiAng
* 使用注解的方式来配置接口方法
*/
public interface MonsterAnnotation {
//添加monster
/*
1. 使用注解方式配置接口方法addMonster
2. 回顾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})")
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();
}
修改 mybatis-config.xml
<mappers>
<!--
1. 如果是通过注解的方式,可不再使用 MonsterMapper.xml
2. 但是需要在 mybatis-config.xml 注册/引入含注解的类
3. 如果没有引入,不能使用
-->
<mapper class="com.lzw.mapper.MonsterAnnotation"/>
</mappers>
创建 MonsterAnnotationTest.java
package com.lzw.mapper;
import com.lzw.entity.Monster;
import com.lzw.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 LiAng
*/
public class MonsterAnnotationTest {
//属性
private SqlSession sqlSession;
private MonsterAnnotation monsterAnnotation;
@Before
public void init(){
sqlSession = MyBatisUtils.getSqlSession();
monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);
//返回的依然是一个接口的代理对象
System.out.println("monsterAnnotation:" + monsterAnnotation.getClass());
}
@Test
public 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("保存成功...");
}
@Test
public void findAllMonster() {
List<Monster> allMonster = monsterAnnotation.findAllMonster();
for (Monster monster : allMonster) {
System.out.println("monster:" + monster);
}
if(sqlSession != null) {
sqlSession.close();
}
System.out.println("查询成功...");
}
}
注意事项和细节说明
- 如果是通过注解的方式,就不再使用 MonsterMapper.xml 文件,但是需要在 mybatis-config.xml 文件中注册含注解的类/接口。
- 使用注解方式添加时,如果要返回自增长 id 值,可以使用@Option注解,组合使用。
//添加monster
/*
1. 使用注解方式配置接口方法addMonster
2. 回顾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);
