mybatis 第一个实例

2 第一个mybatis程序

步骤 搭建环境--》导入 maven 导入mybatis --》 编写代码----》测试代码

2.1 搭建环境

? 1 . 创建数据库

 ```  sql
 create databases `mybatis`;
 use  `mybatis`;
 
 create table `user`(
     `id` int(20) not null  primary key,
     `name` varchar(20) ,
     `pwd` varchar(20) 
 ) engine=innodb  default CHARSET=utf8;
 
 insert into `user` (`id`,`name`,`pwd`) values
 (1,‘张三‘,‘110‘),
 (2,‘李四‘,‘120‘),
 (3,‘王五‘,‘130‘)
 ```
  1. idea创建 maven项目
    • 创建一个普通的maven项目
    • mybatis 第一个实例

? 把 项目中的src目录删除

?

? 在maven配置文件 pom.xml 导入 mysql 和 mybatis junit 的依赖

 ```  xml
 <dependencies>
     <!--导入  mybatis 依赖-->
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>3.4.6</version>
         </dependency>
 
     <!--mysql驱动-->
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.47</version>
         </dependency>
 
     <!--junit  单元测试-->
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.13.2</version>
             <scope>test</scope>
         </dependency>
 
     </dependencies>
 ```

3 创建一个模块

? 在当前的项目上 , 右键 new module -----》 重新创建一个maven 项目, 新创建的这个相当子项目,

父项目导入的依赖, 子项目可以共享

4 从xml 构建 Sqlsessionfactory

? mybatis 第一个实例

在resources 文件夹中, 创建 一个 mybatis核心配置文件 的 xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>        <!--数据库的事务管理-->
            <dataSource type="POOLED">               <!--数据库连接池-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>          <!--数据库驱动-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=false&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=false&characterEncoding=UTF-8

useSSL=true&useUnicode=true& 会出现错误, 把true 改成false

characterEncoding=UTF-8 支持中文

创建一个 包 com.lsq. dao. utils 获取sqlsessionFactory 的工具类

package com.lsq.utils;


//mybatis  工具类


import jdk.nashorn.internal.ir.ReturnNode;
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 java.io.IOException;
import java.io.InputStream;

/*

  sqlsessionFactorybuilder  -->   sqlSessionfactory   --> sqlsession

 */
public class MybatisUtils {



    private  static  SqlSessionFactory sqlSessionFactory;


    static{
            //通过一个流加载进来
        try {
            String resource="mybatis-config.xml";
            InputStream rs = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(rs);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


     //  从 sqlsessionFactory 中获取 sqlsession
    public  static SqlSession  getSqlsession(){
        SqlSession sqlSession = sqlSessionFactory.openSession();

        return  sqlSession;
    }

}

编写代码

? 实体类

? mybatis 第一个实例

Dao 接口 userDao

package com.lsq.dao;


import com.lsq.pojo.User;

import java.util.List;

/*
   操作数据库
*/
public interface UserDao {

   List<User>  getUsers();

}

接口对应的Mapper.xml

<?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">

<!-- namespace = 绑定一个对应的Dao 接口 或 Mapper 接口  , 让这个mapper.xml  和接口产生联系 -->
<mapper namespace="com.lsq.dao.UserDao">

    <select id="getUsers"  resultType="com.lsq.pojo.User">

     select  * from  mybatis.user
    </select>

</mapper>

写好的mapper.xml 需要在 mybatis-config.xml (mybatis核心配置文件中配置)

 <mappers>
        <mapper resource="com/lsq/dao/UserMapper.xml"/>
 </mappers>

可以会遇到, 找不到mapper.xml 的情况,

解决1: 把mapper.xml 复制到 target/test-classes/com/lsq/dao/ 文件夹下

测试代码

package com.lsq.dao;

import com.lsq.pojo.User;
import com.lsq.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {

    @Test
    public  void test(){

      /*
           读取一个  mybatis-config  核心配置文件,
           sqlsessionFactoryBuild --> sqlsessionFactory --  sqlsession
       */
        SqlSession sqlsession = MybatisUtils.getSqlsession();

        //通过sqlsession 的  getMapper()方法 ,  返回接口的类型
        UserDao userdao = sqlsession.getMapper(UserDao.class);

        //通过获取的接口的对象 , 调用其方法
        List<User> users = userdao.getUsers();

        for (User u: users) {

            System.out.println(u);
        }

        //关闭资源
        sqlsession.close();

    }
}

运行结果

mybatis 第一个实例

可能出现的问题

  1. 配置的mapper.xml 文件没有注册
  2. mapper.xml 中 绑定的接口错误
  3. 绑定的方法名 错误
  4. 返回值类型错误
  5. maven导出资源问题

学习mybatis 遇到的类

sqlSessionFactoryBuilder

一旦创建了 sqlsessionFactory 就不需要它了 (最好用作局部方法变量)

sqlsessionfactory

一旦创建在运行期间一直存在 , 简单的使用单例模式

mybatis 第一个实例

上一篇:继承中类的初始化加载


下一篇:redux的使用