• 操作users表的CRUD(增、查、删、改)


    提示:结合之前文章MyBatis基础,在此基础上进行操作。

    1 封装工具类

    在src下main的java目录下建实体类:yj.com.units.MyBatisUtils

    1. package yj.com.units;
    2. import org.apache.ibatis.session.SqlSessionFactory;
    3. import org.apache.ibatis.io.Resources;
    4. import org.apache.ibatis.session.SqlSession;
    5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    6. import java.io.IOException;
    7. import java.io.InputStream;
    8. public class MyBatisUtils {
    9. static SqlSessionFactory sqlSessionFactory;
    10. static {
    11. try {
    12. String resource = "mybatis-config.xml";
    13. InputStream inputStream = Resources.getResourceAsStream(resource);
    14. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    15. } catch (IOException e) {
    16. e.printStackTrace();
    17. }
    18. }
    19. public static SqlSession getSqlSession(){
    20. return sqlSessionFactory.openSession();
    21. }
    22. }

    2.SqlSessionFactory

    SqlSessionFactory是mybatos框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过xml配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例:

    1. //读取配置文件
    2. InputStream inputStream = Resources.getResourceAsStream(resource);
    3. //根据配置文件构建sqlSessionFactory
    4. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    SqlSessionFactory对象是线程安全的,他一旦被创建,在整个应用执行期间都会存在。如果我们多次地创建同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。为了解决此问题,通常每一个数据库都会只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单例模式。

    3. SqlSession

    SqlSession是mybatis框架中另一个重要的对象,它是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。SqlSession对象包含了数据库中所有执行SQL操作的方法,由于其底层封装了JDBC连接,所以可以直接使用其实例来执行已映射的SQL语句。

    每个线程都应该有一个自己的SqlSession实例,并且该实例是不能被共享的。同时,SqlSession实例也是线程不安全的,因此其使用范围最好再一次请求或一个方法中,绝不能将其放在一个类的静态字段、实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。使用完SqlSession对象之后,要及时地关闭它,通常可以将其放在finally块中关闭,代码入下:

    1. SqlSession sqlSession = SqlSessionFactory.openSession();
    2. try{
    3. //此处执行持久化操作
    4. }finally{
    5. sqlSession.close();
    6. }

    4.根据id查找

    1. //按id号查找
    2. public User findbyId(int id);
    1. <select id="findbyid" parameterType="int" resultType="yj.com.pojo.User">
    2. select * from xsgl.user where id=#{id}
    3. select>
    1. //查询
    2. @Test
    3. public void findbyid(){
    4. SqlSession sqlSession = MyBatisUtils.getSqlSession();
    5. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    6. User user = mapper.findbyid(1002);
    7. System.out.println(user.toString());
    8. }

    5.添加

    1. // 添加一个新用户
    2. public int addUser(User user);
    1. <insert id="addUser" parameterType="yj.com.pojo.User">
    2. insert into xsgl.user(id,name,pwd,age) values (#{id},#{name},#{pwd},#{age})
    3. insert>
    1. //添加
    2. @Test
    3. public void addUser(){
    4. SqlSession sqlSession = MyBatisUtils.getSqlSession();
    5. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    6. User user = new User(12323,"叶凡","123456",20);
    7. int i = mapper.addUser(user);
    8. if (i>=0){
    9. sqlSession.commit();
    10. System.out.println("插入成功");
    11. }else{
    12. sqlSession.rollback();
    13. System.out.println("插入不成功");
    14. }
    15. }

    6.修改

    1. //修改用户
    2. public int updateUser(User user);
    1. <update id="updateUser" parameterType="yj.com.pojo.User">
    2. update user set id=#{id},name=#{name},pwd=#{pwd},age=#{age} where id=#{id};
    3. update>
    1. //修改
    2. @Test
    3. public void updateUser(){
    4. SqlSession sqlSession = MyBatisUtils.getSqlSession();
    5. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    6. int i = mapper.updateUser(new User(12323,"萧炎","12323",22));
    7. if (i>=1){
    8. System.out.println("修改成功");
    9. sqlSession.commit();
    10. }else {
    11. System.out.println("修改不成功");
    12. sqlSession.rollback();
    13. }
    14. }

    7.删除

    1. //按 id号删除
    2. public int delete(int id);
    1. <delete id="delete" parameterType="int">
    2. delete from xsgl.user where id=#{id}
    1. //删除
    2. @Test
    3. public void delUser(){
    4. SqlSession sqlSession = MyBatisUtils.getSqlSession();
    5. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    6. int i = mapper.delete(12323);
    7. if (i>=1){
    8. System.out.println("删除成功");
    9. sqlSession.commit();
    10. }else {
    11. System.out.println("删除不成功");
    12. sqlSession.rollback();
    13. }
    14. }

    8.分析错误

    1)标签不要匹配错

    2)resource绑定mapper,需要使用路径

    3)程序配置文件必须符合规范

    4)NullPointException,没有注册到资源

    5)输出的xml文件中存在中文乱码问题!

    6)maven资源没有导出问题

  • 相关阅读:
    Postman之CSV或JOSN文件实现数据驱动
    Kubernetes(k8s)的核心设计介绍
    如何获取UnrealEngine虚幻引擎的WebUI插件
    Matlab绘图函数subplot、tiledlayout、plot和scatter
    微信朋友圈十周年,你设置了三天可见吗?
    Hbase
    跑步运动耳机哪个牌子好、推荐几款专业跑步耳机
    【题目精刷】2022紫光展锐-数字IC设计
    threejs需要掌握的英语单词
    k8s证书过期处理
  • 原文地址:https://blog.csdn.net/m0_52896041/article/details/128055517