栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis的配置与使用[FirstDemo]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis的配置与使用[FirstDemo]

参考:

mybatis官方文档:mybatis – MyBatis 3 | 入门

狂神视频:【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂_哔哩哔哩_bilibili

步骤:

首先用Idea连接数据库,并在建立实验所需的数据库和数据表。创建一个普通maven项目,删掉scr作为父工程。在父工程的pop.xml中导入mybatis、mysql以及Junit 的jar包。根据文档,创建MybatisUtils工具类获取SqlSessionFactory对象。编写对应的配置文件mybatis-config.xml,来连接数据库,并为每一个mapper.xml进行注册。(有点类似之前的servlet-mapping,报道的感觉)接下来编写代码,首先写实体类编写对应的接口编写mapper.xml配置文件,来代替之前的实现类。其中:namespace绑定接口、id绑定接口中的方法,标签体专注于写sql语句,返回值类型resultType专注于返回值类型。编写测试类进行测试。调用方法即可。从 SqlSessionFactory 中获取 SqlSession【此处通过MybatisUtils工具类实现】,调用getMapper方法。其中每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。 这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。

步骤:

首先用Idea连接数据库,并在建立实验所需的数据库和数据表。创建一个普通maven项目,删掉scr作为父工程。在父工程的pop.xml中导入mybatis、mysql以及Junit 的jar包。

    
        
    
        org.mybatis
        mybatis
        3.4.5
    
        
        
            mysql
            mysql-connector-java
            5.1.47
        
        
        
            junit
            junit
            4.12
            test
        
    
根据文档,创建MybatisUtils工具类获取SqlSessionFactory对象。
public class MybatisUtils {
    //工具类
    public static SqlSessionFactory sqlSessionFactory;
    static{
        try {
        //使用mybatis第一步  获取sqlsqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
    public static SqlSession getSqlsession () {
          SqlSession sqlSession = sqlSessionFactory.openSession();
          return sqlSession;
    }
    }
编写对应的配置文件mybatis-config.xml,来连接数据库,并为每一个mapper.xml进行注册。(有点类似之前的servlet-mapping,报道的感觉)




    
        
            
            
                
                
                
                
            
        
    

    
        
    
接下来编写代码,首先写实体类
package com.liang.pojo;

//实体类
public class User {
//与数据库中的表字段一一对应
    private int id;
    private String name;
    private  String psd;
//无参构造和有参构造
    public User() {
    }
    public User(int id, String name, String psd) {
        this.id = id;
        this.name = name;
        this.psd = psd;
    }
    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 getPsd() {
        return psd;
    }
    public void setPsd(String psd) {
        this.psd = psd;
    }
//重写toString
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", psd='" + psd + ''' +
                '}';
    }
}
编写对应的接口
public interface Userdao {
    List getuserlist();
}
编写mapper.xml配置文件,来代替之前的实现类。其中:namespace绑定接口、id绑定接口中的方法,标签体专注于写sql语句,返回值类型resultType专注于返回值类型。






    
编写测试类进行测试。调用方法即可。从 SqlSessionFactory 中获取 SqlSession【此处通过MybatisUtils工具类实现】,调用getMapper方法。其中每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。 这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。
public class userdaotest {
    SqlSession sqlSession ;
    @Test
    public void test(){
        try{
            //获取sqlSession对象
            sqlSession = MybatisUtils.getSqlsession();
            //执行SQL 获得接口就可,因为配置文件里有接口的路径
            Userdao mapper = sqlSession.getMapper(Userdao.class);
            //可以执行里面的方法了
            List getuserlist = mapper.getuserlist();
            //小技巧 getuserlist.for就可得到增强for
            for (User user : getuserlist) {
                System.out.println(user);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭
            sqlSession.close();
        }
    }
}

最后的成果:

可能遇到的问题:

1、xml不能有中文注释【本博客为了便于理解 xml中加了中文注解 运行时需要删除】
2、useSSL=false
3、MybatisUtils.java里面,原来是
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
改成——sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 去了最前面的声明,因为前面 已经声明过了,private static SqlSessionFactory sqlSessionFactory;//提升作用域!!! 不然会报错 空指针异常
4、终于成功打印了,但是打印的是地址???因为要重写实体类的toString方法,就行了,打印输出的就是你怎么重写的内容!!

5.resources Mapper中的路径必须用/  

 namespace绑定接口必须用. 不能用/

6.编译后发现target目录没有出现,将Show Excluded Files勾选上即可

7.报错:java.lang.ExceptionInInitializerError

原因:查看生成的target目录,我们发现mapper.xml没有到对应的地方。这是由于Maven约定大于配置,所以我们写的配置文件存在无法被导出或生效的问题。【默认的资源配置文件放在resource目录下,但如果我们放到了java目录下,无法导出,需要手动配置资源过滤】

解决方法:在父工程和子工程的pop.xml中均添加如下代码,





我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号