Author: Titan
Start Date: 2020-05-04
Mybatis系列的学习笔记是为本人原创系列文章。
遵循 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
转载需注明来源 Titan笔记 https://www.titan6.cn/
我们先在DAO接口中新增一个saveUser的方法,传入的是一个User类对象。
// 保存一个新用户数据
void saveUser(User user);
如果要进行插入数据操作,需要在Mybatis的对应DAO配置文件中进行以下的配置
<insert id="saveUser" parameterType="cn.titan6.beans.User">
INSERT INTO user(username,address,sex,birthday)VALUES (#{username},#{address},#{sex},#{birthday});
</insert>
显然,insert标签的id对应的是DAO中的插入方法,parameterType 是要传入的实体类,这里即为User类。
在其中的SQL语句中,用#{keyName}的方式来对应实体类中的字段名,比如#{username} 对应的是 User中的username字段。
写一个Test方法来测试新增用户的插入数据操作(其中省略了session,userDao的初始化操作)
// 保存数据操作
@Test
public void addUser() {
User user = new User();
user.setUsername("NewTitan");
user.setAddress("河南省信阳市");
user.setSex("男");
user.setBirthday(new Date());
userDao.saveUser(user);
session.commit();
// 获取ID
System.out.println(user.getId());
}
我们新建了一个User对象并设置了其相关的信息,通过调用userDao的saveUser方法,成功将这个User的信息插入到数据库中了。
需要注意的是:需要除了查询操作以外,进行增删改操作的时候Mybatis默认是存在事务关系的,并且关闭了自动提交(auto commit),如果你没有加上 session.commit() 语句的话,你会发现这个插入操作并不会成功的执行,也就是没有提交到数据库中。
如果我们想根据一个用户的id来更新其用户名,地址等信息,该如何操作呢?其实和插入数据异曲同工。
首先在UserDao的映射配置文件中加入更新数据操作的映射配置
<!-- 更新数据 -->
<update id="updateUser" parameterType="cn.titan6.beans.User">
UPDATE user SET username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} WHERE id=#{id};
</update>
对应地,UserDao接口中也要有updateUser这个方法
// 更新用户数据
void updateUser(User user);
这样我们就可以用一个Test类来测试一下更新数据的方式
// 更新数据操作
@Test
public void updateUser() {
User user = new User();
user.setId(49);
user.setUsername("TitanHW");
user.setAddress("河南省信阳市");
user.setSex("男");
user.setBirthday(new Date());
userDao.updateUser(user);
session.commit();
}
首先在UserDao的映射配置文件中加入删除数据操作的映射配置
<delete id="deleteUser" parameterType="Integer">
DELETE FROM user WHERE id = #{id};
</delete>
这里我们通过 ID 来选择要进行删除的用户,parameterType可以填 Integer。
对应地,UserDao接口中也要有deleteUser这个方法
void deleteUser(Integer id);
然后在Test中调用即可
如果我们想根据一个用户的id来找到用户,或者通过用户名来模糊查询符合条件的用户,就应该这样:
在UserDao的映射配置文件的配置如下
<!-- 根据ID查询数据 -->
<select id="findById" parameterType="Integer" resultType="cn.titan6.beans.User">
SELECT * FROM user WHERE id = #{id};
</select>
<!-- 根据Username查询数据 -->
<select id="findByName" parameterType="String" resultType="cn.titan6.beans.User">
SELECT * FROM user WHERE username LIKE #{name};
</select>
UserDao接口:
// 根据 id 查询数据
User findById(Integer id);
// 根据Username查询数据
List<User> findByName(String username);
Test测试方法:
// 查询数据操作
@Test
public void findUser() {
User user = userDao.findById(49);
System.out.println(user.getUsername());
}
// 模糊查询操作
@Test
public void findUserByName() {
List<User> users = userDao.findByName("%Titan%");
for (User user : users) {
System.out.println(user.getUsername() + " ---- " + user.getAddress());
}
}
需要注意的是,在 findUserByName 的模糊查询方法中,我们需要传入一个%Titan%的LIKE字段,如果简单的传入Titan是无法模糊查询所有信息的。当然也可以在配置文件中进行处理,这里不具体介绍。