MyBatis基本使用

MyBatis基本使用

一、安装

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

使用数据库连接还需要导入mysql-connector-java.jar

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.47</version>
</dependency>
建议两个版本的jar包相匹配,MyBatis可以使用
<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.5.2</version>
</dependency>

二、编写配置文件

<?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=true&useUnicode=true&characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="12345678"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
       <!-- 第一种写法-->
        <mapper class="Mapper.UserMapper"/>
        <!--第二种写法-->
        <mapper resource="Mapper/UserMapper.xml"/>
    </mappers>
</configuration>

三、为了方便我们可以写一个工具类

1、使用 XML 构建 SqlSessionFactory
读取配置文件,生成SqlSessionFactory,然后从 SqlSessionFactory 中获取 SqlSession

public class MyFactroySqlsession {

    private static SqlSessionFactory sqlSessionFactory = null;

    // 初始化创建SqlSessionFactory对象
    static{
        try {
            InputStream is = Resources.getResourceAsStream("Mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(is);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 获取SqlSession对象的静态方法
    public static SqlSession getSqlSession(){
    //如果openSession(true)会默认自动提交事务
        return sqlSessionFactory.openSession();
    }

    // 获取SqlSessionFactory的静态方法
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }

2、不使用 XML 构建 SqlSessionFactory

ataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(UserMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

注意该例中,configuration 添加了一个映射器类(mapper class)。映射器类是 Java 类,它们包含 SQL 映射注解从而避免依赖 XML 文件。不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XML 配置。有鉴于此,如果存在一个同名 XML 配置文件,MyBatis 会自动查找并加载它。在这个例子中,基于类路径和 UserMapper.class的类名,会加载 UserMapper.xml)

四、编写实体类

该实体类对应数据库的User表,字段名也对应

//最好实现序列化接口
public class User  implements Serializable{
    private int id; 
    private String name;   
    private String password;   

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + 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;
    }
}

五、编写Mapper接口类和Mapper.xml文件

1、Mapper接口

public interface UserMapper {
    //根据id查询用户
    User selectUserById(int id);
}

2、编写UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <!--注意namespace=包名+类名-->
<mapper namespace="Mapper.UserMapper">

    <select id="selectUserById" resultType="daomain.User">
        select * FROM  user WHERE id=#{id}
    </select>

</mapper>

六、测试

  @Test
    public void selectUserById() {
        // 定义SqlSession变量
        SqlSession sqlSession = null;
        try {
            // 创建SqlSession实例
            sqlSession = MyFactroySqlsession.getSqlSession();
            //方式一
            Object o = sqlSession.selectOne("Mapper.UserMapper.selectUserById", 1);
             System.out.println(o);
                //方式二
            UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
         
            
           System.out.println(userMapper.selectUserById(1));
            // 提交事务
            sqlSession.commit();
        } catch (Exception e) {
            // 回滚事务
            sqlSession.rollback();
            e.printStackTrace();
        }finally {
            // 关闭SqlSession
            if(sqlSession != null)
                sqlSession.close();
        }
    }

第一种:你可能会注意到,这种方式和用全限定名调用 Java 对象的方法类似。这样,该命名就可以直接映射到在命名空间中同名的映射器类,并将已映射的 select 语句匹配到对应名称、参数和返回类型的方法。因此你就可以像上面那样,不费吹灰之力地在对应的映射器接口调用方法,就像方式二
第二种:第二种方法有很多优势,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句。

七、问题

如果使用maven可能遇到资源过滤问题,导致xml文件不能过来,可以加入下面的配置

<resources>
   <resource>
       <directory>src/main/java</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
   <resource>
       <directory>src/main/resources</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
</resources>

在这里插入图片描述

posted @ 2021-02-03 16:58  Latteitcjz  阅读(143)  评论(0)    收藏  举报