Talking is Cheap,Show Me the Code
回顾
在MyBatis框架学习Ⅱ中已经创建了一个简单的MyBatis查询数据库的小demo,也知道了使用MyBatis的大致步骤:
- 创建与数据库表相对应的实体类
- 创建实体类对应的映射文件,声明要进行的操作(增删改查)
- 创建配置文件,声明数据库等配置信息
- 在相应位置进行调用
增删改查的实现
之前只是实现了简单的查询,这次对增删该查都进行实现。
实体类、数据库表、配置文件
实体类不变,使用的数据库表不变,工程配置文件不变,都与之前相同。
增加一个接口
增加一个实体接口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);
}
实体类映射文件
因为要实现增删改查,所以对应的实体类映射文件也要相应的进行修改,声明增删该查的语句,映射的空间与接口相对应
<?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);
// 用户数据列表
getUserList();
// 插入数据
Insert();
// 更新用户
Update();
// 删除数据
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...");
// 执行插入
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());
// 执行更新
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());
// 执行删除
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());
}
}
}
运行结果,增删该查这样就完成了(这里使用的是接口,将增删改查方法都放在接口中,然后再实体类映射文件映射空间指定为该接口类,并且在调用时通过接口来映射;当然,也可像Ⅰ中那样用空间和id来指定方法)