Talking is Cheap,Show Me the Code
回顧
在MyBatis框架學習Ⅱ中已經(jīng)創(chuàng)建了一個簡單的MyBatis查詢數(shù)據(jù)庫的小demo,也知道了使用MyBatis的大致步驟:
- 創(chuàng)建與數(shù)據(jù)庫表相對應的實體類
- 創(chuàng)建實體類對應的映射文件,聲明要進行的操作(增刪改查)
- 創(chuàng)建配置文件,聲明數(shù)據(jù)庫等配置信息
- 在相應位置進行調(diào)用
增刪改查的實現(xiàn)
之前只是實現(xiàn)了簡單的查詢,這次對增刪該查都進行實現(xiàn)。
實體類、數(shù)據(jù)庫表、配置文件
實體類不變,使用的數(shù)據(jù)庫表不變,工程配置文件不變,都與之前相同。
增加一個接口
增加一個實體接口IUser,聲明增刪該查的方法相應接口。
public interface IUser {
public void insertUser(User user);
public void deleteUser(int userId);
public void updateUser(User user);
public List<User> getUserList();
public User getUser(int id);
}
實體類映射文件
因為要實現(xiàn)增刪改查,所以對應的實體類映射文件也要相應的進行修改,聲明增刪該查的語句,映射的空間與接口相對應
<?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="com.dao.IUser">
<select id="getUser" parameterType="int" resultType="com.bean.User">
SELECT * FROM USERS WHERE id = #{userId}
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO USERS(name, dept, website, phone)
VALUES (#{name}, #{dept}, #{website}, #{phone})
</insert>
<select id="getUserList" resultType="com.bean.User">
SELECT * FROM USERS
</select>
<update id="updateUser" parameterType="User">
UPDATE USERS
SET
name = #{name},
dept = #{dept},
website = #{website},
phone = #{phone}
WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM USERS WHERE id = #{id}
</delete>
</mapper>
測試類
修改測試類,進行測試
public class Main {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SqlSession session = sqlSessionFactory.openSession();
try {
//sqlSessionFactory.getConfiguration().addMapper(IUser.class);
//User user = (User) session.selectOne( "com.bean.UserMapper.getUserByID", 1);
// 用戶數(shù)據(jù)列表
getUserList();
// 插入數(shù)據(jù)
Insert();
// 更新用戶
Update();
// 刪除數(shù)據(jù)
Delete();
} finally {
session.close();
}
}
//插入
public static void Insert() {
try {
// 獲取Session連接
SqlSession session = sqlSessionFactory.openSession();
// 獲取Mapper
IUser userMapper = session.getMapper(IUser.class);
System.out.println("insert start...");
// 執(zhí)行插入
User user = new User();
user.setId(0);
user.setName("Google");
user.setDept("Tech");
user.setWebsite("http://www.google.com");
user.setPhone("120");
userMapper.insertUser(user);
// 提交事務
session.commit();
// 顯示插入之后User信息
System.out.println("after insert");
getUserList();
System.out.println("insert finished...");
} catch (Exception e) {
e.printStackTrace();
}
}
// 獲取用戶列表
public static void getUserList() {
try {
SqlSession session = sqlSessionFactory.openSession();
IUser iuser = session.getMapper(IUser.class);
// 顯示User信息
System.out.println("Get start...");
printUsers(iuser.getUserList());
System.out.println("Get finished...");
} catch (Exception e) {
e.printStackTrace();
}
}
//修改
public static void Update() {
try {
SqlSession session = sqlSessionFactory.openSession();
IUser iuser = session.getMapper(IUser.class);
System.out.println("update start...");
printUsers(iuser.getUserList());
// 執(zhí)行更新
User user = iuser.getUser(1);
user.setName("New name");
iuser.updateUser(user);
// 提交事務
session.commit();
// 顯示更新之后User信息
System.out.println("after update");
printUsers(iuser.getUserList());
System.out.println("update finished...");
} catch (Exception e) {
e.printStackTrace();
}
}
// 刪除
public static void Delete() {
try {
SqlSession session = sqlSessionFactory.openSession();
IUser iuser = session.getMapper(IUser.class);
System.out.println("delete start...");
// 顯示刪除之前User信息
System.out.println("Before delete");
printUsers(iuser.getUserList());
// 執(zhí)行刪除
iuser.deleteUser(2);
// 提交事務
session.commit();
// 顯示刪除之后User信息
System.out.println("after delete");
printUsers(iuser.getUserList());
System.out.println("delete finished...");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 打印用戶信息到控制臺
* @param users
*/
private static void printUsers(final List<User> users) {
int count = 0;
for (User user : users) {
System.out.println(MessageFormat.format("======== User[{0}]=======",
++count));
System.out.println("User Id: " + user.getId());
System.out.println("User Name: " + user.getName());
System.out.println("User Dept: " + user.getDept());
System.out.println("User Website: " + user.getWebsite());
}
}
}
運行結(jié)果,增刪該查這樣就完成了(這里使用的是接口,將增刪改查方法都放在接口中,然后再實體類映射文件映射空間指定為該接口類,并且在調(diào)用時通過接口來映射;當然,也可像Ⅰ中那樣用空間和id來指定方法)

運行結(jié)果