mybatis實現(xiàn)mapper代理模式的方式
今晚繼續(xù)復(fù)習(xí)mybtis
以根據(jù)id值查詢單條數(shù)據(jù)為例
編寫SqlMapConfig.xml文件
<configuration> <!-- 使用mybatis需要的數(shù)據(jù)源和事務(wù)配置,后續(xù)如果整合spring之后,將不再需要 --> <environments default="development"> <!-- 配置數(shù)據(jù)源和事務(wù) --> <environment id="development"> <!-- 配置事務(wù)管理,將事務(wù)管理交給mybatis管理 --> <transactionManager type="JDBC" /> <!-- 配置數(shù)據(jù)源 --> <dataSource type="POOLED"> <property name = "driver" value = "com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/db_shop? useUnicode=true&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <!-- 加載**.xml配置文件 --> <mappers> <mapper resource="product.xml"/> </mappers> </configuration>
編寫失血模型對象:Product,最好字段名和數(shù)據(jù)庫里面的字段名一直
/**** <p>Title: Product</p> * <p>Description: 商品類失血模型</p> * @author Alon * @date 2020年9月27日 下午6:51:57 * @version 1.0 */ public class Product { private int p_id; private String name; private int p_number; private double price; private String add_time; public Product(int p_id, String name, int p_number, double price, String add_time) { super(); this.p_id = p_id; this.name = name; this.p_number = p_number; this.price = price; this.add_time = add_time; }public Product() { super(); } public int getP_id() { return p_id; } public void setP_id(int p_id) { this.p_id = p_id; }public String getName() { return name; } public void setName(String name) { this.name = name; } public int getP_number() { return p_number; } public void setP_number(int p_number) { this.p_number = p_number; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getAdd_time() { return add_time; } public void setAdd_time(String add_time) { this.add_time = add_time; } @Override public String toString() { return "Product [p_id=" + p_id + ", name=" + name + ", p_number=" + p_number + ", price=" + price + ", add_time=" + add_time + "]"; } }
編寫單個映射關(guān)系的sql.xml:product.xml
<?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"> <!-- 映射的sql文件 namespace:命名空間,可以理解成將部分的sql語句進行隔離。到后面的mapper代理方式將有更 加重要的作用 --> <mapper namespace="test"> <!--select:表示要執(zhí)行的查詢語句 id:給這個查詢語句取一個名字,唯一的,java中要調(diào)用的使用。 parameterType:輸入?yún)?shù)的數(shù)據(jù)類型 resultType:輸出參數(shù)的數(shù)據(jù)類型,一般綁定成model的對象 #{value}:表示用來和占位符一樣,用來接受輸入的參數(shù)值。 --> <select id="findById" parameterType="java.lang.Integer" resultType="com.woniuxy.model.Product"> SELECT * FROM t_product WHERE p_id = #{value} </select> </mapper>
編寫java代碼進行測試執(zhí)行sql語句并得到結(jié)果
/**** <p>Title: MybatisDemo1</p> * <p>Description: 查詢數(shù)據(jù)的demo</p> * @author Alon * @date 2020年9月27日 下午7:05:32 * * @version 1.0 */ * public class MybatisDemo1 { * public static void main(String[] args) throws IOException { * new MybatisDemo1().queryById(); } * public void queryById() throws IOException { * //1、讀取到SqlMapConfig.xml文件的流 String path = "SqlMapConfig.xml"; * InputStream config = Resources.getResourceAsStream(path); //創(chuàng)建會話工廠,同時將SqlMapConfig.xml里面的數(shù)據(jù)放到工廠中 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); //開啟會話 SqlSession sqlSession = factory.openSession(); /** 第一個參數(shù):要執(zhí)行哪個sql語句的參數(shù),一般命名空間.id值 * 第二個參數(shù):傳入填充#{value}的傳入?yún)?shù)值。 */ Object obj = sqlSession.selectOne("test.findById", 1); System.out.println(obj); } }
進行模糊查詢:查詢出多條結(jié)果集
<!-- 在原有的xml文件中進行配置即可,不需要新建,之前的也已經(jīng)在SqlMapConfig.xml文件中進行了配 置 --> <select id="queryByName" parameterType="java.lang.String" resultType="com.woniuxy.model.Product"> SELECT * FROM t_product WHERE name like "%${value}%" </select> public void queryByName() throws Exception { String path = "SqlMapConfig.xml"; //獲取流對象 InputStream config = Resources.getResourceAsStream(path); //獲取會話工廠 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); //開啟會話 SqlSession sqlSession = factory.openSession(); /** 因為執(zhí)行結(jié)果有多條語句,那么必須使用selectList */ List<Object> list = sqlSession.selectList("test.queryByName", "旺仔"); //迭代 System.out.println(list); }
新增語句
<!-- 新增一條數(shù)據(jù) parameterType:傳入?yún)?shù)的數(shù)據(jù)類型,用失血模型對象即可。 --> <insert id="insertProduct" parameterType="com.woniuxy.model.Product"> INSERT INTO t_product(name,p_number,price) value(#{name},#{p_number},# {price}); </insert>
/** **<p>Title: insert</p> *<p>Description: 新增數(shù)據(jù)</p> * @throws Exception * */ public void insert() throws Exception{ String path = "SqlMapConfig.xml"; * //獲取流對象 * InputStream config = Resources.getResourceAsStream(path); //獲取會話工廠 * SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); * //開啟會話 * SqlSession sqlSession = factory.openSession(); * Product prod = new Product(); * prod.setName("雪碧"); * prod.setP_number(10); * prod.setPrice(3.0); * int row = sqlSession.insert("test.insertProduct", prod); System.out.println(row); sqlSession.commit(); sqlSession.close(); }
mapper代理的方式進行講解增、刪、改、查(重點)
步驟1:創(chuàng)建對應(yīng)的Mapper接口,和之前的dao接口一致
步驟2:編寫對應(yīng)的xxmapper.xml配置文件。有要求
1)mapper標簽里面的namespace:必須寫成對應(yīng)的Mapper接口的全路徑名
2)sql語句里面的id:必須和接口中對應(yīng)方法的名稱一致。
3)sql語句里面的parameterType:必須要和接口中方法的形式參數(shù)數(shù)據(jù)類型一致
4)sql語句里面的resultType:必須和接口中方法的返回值數(shù)據(jù)類型一致
步驟3:將編寫好的**mapper.xml文件在SqlMapConfig.xml文件中加載
步驟4:編寫實現(xiàn)類,并在這里直接測試
別名和mapper映射詳解
設(shè)置別名
在mybatis配置文件中,別名是一直存在的,實際上在框架中已經(jīng)存在一些默認的別名。比如
java.lang.String對應(yīng)的別名:String,java.lang.Integer對應(yīng)的別名:int
在開發(fā)中,一般mapper.xml配置文件中的parameterType和resultType往往對應(yīng)的名稱需要寫上
model的全路徑,而且還是多次被重復(fù)使用,可以選擇給該路徑取一個別名。用別名來替換比較復(fù)雜的
全路徑名
以掃描包的形式進行配置
自定義的POJO類(重點)
自定義POJO類,一般指的是高級查詢,在想要的數(shù)據(jù)和傳入的條件不再一張表中,通過表所創(chuàng)建的失血
模型model已經(jīng)不能夠滿足傳入?yún)?shù)的需求了,這個時候,就需要使用自定義的POJO類
因為一個失血模型已經(jīng)不能夠滿足查詢輸入?yún)?shù)的要求了,所以進行擴展,創(chuàng)建一個UserCustom類,里
面包含user對象聲明和userInfo對象聲明
以上就是mybatis實現(xiàn)mapper代理模式的方式的詳細內(nèi)容,更多關(guān)于mybatis mapper代理模式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot?2.5.5整合輕量級的分布式日志標記追蹤神器TLog的詳細過程
分布式追蹤系統(tǒng)是一個最終的解決方案,如果您的公司已經(jīng)上了分布式追蹤系統(tǒng),這篇文章主要介紹了SpringBoot?2.5.5整合輕量級的分布式日志標記追蹤神器TLog,需要的朋友可以參考下2022-10-10MyBatis 多個條件使用Map傳遞參數(shù)進行批量刪除方式
這篇文章主要介紹了MyBatis 多個條件使用Map傳遞參數(shù)進行批量刪除方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12mybatis多對多查詢的實現(xiàn)(xml方式和注解方式)
本文主要介紹了mybatis多對多查詢的實現(xiàn),有xml方式和注解方式兩種,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08Java反射之靜態(tài)加載和動態(tài)加載的簡單實例
下面小編就為大家?guī)硪黄狫ava反射之靜態(tài)加載和動態(tài)加載的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10SpringBoot整合MybatisSQL過濾@Intercepts的實現(xiàn)
這篇文章主要介紹了SpringBoot整合MybatisSQL過濾@Intercepts的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03