mybatis 1

Scroll Down

MyBatis 环境搭建

导入Maven依赖

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>

创建mybatis主配置文件

<?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">
<!--mybatis的主配置文件-->
<configuration>
    <!--配置环境 -->
    <environments default="mysql">
        <!--配置mysql环境  -->
        <environment id="mysql">
            <!--  配置事务类型  -->
            <transactionManager type="JDBC"/>
            <!--  配置数据源,连接池  -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/education?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--    指定映射配置文件的位置,映射配置文件指定的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/lucas/dao/UserDao.xml"/>
    </mappers>
</configuration>

创建对应的实体类

public class User implements Serializable {
    private String user;
    private String password;
    private String userType;
    //...(getter和setter)
}

创建Dao接口

public interface UserDao {
   List<User> findAll();
}

创建映射配置文件

映射配置文件一般叫xxxMapper.xml,但是我这里用了UserDao.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">

<mapper namespace="com.lucas.dao.UserDao" >
    <!--配置查询所有-->
    <select id="findAll" resultType="com.lucas.pojo.User">
        select * from users
    </select>
</mapper>

注意:这个配置文件存放的位置处于resource文件夹下中的com\lucas\dao和接口的位置有一个对应的关系

文件配置的具体步骤

  1. namespace:接口的全限类名
  2. id:接口中的函数名
  3. resultType:对应的实体类的全限类名

注意事项

  1. mybatis的映射配置文件位置必须和dao接口的包结构相同
  2. 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
  3. 映射配置文件的操作配置(select xxx),id属性的取值必须是dao接口的方法名

满足这几点要求后就可以不必写接口的实现类

入门案例

在环境配置中我们已经配置好了一些对应的方法,现在我们来完成java代码的编写

@Test
public void test1() throws IOException {
    //读取配置文件
    //注意这个Resources的类是:org.apache.ibatis.io.Resources;
    InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
    //创建SqlSessionFactory核心类,这是一个接口,通过SqlSessionFactoryBuilder来创建
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = sqlSessionFactoryBuilder.build(in);
    //创建sqlSession
    SqlSession sqlSession = factory.openSession();
    //创建Mapper,这是用代理的方式来创建的
    UserDao dao = sqlSession.getMapper(UserDao.class);
    //进行查找
    List<User> all = dao.findAll();
    for (User user : all) {
        System.out.println(user);
    }
    //释放资源
    sqlSession.close();
    in.close();
}

注解开发

@Select("select * from users")
List<User> findAll();

不用写mapping.xml和返回值类型,就可以实现mybatis的代理对象的生成

<mappers>
    <mapper class="com.lucas.dao.UserDao"/>
</mappers>

主配置文件的中的<mapper>改为class加上全限定类名,并同时删除mapping.xml,如果不删除就会报错