原生的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("[email protected]");
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("[email protected]");
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 = "https://www.cnblogs.com/liyuelian/archive/2023/02/25/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 = "https://www.cnblogs.com/liyuelian/archive/2023/02/25/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 />
</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("[email protected]");
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 = "https://www.cnblogs.com/liyuelian/archive/2023/02/25/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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545034.html
標籤:其他
上一篇:Python中模塊的四種方式
