在上一章中,使用接口的方式實現了數據的查詢。在本章中,主要說明如何使用Mybatis對數據進行增刪查改。
1、修改接口
public interface UserMapper {
public User selectUserByID(int id);
public List<User> viewByUsername(String username);
public void addUser(User user);
public void updateUser(User user);
public void deleteUser(int id);
}
在這裏,我們設置了一共五個方法,分別爲:
2、修改配置文件
<?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.dfz.mybatis.mapper.UserMapper">
<resultMap id="resultListUser" type="User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="address" property="address"/>
</resultMap>
<select id="selectUserByID" parameterType="int" resultType="User">
select * from user where id = #{id}
</select>
<select id="viewByUsername" parameterType="string" resultMap="resultListUser">
SELECT * FROM USER WHERE username like #{username}
</select>
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(username, password, address) values (#{username}, #{password}, #{address})
</insert>
<update id="updateUser" parameterType="User">
update user set username=#{username}, password=#{password}, address=#{address} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE from user where id=#{id}
</delete>
</mapper>
其中,resultMap是用於返回List<User>的;private SqlSessionFactory sqlSessionFactory;
private Reader reader;
@Before
public void before() {
try {
//讀取mybatis參數
reader = Resources.getResourceAsReader("mybatis-config.xml");
//建立session factory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test() {
//打開session
System.out.println("------------查詢方法測試開始------------");
SqlSession session = sqlSessionFactory.openSession();
//使用接口方式調用查找方法
List<User> users = session.getMapper(UserMapper.class).viewByUsername("zhang");
System.out.println(users);
session.close();
System.out.println("------------插入方法測試開始------------");
session = sqlSessionFactory.openSession();
User u1 = new User();
u1.setUsername("li");
u1.setPassword("password2");
u1.setAddress("Beijing");
session.getMapper(UserMapper.class).addUser(u1);
session.commit();
System.out.println(u1);
System.out.println(session.getMapper(UserMapper.class).viewByUsername("li"));
session.close();
System.out.println("------------修改方法測試開始------------");
session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User u2 = mapper.viewByUsername("li").get(0);
u2.setUsername("changedname");
mapper.updateUser(u2);
session.commit();
System.out.println(mapper.viewByUsername("changedname"));
session.close();
System.out.println("------------刪除方法測試開始------------");
session = sqlSessionFactory.openSession();
mapper = session.getMapper(UserMapper.class);
mapper.deleteUser(u1.getId());
System.out.println(mapper.viewByUsername("changedname"));
session.commit();
session.close();
}
值得一提的是,使用mybatis進行增加、修改和刪除數據的過程中,如果不調用session.commit()方法,則數據變更只會在內存中進行。