java應用開發(fā)之Mybatis通過Mapper代理自定義接口的實現(xiàn)
如何實現(xiàn)?主要分為以下兩步驟
- 1.通過 Mapper 代理實現(xiàn)⾃定義接口
- 2.編寫與方法相對應的 Mapper.xml
1.自定義接口AccountRepository
package repository; import entity.Account; import java.util.List; public interface AccountRepository { public int save(Account account); public int update(Account account); public int deleteById(long id); public List<Account> findAll(); public Account findById(long id); }
2.創(chuàng)建接⼝對應的 Mapper.xml,定義接口方法對應的 SQL 語句。
statement 標簽可根據(jù) SQL 執(zhí)⾏的業(yè)務選擇 insert、delete、update、select。 MyBatis 框架會根據(jù)規(guī)則⾃動創(chuàng)建接⼝實現(xiàn)類的代理對象
規(guī)則:
- Mapper.xml 中 namespace 為接⼝的全類名。
- Mapper.xml 中 statement 的 id 為接⼝中對應的⽅法名。
- Mapper.xml 中 statement 的 parameterType 和接⼝中對應⽅法的參數(shù)類型⼀致。
- Mapper.xml 中 statement 的 resultType 和接⼝中對應⽅法的返回值類型⼀致。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="repository.AccountRepository"> <insert id="save" parameterType="entity.Account"> insert into t_account(username,password,age) values (#{username},#{password},#{age}); </insert> <update id="update" parameterType="entity.Account"> update t_account set username=#{username},password=#{password},age=#{age} where id=#{id}; </update> <delete id="deleteById" parameterType="long"> delete from t_account where id=#{id}; </delete> <select id="findAll" resultType="entity.Account"> select * from t_account; </select> <select id="findById" parameterType="long" resultType="entity.Account"> select * from t_account where id =#{id}; </select> </mapper>
3.在 config.xml 中注冊 AccountRepository.xml
<mappers> <mapper resource="mapper/AccountMapper.xml"></mapper> <mapper resource="repository/AccountRepository.xml"></mapper> </mappers>
4.調用接⼝的代理對象完成相關的業(yè)務操作
package Test; import entity.Account; import org.apache.ibatis.io.ResolverUtil; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import repository.AccountRepository; import java.io.InputStream; import java.util.List; public class Test1 { public static void main(String[] args) { InputStream inputStream= ResolverUtil.Test.class.getClassLoader().getResourceAsStream("config.xml"); SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); AccountRepository accountRepository=sqlSession.getMapper(AccountRepository.class); // List<Account> list=accountRepository.findAll(); // for(Account account:list){ // System.out.println(account); // } // sqlSession.close(); //添加 // Account account=new Account(3L,"wangwu","555555",122); // accountRepository.save(account); // sqlSession.commit(); //通過id查找對象 // Account account=accountRepository.findById(3L); // System.out.println(account); // sqlSession.close(); //通過id改對象 // Account account=accountRepository.findById(2L); // account.setUsername("alibaba"); // account.setPassword("12345678"); // account.setAge(11); // int result=accountRepository.update(account); // sqlSession.commit(); // System.out.println(result); // sqlSession.close(); //刪除 int result=accountRepository.deleteById(3L); sqlSession.commit(); System.out.println(result); sqlSession.close(); } }
以上就是java應用開發(fā)之Mybatis通過Mapper代理自定義接口的實現(xiàn)的詳細內容,更多關于Mybatis通過Mapper代理自定義接口的資料請關注腳本之家其它相關文章!
相關文章
Java8日期類LocalDate、LocalTime和LocalDateTime使用方法詳解
這篇文章主要給大家介紹了關于Java8日期類LocalDate、LocalTime和LocalDateTime使用方法的相關資料,LocalDateTime是JDK1.8出現(xiàn)的新特性,解決線程不安全的問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11Spring使用@Conditional進行條件裝配的實現(xiàn)
在spring中有些bean需要滿足某些環(huán)境條件才創(chuàng)建某個bean,這個時候可以在bean定義上使用@Conditional注解來修飾,所以本文給大家介紹了Spring使用@Conditional進行條件裝配的實現(xiàn),文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下2023-12-12Maven中dependency和plugins的繼承與約束
這篇文章主要介紹了Maven中dependency和plugins的繼承與約束,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12springBoot中的CORS跨域注解@CrossOrigin詳解
這篇文章主要介紹了springBoot中的CORS跨域注解@CrossOrigin詳解,通常,服務于?JS?的主機(例如?example.com)與服務于數(shù)據(jù)的主機(例如?api.example.com)是不同的,在這種情況下,CORS?可以實現(xiàn)跨域通信,需要的朋友可以參考下2023-12-12