Mybaits 框架學(xué)習(xí)筆記
1. 導(dǎo)入 Mybaits 架包
2. 創(chuàng)建 Mybaits 核心配置文件
在 src 目錄下創(chuàng)建 config.xml献汗,它包含了使用 Mybaits 框架必要的配置信息蛔添,內(nèi)容如下:
<?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="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybaits" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 可以添加多個Mapper -->
<mapper resource="mapper/UserMapper.xml" />
</mappers>
</configuration>
此步結(jié)束宋梧,MyBaits 框架的環(huán)境已經(jīng)配置好了岂却,下面是使用 MyBaits 操作表的步驟居砖。
3. 根據(jù)表創(chuàng)建 Bean 類
表結(jié)構(gòu)如下:
UserBean 類
package bean;
public class UserBean {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserBean [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
4. 映射 sql 語句
創(chuàng)建 mapper腾务,并在 mapper 下創(chuàng)建 UserMapper.xml毕骡,來映射 t_user 表的 sql 語句。
UserMapper.xml 內(nèi)容如下:
<?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">
<!-- namespace:給當(dāng)前xml文件命名岩瘦,區(qū)分sql塊未巫,以區(qū)分 -->
<mapper namespace="user">
<!-- 定義sql語句 增、刪启昧、改叙凡、查 -->
<select id="findByid" parameterType="int" resultType="bean.UserBean">
SELECT * FROM t_user WHERE id = #{id};
</select>
<select id="findAll" resultType="bean.UserBean">
SELECT * FROM t_user;
</select>
<insert id="insertUser" parameterType="bean.UserBean">
INSERT INTO t_user(username, `password`) VALUE (#{username}, #{password});
</insert>
<delete id="deleteUserById" parameterType="int">
DELETE FROM t_user WHERE id = #{id};
</delete>
<update id="updateUserPassword" parameterType="bean.UserBean">
UPDATE t_user SET `password` = #{password} WHERE id = #{id};
</update>
</mapper>
namespzce 屬性可以隨意命名,他的作用是區(qū)分 sql語句塊密末。
id 屬性用來標(biāo)識具體的 sql 語句握爷,Mybaits 框架就是通過 namespace.id 定位到具體的 sql 語句的跛璧。
parameterType 屬性是執(zhí)行 sql 語句需要的參數(shù)類型。
通過以上步驟已經(jīng)可以使用可以使用 MyBaits 用 maper 里面配置好了的 sql 語句操作表了饼拍。
- 使用 XML 配置文件來生成一個 SqlSessionFactory 實例 fa
// 加載配置文件
String resource = "config.xml";
InputStream is = null;
SqlSessionFactory fa = null;
try {
is = Resources.getResourceAsStream(resource);
fa = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
- 獲取 SqlSession 實例
// Mybaits 默認(rèn)是關(guān)閉自動提交事務(wù)的
SqlSession session = getSqlSessionFactory().openSession();
// 或者
// 獲取自動提交事務(wù)的 SqlSession
SqlSession session = getSqlSessionFactory().openSession(true);
- 使用 SqlSession 對應(yīng)的方法執(zhí)行 mapper 中已經(jīng)配置的方法赡模,以執(zhí)行 id 為 deleteUserById 的刪除sql語句為例:
int id = 3;
session.delete("user.deleteUserById ", id);
// 關(guān)閉 session 釋放資源
session.close()
ps:到此步已經(jīng)完了,下面只是完善程序結(jié)構(gòu)
每次執(zhí)行 sql 語句师抄,1漓柑、2步都要重復(fù),只有第三步是變化的叨吮,可以將 1辆布、2步封裝成方法。
MybaitsUtil 類
package util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybaitsUtil {
// SqlSessionFactory類是單例茶鉴,只存在一個對象
public static SqlSessionFactory getSqlSessionFactory() {
// 加載配置文件
String resource = "config.xml";
InputStream is = null;
SqlSessionFactory fa = null;
try {
is = Resources.getResourceAsStream(resource);
fa = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
return fa;
}
public static SqlSession getSqlSession() {
// 默認(rèn)手動提交事務(wù)
SqlSession session = fa.openSession();
return session;
}
public static SqlSession getSqlSession(boolean boo) {
// 開啟自動提交事務(wù)
SqlSession session = fa.openSession(true);
return session;
}
}
5.創(chuàng)建操作表的接口
IUserDao 接口
package dao;
import java.util.List;
import bean.UserBean;
public interface IUserDao {
// 添加用戶
public void insert(UserBean bean);
// 根據(jù)id查詢用戶
public void findByid(int id);
// 查詢所有用戶
public List<UserBean> findAll();
// 通過id刪除用戶
public void deleteUserById(int id);
// 更新用戶密碼
public void updateUserPassword(UserBean bean);
}
6.實現(xiàn)接口
UserDaoimpl 實現(xiàn)類
package dao.impl;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 bean.UserBean;
import dao.IUserDao;
import util.MybaitsUtil;
public class UserDaoImpl implements IUserDao {
@Override
public void insert(UserBean bean) {
SqlSession session = MybaitsUtil.getSqlSession(true);
try {
session.insert("user.insertUser", bean);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 釋放資源
session.close();
}
}
@Override
public void findByid(int id) {
SqlSession session = MybaitsUtil.getSqlSession();
try {
UserBean user = session.selectOne("user.findByid", id);
// System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
@Override
public List<UserBean> findAll() {
List<UserBean> list = null;
SqlSession session = MybaitsUtil.getSqlSession();
try {
list = session.selectList("user.findAll");
// System.out.println(list.size());
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return list;
}
@Override
public void deleteUserById(int id) {
SqlSession session = MybaitsUtil.getSqlSession(true);
try {
session.delete("user.deleteUserById", id);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
@Override
public void updateUserPassword(UserBean bean) {
SqlSession session = MybaitsUtil.getSqlSession(true);
try {
session.update("updateUserPassword", bean);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
}
7. 測試(單元測試)
TestMain 單元測試類
package test;
import org.junit.Test;
import bean.UserBean;
import dao.IUserDao;
import dao.impl.UserDaoImpl;
public class TestMain {
// 插入
@Test
public void test1() {
IUserDao dao = new UserDaoImpl();
UserBean user = new UserBean();
user.setUsername("xiaowang");
user.setPassword("xw123");
dao.insert(user);
}
// 查找單個用戶
@Test
public void test2() {
IUserDao dao = new UserDaoImpl();
dao.findByid(2);
}
// 查找所有
@Test
public void test3() {
IUserDao dao = new UserDaoImpl();
dao.findAll();
}
// 通過id刪除用戶
@Test
public void test4() {
IUserDao dao = new UserDaoImpl();
dao.deleteUserById(3);
}
// 修改密碼
@Test
public void test5() {
IUserDao dao = new UserDaoImpl();
UserBean user = new UserBean();
user.setId(4);
user.setPassword("xw123");
dao.updateUserPassword(user);
}
}
使用 Eclipse 用鼠標(biāo)放在測試函數(shù)上方锋玲,右擊鼠標(biāo)選擇運行,就會執(zhí)行單個測試函數(shù)涵叮,實現(xiàn)這種功能需要導(dǎo)入 junit.jar 架包惭蹂。