mybatis的CRUD操作(附错误解决方法)

1.创建一个maven的mybatis项目,链接mybatis入门

2.select

2.1 在UserDao接口中添加通过ID获取user的方法。

package dao;

import pojo.User;

import java.util.List;

public interface UserDao {
    List<User> getUserList();
//    insert
    User getUserById(int id);
}

2.2 在usermapper.xml中添加insert语句。

<?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="dao.UserDao">
    <select id="getUserList" resultType="pojo.User">
        select * from USER
    </select>
    <select id="getUserById" parameterType="int" resultType="pojo.User">
        select * from USER where id=#{id};
    </select>
</mapper>

2.3 在test中的UserDaoTest中添加insert的测试方法。



import dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;



import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserDaoTest {
    @Test
    public void test() {
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);
            List<User> users=userDao.getUserList();
            for (User user:users) {
                System.out.print(user.getId());
                System.out.print("   ");
                System.out.print(user.getName());
                System.out.print("   ");
                System.out.print(user.getPassword());
                System.out.println();
            }
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void insertTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            for (int i=1;i<=3;i++) {
                User user=userDao.getUserById(i);
                System.out.print(user.getId());
                System.out.print("   ");
                System.out.print(user.getName());
                System.out.print("   ");
                System.out.print(user.getPassword());
                System.out.println();
            }
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2.4 执行结果

3.update

3.1 更改pojo包下的User类,在其中添加有参构造方法和无参构造方法。

package pojo;


public class User {
    private int id;
    private String name;
    private String password;
    public User(){
        
    }
    public User(int id,String name,String password){
        this.id=id;
        this.name=name;
        this.password=password;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) { this.name = name; }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

3.2 在UserDao接口中添加updateuser方法。

package dao;

import pojo.User;

import java.util.List;

public interface UserDao {
    List<User> getUserList();
//    insert
    User getUserById(int id);
//    update
    void updateUser(User user);
}

3.3 在usermapper.xml中添加update语句。

<?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="dao.UserDao">
    <select id="getUserList" resultType="pojo.User">
        select * from USER
    </select>
    <select id="getUserById" parameterType="int" resultType="pojo.User">
        select * from USER where id=#{id};
    </select>
    <update id="updateUser" parameterType="pojo.User" >
        update user set name=#{name},password=#{password} where id=#{id};
    </update>
</mapper>

3.4 在test中添加测试方法



import dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;



import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserDaoTest {
    @Test
    public void test() {
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);
            List<User> users=userDao.getUserList();
            for (User user:users) {
                System.out.print(user.getId());
                System.out.print("   ");
                System.out.print(user.getName());
                System.out.print("   ");
                System.out.print(user.getPassword());
                System.out.println();
            }
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void insertTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            for (int i=1;i<=3;i++) {
                User user=userDao.getUserById(i);
                System.out.print(user.getId());
                System.out.print("   ");
                System.out.print(user.getName());
                System.out.print("   ");
                System.out.print(user.getPassword());
                System.out.println();
            }
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void updateTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            User user=new User(1,"aaa","bbb");

            userDao.updateUser(user);
            session.commit();
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

3.5 注意此时会出现一个异常

org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: java.sql.SQLException: Could not retrieve transation read-only status server
### The error may involve dao.UserDao.updateUser-Inline
### The error occurred while setting parameters
### SQL: update user set name=?,password=? where id=?;
### Cause: java.sql.SQLException: Could not retrieve transation read-only status server

原因是我之前使用后的mysql链接版本是5.1.32,但是实际的mysql版本是8.0.15。

解决方法是:将依赖改成与mysql相同的版本。

此时又会出现问题,执行代码后发现控制台输出

所以还需要将mybatis-config.xml中的driver修改一下

  3.6 此时数据库中数据为

4. insert

4.1 在UserDao接口中添加addUser方法

package dao;

import pojo.User;

import java.util.List;

public interface UserDao {
    List<User> getUserList();
//    insert
    User getUserById(int id);
//    update
    void updateUser(User user);
//    insert
    void addUser(User user);
}

4.2 在UserMapper.xml中添加insert语句

<?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="dao.UserDao">
    <select id="getUserList" resultType="pojo.User">
        select * from USER
    </select>
    <select id="getUserById" parameterType="int" resultType="pojo.User">
        select * from USER where id=#{id}
    </select>
    <update id="updateUser" parameterType="pojo.User" >
        update user set name=#{name},password=#{password} where id=#{id}
    </update>
    <insert id="addUser" parameterType="pojo.User">
        insert into user (id, name, password) values (#{id}, #{name}, #{password});
    </insert>
</mapper>

4.3 在test中添加测试方法



import dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;



import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserDaoTest {
    @Test
    public void test() {
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);
            List<User> users=userDao.getUserList();
            for (User user:users) {
                System.out.print(user.getId());
                System.out.print("   ");
                System.out.print(user.getName());
                System.out.print("   ");
                System.out.print(user.getPassword());
                System.out.println();
            }
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void insertTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            for (int i=1;i<=3;i++) {
                User user=userDao.getUserById(i);
                System.out.print(user.getId());
                System.out.print("   ");
                System.out.print(user.getName());
                System.out.print("   ");
                System.out.print(user.getPassword());
                System.out.println();
            }
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void updateTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            User user=new User(1,"aaa","bbb");

            userDao.updateUser(user);
            session.commit();
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void addTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            User user=new User(4,"aaa","bbb");

            userDao.addUser(user);
            session.commit();
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4.4 执行代码之后发现表中多了一条数据

5. delete

5.1 在UserDao接口中添加deleteUser方法

package dao;

import pojo.User;

import java.util.List;

public interface UserDao {
    List<User> getUserList();
//    insert
    User getUserById(int id);
//    update
    void updateUser(User user);
//    insert
    void addUser(User user);
//    delete
    void deleteUser(int id);
}

5.2 在UserMapper.xml中添加delete语句

<?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="dao.UserDao">
    <select id="getUserList" resultType="pojo.User">
        select * from USER
    </select>
    <select id="getUserById" parameterType="int" resultType="pojo.User">
        select * from USER where id=#{id}
    </select>
    <update id="updateUser" parameterType="pojo.User" >
        update user set name=#{name},password=#{password} where id=#{id}
    </update>
    <insert id="addUser" parameterType="pojo.User">
        insert into user (id, name, password) values (#{id}, #{name}, #{password});
    </insert>
    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id};
    </delete>
</mapper>

5.3 在test中添加delete测试方法



import dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;



import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserDaoTest {
    @Test
    public void test() {
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);
            List<User> users=userDao.getUserList();
            for (User user:users) {
                System.out.print(user.getId());
                System.out.print("   ");
                System.out.print(user.getName());
                System.out.print("   ");
                System.out.print(user.getPassword());
                System.out.println();
            }
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void insertTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            for (int i=1;i<=3;i++) {
                User user=userDao.getUserById(i);
                System.out.print(user.getId());
                System.out.print("   ");
                System.out.print(user.getName());
                System.out.print("   ");
                System.out.print(user.getPassword());
                System.out.println();
            }
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void updateTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            User user=new User(1,"aaa","bbb");

            userDao.updateUser(user);
            session.commit();
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void addTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);

            User user=new User(4,"aaa","bbb");

            userDao.addUser(user);
            session.commit();
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void deleteTest(){
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            SqlSessionFactory factory=builder.build(is);
            SqlSession session=factory.openSession();
            UserDao userDao=session.getMapper(UserDao.class);



            userDao.deleteUser(4);
            session.commit();
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5.4 执行代码后发现少了最后一条数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值