原生的API&註解方式 1.MyBatis原生的API調用 1.1原生API快速入門 需求:在前面的項目基礎上,使用MyBatis原生的API完成,即直接通過SqlSession介面的方法來完成操作 1.2代碼實現 MyBatisNativeTest.java,演示原生的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("[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 = "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("[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 = "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);