Mybatis 学习笔记
Author: Titan
Start Date: 2020-05-04
Mybatis系列的学习笔记是为本人原创系列文章。
遵循 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
转载需注明来源 Titan笔记 https://www.titan6.cn/
使用Mybatis完成CRUD操作
1. 插入数据操作
我们先在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() 语句的话,你会发现这个插入操作并不会成功的执行,也就是没有提交到数据库中。
2. 更新数据的操作
如果我们想根据一个用户的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(); }
3. 删除数据的操作
首先在UserDao的映射配置文件中加入删除数据操作的映射配置
<delete id="deleteUser" parameterType="Integer"> DELETE FROM user WHERE id = #{id}; </delete>
这里我们通过 ID 来选择要进行删除的用户,parameterType可以填 Integer。
对应地,UserDao接口中也要有deleteUser这个方法
void deleteUser(Integer id);
然后在Test中调用即可
4. 根据条件查询数据
如果我们想根据一个用户的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是无法模糊查询所有信息的。当然也可以在配置文件中进行处理,这里不具体介绍。
文章评论