MyBatis学习总结(2)— 对数据库的增删改查操作
本篇文章接上一篇文章创建一个数据库,编写一个MyBatis程序的基础上,对数据库进行简单的增删改查操做。
**Mapper接口本质就是原来的Dao接口,**只是为了方便我们的书写。
一个mapper接口对应一个mapper映射文件。
UserMapper的本质为UserDao。
修改对应的mapper映射文件的namespace属性,对应上接口。
本片文章只编写接口文件、剪口映射文件、测试类三部分。
1. 代码
-
接口
package org.xiao2.dao; import org.xiao2.pojo.User; public interface UserMapper { //根据 id 查找用户 User selectUserById(int id); //增 :增加一个用户 int addUser(User user); //删 : 删除一个用户 int deletUserById(int id); //改 : 修改用户 int updateUser(User user); }
-
接口映射文件
<?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对应Mapper接口的类--> <mapper namespace="org.xiao2.dao.UserMapper"> <!--select标签的id对应映射接口的方法名字 resultType:返回结果的类型 中间就编写sql语句--> <select id="selectUserById" resultType="org.xiao2.pojo.User"> select * from user where id = #{id} </select> <insert id="addUser" parameterType="org.xiao2.pojo.User"> insert into user (id, name ,pwd) value (#{id},#{name},#{pwd}) </insert> <delete id="deletUserById" parameterType="int"> delete from user where id =#{id} </delete> <update id="updateUser" parameterType="org.xiao2.pojo.User"> update user set name = #{name},pwd = #{pwd} where id = #{id} </update> </mapper>
-
测试类:
package org.xiao2.dao; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.junit.Test; import org.xiao2.pojo.User; import org.xiao2.utils.MyBatisUtils; public class UserMapperTest2 { // 查:通过 Id 查询用户信息 @Test public void selectUserById(){ //1.拿到sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory(); //2.通过sqlSessionFactory对象openSession()创建一个sqlSession。 SqlSession sqlSession = sqlSessionFactory.openSession(); //3.通过sqlSession获得mapper对象 , 参数为映射文件对应的接口类的class对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //4.通过mapper对象来执行操作; User user = mapper.selectUserById(1); System.out.println(user); } //增 :增加一个用户 @Test public void addUser(){ User user1 = new User(4, "wangxiao", "12678"); SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.addUser(user1); // 提交事务 sqlSession.commit(); sqlSession.close(); if( i > 0){ System.out.println("插入成功!"); } } //删 : 删除一个用户 @Test public void deletUserById(){ SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.deletUserById(3); sqlSession.commit(); sqlSession.close(); } //改 : 修改用户 @Test public void updateUser(){ SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user2 = new User(1, "pohai", "890234"); int i = mapper.updateUser(user2); sqlSession.commit(); sqlSession.close(); } }
2. 结果
我们先看一下原数据库。
-
查:通过 Id 查询用户信息
-
增 :增加一个用户
-
删 : 删除一个用户
- 改 : 修改用户
3. CRUD注意点
-
1、事务
增,改,删需要提交事务!
增,改,删需要提交事务!
增,改,删需要提交事务!
-
2、乱码
如果出现乱码,先在sql中进行测试,sql没问题,就检查配置文件。
jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8"
-
3、参数问题
如果是基本数据类型,可以省略,但建议写上。
引用类型必须写指定的 包名+类名。