Mybatis的dao層實現 介面代理方式實現規範+plugins-PageHelper
Mybatis的dao層實現 介面代理方式實現規範
Mapper介面實現時的相關規範:
Mapper介面開發只需要程式設計師編寫Mapper介面而不用具體實現其程式碼(相當於我們寫的Imp實現類)
Mapper介面實現時的相關規範:
1.Mapper.xml文件中的namespace與mapper介面的全限定名要相同
2.Mapper.xml文件定義的每個statement的id需要和介面的方法名相同
3.Mapper介面方法的輸入參數類型和Mapper.xml中定義的每個sql的parameterType的類型相同
4.Mapper介面方法中的輸出參數類型和mapper.xml中定義的每個sql的resultType的類型相同
簡單演示
編寫介面
package Interface;
import domain.User;
public interface UserDao {
User findById(int id );
}
配置配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "//mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Interface.UserDao">
<select id="findById" parameterType="int">
select * from test where id=#{id}
</select>
</mapper>
獲取方式
package Test;
import Interface.UserDao;
import domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class test3 {
public static void main(String[] args) throws IOException {
//載入核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//獲取sqlSession工廠類對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//獲取session對象
SqlSession sqlSession = sqlSessionFactory.openSession();
//執行sql語句
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = mapper.findById(1);
System.out.println(user);
}
}
再實際的開發中我們的sql語句往往是動態變化的,下面我們來介紹一下動態sql語句
我們根據實體類的不同取值來使用不同的sql語句進行查詢,比如在id不為空的時候可以根據id進行查詢,如果username不為空的時候加入,username一同進行查詢,也就是組合查詢
在這裡使用
if用於判斷是否為空,不為空則加入查詢語句中
<select id="findByCondition" parameterType="user" resultType="user">
select * from test
<where>
<if test="id!=0">
and id=#{id}
</if>
<if test="username!=null">
and username=#{username}
</if>
</where>
</select>
當我們使用sql語句的時候可能會有拼接操作,比如:SELECT * FROM USER WHERE id IN (1,2,5)。
這裡需要將數據與括弧拼接起來,那麼下面我們來講講怎麼使用
的使用
foreach標籤的屬性含義如下:
collection:代表要遍歷的集合元素,注意編寫時不要寫#{}
open:代表語句的開始部分
close:代表結束部分
item:代表遍歷集合的每個元素,生成的變數名
sperator:代表分隔符
<select id="findByIds" parameterType="list" resultType="user">
select * from test
<where>
<foreach collection="list" item="id" open="id in (" separator="," close=")">
#{id}
</foreach>
</where>
</select>
sql片段的抽取
在我們使用sql語句的時候,sql語句中的許多內容也是重複的,所以我們可以把相同的sql語句抽取出來
程式碼演示
<sql id="selectUser">
select * from test
</sql>
<select id="findById" parameterType="int" resultType="user">
<include refid="selectUser"></include> where id=#{id}
</select>
<select id="findByCondition" parameterType="user" resultType="user">
<include refid="selectUser"></include>
<where>
<if test="id!=0">
and id=#{id}
</if>
<if test="username!=null">
and username=#{username}
</if>
</where>
</select>
Mybatis映射文件配置
在mybatis核心配置文件中配置PageHelper插件
<plugins>
<plugin interceptor=”com.github.pagehelper.PageHelper”>
<!–配置方言–>
<property name=”dialect” value=”mysql”/>
</plugin>
</plugins>
獲取分頁文件的具體步驟
package Test;
import Interface.UserDao;
import com.github.pagehelper.PageHelper;
import domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class test6 {
public static void main(String[] args) throws IOException {
//載入核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream(“SqlMapConfig.xml”);
//獲取sqlSession工廠類對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//獲取session對象 System.out.println(user);
SqlSession sqlSession = sqlSessionFactory.openSession();
//執行sql語句
UserDao mapper = sqlSession.getMapper(UserDao.class);
//設置參數 當前頁面+當前頁面的條數
PageHelper.startPage(1,1);
List<User> all = mapper.findAll();
for (User user : all) {
System.out.println(user);
}
}
}
第一頁,每頁一條
獲取分頁相關的其他參數
package Test;
import Interface.UserDao;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class test6 {
public static void main(String[] args) throws IOException {
//載入核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream(“SqlMapConfig.xml”);
//獲取sqlSession工廠類對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//獲取session對象 System.out.println(user);
SqlSession sqlSession = sqlSessionFactory.openSession();
//執行sql語句
UserDao mapper = sqlSession.getMapper(UserDao.class);
//設置參數 當前頁面+當前頁面的條數
PageHelper.startPage(1,1);
List<User> all = mapper.findAll();
for (User user : all) {
System.out.println(user);
}
PageInfo<User> userPageInfo = new PageInfo<User>(all);
System.out.println(“總條數:”+userPageInfo.getTotal());
System.out.println(“總頁數:”+userPageInfo.getPages());
System.out.println(“當前頁:”+userPageInfo.getPageNum());
System.out.println(“每頁顯示的長度:”+userPageInfo.getPageSize());
System.out.println(“是否是第一頁:”+userPageInfo.isIsFirstPage());
System.out.println(“是否是最後一頁:”+userPageInfo.isIsLastPage());
}
}
以上就是Mybatis的dao層實現 介面代理方式實現規範+plugins-PageHelper的解決方案,如有幫助還請點贊關注支援,如有疑問評論私信都可,看到後可幫助解答本部落格主要側重於數據結構於演算法和java開發,作業系統,電腦網路,覺得我的文章有幫助的小夥伴可以關注我,有疑問可評論私信,相逢即是緣,大家高處見