【mybatis】入门 - 基本配置、简单示例

mybatis作用

  • 为JDBC提供SQL】mybatis本身用于生成JDBC所需要的各种SQL串。
  • 映射对象、SQL】节省了大量代码,使用户专注于业务实现。

mybatis本身用于生成JDBC所需要的各种SQL串。

Mybatis的基本配置

前期准备: 下载mybatis相应的jar包。

环境搭建流程

  1. 建立java项目。
  2. 导入mybatis 及其依赖的jar包,导入JDBC mysql 驱动jar包。
  3. 在数据库中创建 User表。
  4. 在java项目中创建 User实体类。
  5. 在实体类包中,创建 UserMapper.xml(注意格式),用于映射 User表的一些查询结果与User类中字段的关系。
  6. 在src目录下创建 mybatis.xml(命名可随意),并进行相应的配置:数据库连接,用到的Mapper(如,UserMapper.xml)等。
  7. 建立工具类,MyBatisUtil,用来与mybatis打交道。(技巧:静态类加载。)
  8. 测试:基本的连接,查询是否能成功。

细节

创建User表 及实体类

  • 数据驱动。
  • 为mybatis 准备作用的对象
  • 后面的目的,将利用mybatis将表与实体进行关联。

user表:

CREATE TABLE `user_basic_info` (
  `account` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `password` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`account`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

java中的User实体类:

public class User {
    private String account;
    private String name;
    private String password;

    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    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;
    }
}

配置mybatis

配置说明:
- 【作用:降低代价】使程序员关注于具体业务的实现,减轻操作数据库的代价。
- 【XML配置文件(config)的作用】包含对Mybatis的核心配置(影响范围很大),包括连接数据源、事务作用域、指定映射文件等。(XML解析的入口)
- 【建立映射器关联】通过映射器将 表,sql语句java中的实体建立关联关系。
- 【environments作用】因为程序可能会和多个数据库(如,mysql及oracle),而不同的数据库是需要不同的配置的,所以mabatis定义了环境的概念来对应于不同场景下的数据库连接等,方便用户根据需要进行切换。
- 【environment的结构】包括事务控制、数据源配置等。
- 【映射器mappers】将查询结果映射到java对象。(后面具体介绍)

mybatis-conf.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>
    <!-- 加载类路径下的属性文件-->
  <properties resource="db.properties" />

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="wang/mappers/userMapper.xml"/>
  </mappers>
</configuration>

上述配置文件中,db.properties中的内容:

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis
username = root
password = 123456

配置映射 userMapper.xml(任意命名)

配置说明:

  • 映射器作用】沟通SQL查询与 实体之间的桥梁,mybatis自动根据查询的结果自动生成相应的对象。
  • 【mapper的namespace属性】用来定义命名空间,如此一来,该mapper下的id便有了更全的全程,形成目录式的树状结构。
  • 字段映射】通过resultMap建立实体类字段与表字段之间的关系。表字段需唯一且出现在SQL的查询结果中,如此一来后面的查询便可根据SQL查询的结果,自动填充相应的java对象。
  • 查询动作】查询动作通常需要使用 select,insert,update,delete这样子的标签。查询动作需要的参数,从外界获得,由相应的java方法传入;而查询动作产生的结果,需要通过 resultXXX 来指定 结果自动封装成何种对象。

userMapper配置示例:

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="wang.entities.userMapper">
    <resultMap id="userResultMap" type="wang.entities.User">
      <id property="account" column="account" />
      <result property="name" column="name"/>
      <result property="password" column="password"/>
    </resultMap>

    <select id="selectUserByAccount" parameterType="int"  resultMap="userResultMap">

        select * from user where account = #{account}

    </select>

</mapper>

在java程序中使用mybatis的功能

  • 封装MybatisUtils工具类。
  • 使用sqlSession进行数据库操作。

MybatisUtils工具类
- 负责读取Mybatis相关的配置,加载相应的类。
- sqlSessionFactory 负责生产 sqlSession会话的工厂。sqlSession 负责执行XML中标识的Sql语句,同时向java程序返回相应的对象。

public class MybatisUtils {
    private static String mybatisResource = "mybatis-conf.xml";

    private static SqlSessionFactory sqlSessionFactory;

    public static SqlSessionFactory getSqlSessionFactory() {
        try {
            if (sqlSessionFactory == null) {
                InputStream inputStream = Resources.getResourceAsStream(mybatisResource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }

            return sqlSessionFactory;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

使用mabatis进行sql操作:

方法一:Main1.java代码

public class Main1{
    public static void main(String args[]){

        SqlSessionFactory sqlSessionFactory = MybatisUtils.getSqlSessionFactory();
        SqlSession session = sqlSessionFactory.openSession();
        try {
            User user = (User) session.selectOne("wang.entities.userMapper.selectUserByAccount", "wang");
        } finally {
            session.close();
        }
    }
}

方法二:Main2.java

public class Main2{
    public static void main(String args[]){

        SqlSessionFactory sqlSessionFactory = MybatisUtils.getSqlSessionFactory();
        SqlSession session = sqlSessionFactory.openSession();
        try {
        //新的地方:通过接口来规范要求,使得编译时可检查。
            UserMapper uMapper = session.getMapper(BlogMapper.class); // 将XML中的sql的ID转化为java中接口的方法。
            User user = uMapper.selectUserByAccount("wang");
        } finally {
            session.close();
        }
    }
}

UserMapper接口的定义:(接口包名:wang.entities.UserMapper)

public interface UserMapper{
    public User selectUserByAccount(String account);
}

mybatis工作流程

  1. 通过Reader对象读取src目录下的mybatis.xml配置文件(该文本的位置和名字可任意)
  2. 通过SqlSessionFactoryBuilder对象创建SqlSessionFactory对象
  3. 从当前线程中获取SqlSession对象 (??)
  4. 事务开始,在mybatis中默认
  5. 通过SqlSession对象读取StudentMapper.xml映射文件中的操作编号,从而读取sql语句。
  6. 事务提交,必写。
  7. 关闭SqlSession对象,并且分开当前线程与SqlSession对象,让GC尽早回收。

参考

mybatis中文文档
sqlSession.getMapper(UserMapper.class)的使用方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值