MyBatis是一款持久層框架,這個框架封裝dao的增刪改查、分頁操作。
1. 引入jar包,並且build:
2. 創建配置文件,這個配置文件主要用來填寫driver,url,username,password等配置信息
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="ZCY"/>
<property name="password" value="ZCY"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- <mapper resource="org/mybatis/example/BlogMapper.xml"/> -->
</mappers>
</configuration>
3.
(1)Java加載xml配置文件
(2)初始化SqlSessionFactoryBuilder
(3)通過SqlSessionFactoryBuilder創建SqlSessionFactory,並加載xml配置信息。
(4)獲取SqlSession(sql會話對象),相當於jdbc的connection對象,通過SqlSession實現CRUD操作。
//獲取mybatis-config.xml文件流
InputStream ips=Demo.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
//獲取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//獲取SqlSessionFactory,需要通過SqlSessionFactoryBuilder對象獲取,傳入配置文件
SqlSessionFactory factory=builder.build(ips);
//獲取SqlSession
SqlSession session= factory.openSession();
4.創建dao接口類,這裏的dao改名爲,例如(AdminInfo)Mapper
public interface AdminInfoMapper {
//查詢一共多少條用戶數據
Integer count();
}
5.配置xml文件,該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">
<!-- mapper是根標籤,namespace叫做命名空間,這裏的空間裏面接的是 對應接口類的權限定名 -->
<mapper namespace="mapper.AdminInfoMapper">
<!-- 常用標籤分爲:select,delete,insert和update,其中這裏我們先用select實現效果 -->
<!-- select標籤默認屬性:id:就是對應接口類的方法名稱, resultType:就是返回值的類型 -->
<select id="count" resultType="int">
select count(0) from admin_info
</select>
</mapper>
6.在mybatis-config.xml配置文件中,引用該文件
<mappers>
<mapper resource="mapper/AdminInfoMapper.xml"/>
</mappers>
7.測試
// 獲取接口的實現對象
AdminInfoMapper mapper = session.getMapper(AdminInfoMapper.class);
// 調用接口類裏面的方法,返回對應信息
Integer count = mapper.count();
System.out.println(count);
session.close();
public class Demo {
public static void main(String[] args) {
InputStream ips=Demo.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(ips);
SqlSession session= factory.openSession();
AdminInfoMapper mapper= session.getMapper(AdminInfoMapper.class);
Integer count=mapper.count();
System.out.println(count);
session.close();
}
}
8.查詢信息:
(1)創建bean對象
public class AdminInfo {
private Long adminId;
private String adminName;
private String adminPwd;
private Integer adminState;
private Date adminCtime;
private Long roleId;
}
(2)dao接口:AdminInfoMapper
//查詢所有的用戶
List<AdminInfo> selectAll();
(3)在AdminInfoMapper.xml中創建resultMap,讓字段和屬性一一對應
<!-- resultMap:當我們需要查詢數據時,告訴系統,我們的字段和哪一個屬性進行匹配
屬性:type:返回的數據類型的全限定名,如果返回的是集合,那麼這裏填寫的是集合裏面的數據類型全限定名
id:唯一
-->
<resultMap type="bean.AdminInfo" id="AdminInfoMap">
<!-- id標籤:用來定義主鍵使用,屬性:column填寫對應的字段名,property填寫對應的屬性名 -->
<id column="ADMIN_ID" property="adminId"/>
<result column="ADMIN_NAME" property="adminName"/>
<result column="ADMIN_PWD" property="adminPwd"/>
<result column="ADMIN_STATE" property="adminState"/>
<result column="ADMIN_CTIME" property="adminCtime"/>
<result column="ROLE_ID" property="roleId"/>
</resultMap>
(4)寫查詢語句
<!-- 注意這裏的返回值類型應該是resultMap,對應的值是resultMap標籤的Id,按照xxxresultMap的規範進行數據返回 -->
<select id="selectAll" resultMap="AdminInfoMap">
<!-- 不要使用分號 -->
select * from admin_info
</select>
(5)測試
List<AdminInfo> admins = mapper.selectAll();
System.out.println(admins);
session.close();
9.修改:
(1)dao接口:AdminInfoMapper
Integer updatePwd();//重置密碼爲123456
(2)AdminInfoMapper.xml
<!-- 增刪改不需要寫返回值resultMap和resultType不要寫 -->
<update id="updatePwd">
update admin_info set admin_pwd = '123456'
</update>
(3)測試
Integer count = mapper.updatePwd();
System.out.println("修改了:" + count + "條");
session.commit(); // 相當於事務提交,增刪改都需要
10.傳遞參數:將id爲100的用戶密碼修改成123456
(1)dao接口:AdminInfoMapper
//@Param("adminId")和@Param("pwd")對應xml裏面的變量名稱
Integer updatePwd(@Param("adminId") Long adminId, @Param("pwd") String pwd);
(2)AdminInfoMapper.xml
<update id="updatePwd">
update admin_info set admin_pwd = #{pwd} where admin_id = #{adminId}
</update>
(3)測試
Integer count = mapper.updatePwd(100L, "OK");
System.out.println("修改了:" + count + "條");
session.commit();
11.按條件查詢數據:
(1)AdminInfoMapper.xml
<select id="selectByParam" resultMap="AdminInfoMap">
select * from admin_info
<where>
<if test="adminName != null">
and admin_name like #{adminName}
</if>
<if test="adminState != null">
and admin_state = #{adminState}
</if>
</where>
</select>
12.分頁:
(1)dao接口:AdminInfoMapper
//分頁:RowBounds屬性必須要傳遞進來
List<AdminInfo> selectByPage(RowBounds row);
(2)AdminInfoMapper.xml
<select id="selectByPage" resultMap="AdminInfoMap">
select * from admin_info
</select>
(3)測試
// 參數:1.從哪裏開始; 2.顯示多少條
List<AdminInfo> admins = mapper.selectByPage(new RowBounds(0, 2));
System.out.println(admins);